rman DUPLICATE DATABASE
----------------------------
Task 1: Create an Oracle Password File for the Auxiliary Instance
Task 2: Ensure Oracle Net Connectivity to the Auxiliary Instance
Task 3: Create an Initialization Parameter File for the Auxiliary Instance
Task 4: Start the Auxiliary Instance
Task 5: Mount or Open the Target Database
Task 6: Make Sure You Have the Necessary Backups and Archived Redo Logs
Task 7: Allocate Auxiliary Channels if Automatic Channels Are Not Configured
1, 在备用服务器上创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapw${ORACLE_SID} password=change_on_install entries=20
2, 在备用服务器上使用netca创建 linsener.ora, tnsnames.ora
3, 主服务器上执行 create pfile='/tmp/initora9.ora' from spfile;
创建备用服务器使用的pfile;
如果主服务器不是运行在归档下,设置为归档模式,或者启动到mount 状态来备份;
4, scp initora9.ora 到备用服务器,vi,增加如下:
*.log_file_name_convert=('/rdb/oradata/ora9','/u01/oradata/ora9')
*.db_file_name_convert=('/trsgfifs/oradata','/u01/oradata/ora9')
--注,此两个参数,是解决主、备服务器的文件放在不同的目录
备用服务器使用该pfile 启动到umount 状态
startup nomount pfile='/u01/product/9.2.0/initora9.ora';
5,备用服务器启动linsener,
6,主服务器在tnsnames.ora 中增加到备用服务器的tnsname 参数,并运行rman 进行一次全备:
rman tareget /;
run {
allocate channel d1 type disk;
set limit channel d1 kbytes 1048576;
backup tag 'dbfull' format '/home/backup/dbfull_%d_%s_%p.bck' database include current controlfile;
backup tag 'logfull' format '/home/backup/logfull_%d_%s_%p.bck' archivelog all;
release channel d1;}
--注,set limit 可以解决一些操作系统限制单个文件大小的问题,另外,其实也可用如:backup archivelog all delete input 顺便删除掉旧的归档
crosscheck archivelog all;
crosscheck backup;
RMAN> delete backup; -- 删除所有备份
--如何取消在用delete命令做刪除動作時的問答提示
RMAN> delete noprompt archivelog until time 'sysdate-14';
delete expired archivelog all;
7, 将备份下来的文件,scp 到备用服务器对应同一个目录下,或者用 ln -s 保证映射的目录一致;
--注,就我的理解,似乎关键是备份的文件,要在备份服务器上对应的目录里面存在,才能完成数据恢复
8, 主服务器重新运行rman
rman tareget /;
connect auxiliary sys/change_on_install@dupdb
9, 在第8 的rman命令下执行:
run{
allocate auxiliary channel d1 type disk;
SET NEWNAME FOR DATAFILE 1 TO '/u01/oradata/ora9/system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/u01/oradata/ora9/tp_data01.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/u01/oradata/ora9/xxxxx_data01.dbf';
DUPLICATE TARGET DATABASE TO ora9
LOGFILE
GROUP 1 ('/u01/oradata/ora9/REDO01.DBF') SIZE 50M,
GROUP 2 ('/u01/oradata/ora9/REDO02.DBF') SIZE 50M,
GROUP 3 ('/u01/oradata/ora9/REDO03.DBF') SIZE 50M
NOFILENAMECHECK;}
--注:按说明,设置了db_file_name_convert就不用使用 set newname, 但实际操作,如果没有设置set newname, 还是会报文件路径不对的错误
-- 另外,duplicate target 对应的sid 要一致,开始执行的时候没注意,导致sid不一致,无法启动
10,上述命令执行后,备用服务器shutdown, 修改 pfile,
去掉init中的:
# *.log_file_name_convert=('/rdb/oradata/ora9','/u01/oradata/ora9')
# *.db_file_name_convert=('/trsgfifs/oradata','/u01/oradata/ora9')
重新启动,设置为归档模式;
11, 将主服务器的归档文件 scp 到备用服务器对应的归档目录
12, 备用服务器执行:
SQL> startup mount;
SQL> recover database using backup controlfile until cancel;
输入 auto
SQL> alter database open resetlogs;
如正常启动,则执行下面
13, 需要手工创建临时表空间文件:
ALTER TABLESPACE TEMP_SBJ ADD TEMPFILE ''/u01/oradata/temp.dbf''
SIZE 1000M REUSE AUTOEXTEND OFF;
14, 执行下列命令并关闭oracle服务:
create spfile from pfile='/u01/product/9.2.0/initora9.ora';
ALTER SYSTEM SET SHARED_POOL_SIZE=150M SCOPE = SPFILE;
ALTER SYSTEM SET JAVA_POOL_SIZE=150M SCOPE = SPFILE;
15, 执行如下命令;
SQL> STARTUP MIGRATE
SQL> SPOOL catpatch.out
SQL> @?/rdbms/admin/catpatch.sql
SQL> SPOOL OFF
SQL> SHUTDOWN IMMEDIATE
Start the database and recompile the remaining invalid objects:
SQL> STARTUP
SQL> @?/rdbms/admin/utlrp.sql
SQL> SHUTDOWN
SQL> STARTUP
数据库升级startup upgrade和startup migrate 有什么不同
upgrade 应该是大版本之间的升级 比如 8-9 9-10 8-10
migrate 应该是同版本的patch 比如 9.2.0.1 - 9.2.0.8
---------数据恢复 oracle数据库恢复专家 13352468096 QQ:9417901 网站:http://www.sosdb.com-----