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-----