首页 > 代码库 > 基于RMAN的异机数据库克隆(rman duplicate)

基于RMAN的异机数据库克隆(rman duplicate)

对于基于生产环境下的数据库的版本升级或者测试新的应用程序的性能及其影响,备份恢复等等,我们可以采取从生产环境以克隆的方式将其克隆到本地而不影响生产数据库的正常使用。实现这个功能我们可以借助rman duplicate方式以及其简单的方式来完成。duplicate方式不同于OS级别的备份,它会为辅助数据库(克隆出来的数据库)生成一个新的dbid,而能够同时将目标数据库(原数据库)与辅助数据库注册到同一个恢复目录。本文描述了使用rman duplicate实现异机数据库克隆。

 

1、RMAN支持的duplicate类型
  支持基于备份的duplicate方式,其中该方式又分为连接到target DB与不连接target DB,不连接target DB又分为连接到catalog与不连接catalog
  支持基于活动数据库的duplicate方式。更多关于duplicate的描述及duplicate步骤,请参考:基于RMAN的同机数据库克隆
  这两种方式可以使用下面的图示简要描述。
              
              From Active DB  
              --------------
              |                                           With recovery catalog connection
  Duplicate   |                                          |--------------------------------
  ------------|              Without target conenction   |
              |             |----------------------------|
              |             |                            |
              --------------|                            |------------- 
              From Backups  |                             Without recovery catalog connection 
                            |-----------------------------
                             With target connection  

 

2、RMAN异机恢复示意图
  下面的图示是没有连接到target DB,也没有连接到recover catalog方式。基于这种方式实现duplicate,应指定备份文件所在的位置。
  本文下面所演示的试验也是基于该方式,在演示的过程中,磁盘路径,目录,数据文件使用了相同的位置与文件名。
  对于不同位置的duplicate情形,需要对文件位置进行转换,可参考: RMAN 数据库克隆文件位置转换方法 
                                          
           技术分享

3、实战RMAN异机克隆

[sql] view plain copy
 
 print?
  1. --环境:  
  2. --目标数据库: 192.168.7.25/sybo3      /u01/database/sybo3   主机名:linux3     
  3. --辅助数据库: 192.168.7.26/sybo3      /u01/database/sybo3   主机名:linux4   目标数据库与辅助数据库使用相同的文件位置  
  4. --说明:      
  5. --本次演示使用了备份文件,没有连接到catalog,也没有连接到target DB。  
  6. --对于下面描述过程中,如创建参数文件,密码文件,监听等等有不甚了解的,可参考下面链接中有关文章的描述。     
  7. --http://blog.csdn.net/robinson_0612/article/category/827734  (体系结构相关)      
  8. --http://blog.csdn.net/robinson_0612/article/category/828434  (网络配置相关)    
  9. [oracle@linux3 database]$ cat /etc/issue     
  10. Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)     
  11. Kernel \r on an \m     
  12.      
  13. SQL> select * from v$version where rownum<2;     
  14.      
  15. BANNER     
  16. --------------------------------------------------------------------------------      
  17. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production     
  18.   
  19.   
  20. a、备份及ftp目标数据库  
  21. --目标数据库存在的表及其内容,用于后续验证  
  22. SQL> select * from t;   
  23.   
  24. NAME       ACTION  
  25. ---------- --------------------  
  26. Robinson   Transfer DB  
  27. Jackson    Transfer DB by rman  
  28.   
  29. --下面备份目标数据库并ftp到辅助数据库所在的主机  
  30. $ export ORACLE_SID=sybo3  
  31. $ rman target /  
  32. RMAN> backup database include current controlfile plus archivelog delete input;  
  33. $ scp -r fra 192.168.7.26:/u01/database/sybo3/    -->如果有必要将将备份文件打包,此处fra目录是闪回区  
  34.   
  35. --Author : Robinson  
  36. --Blog   : http://blog.csdn.net/robinson_0612  
  37.   
  38. --ftp参数文件,如果没有pfile文件,可从target db生成。 create pfile from spfile;  
  39. $ scp $ORACLE_HOME/dbs/initsybo3.ora 192.168.7.26:$ORACLE_HOME/dbs  
  40.   
  41.   
  42. b、创建相应的dump文件夹  
  43. [oracle@linux4 database]$ more sybo3.sh   
  44. #!/bin/sh  
  45. mkdir -p /u01/database  
  46. mkdir -p /u01/database/sybo3/adump  
  47. mkdir -p /u01/database/sybo3/controlf  
  48. mkdir -p /u01/database/sybo3/fra  
  49. mkdir -p /u01/database/sybo3/oradata  
  50. mkdir -p /u01/database/sybo3/redo  
  51. mkdir -p /u01/database/sybo3/dpdump  
  52. mkdir -p /u01/database/sybo3/pfile  
  53. [oracle@linux4 database]$ ./sybo3.sh   
  54.   
  55.   
  56. c、配置辅助实例参数文件  
  57. --由于auxiliary DB与target DB不存在文件位置转换,因此无需作任何修改。下面是target DB 复制到auxiliary的参数文件内容  
  58. [oracle@linux4 ~]$ more /u01/oracle/db_1/dbs/initsybo3.ora   
  59. sybo3.__db_cache_size=113246208  
  60. sybo3.__java_pool_size=4194304  
  61. sybo3.__large_pool_size=4194304  
  62. sybo3.__oracle_base=‘/u01/oracle‘#ORACLE_BASE set from environment  
  63. sybo3.__pga_aggregate_target=150994944  
  64. sybo3.__sga_target=226492416  
  65. sybo3.__shared_io_pool_size=0  
  66. sybo3.__shared_pool_size=96468992  
  67. sybo3.__streams_pool_size=0  
  68. *.audit_file_dest=‘/u01/database/sybo3/adump/‘  
  69. *.audit_trail=‘db‘  
  70. *.compatible=‘11.2.0.0.0‘  
  71. *.control_files=‘/u01/database/sybo3/controlf/control01.ctl‘,‘/u01/database/sybo3/controlf/control02.ctl‘  
  72. *.db_block_size=8192  
  73. *.db_domain=‘orasrv.com‘  
  74. *.db_name=‘sybo3‘  
  75. *.db_recovery_file_dest=‘/u01/database/sybo3/fra‘  
  76. *.db_recovery_file_dest_size=4039114752  
  77. *.dg_broker_config_file1=‘/u01/database/sybo3/db_broker/dr1sybo3.dat‘  
  78. *.dg_broker_config_file2=‘/u01/database/sybo3/db_broker/dr2sybo3.dat‘  
  79. *.dg_broker_start=FALSE  
  80. *.diagnostic_dest=‘/u01/database/sybo3‘  
  81. *.log_archive_dest_1=‘‘  
  82. *.memory_target=374341632  
  83. *.open_cursors=300  
  84. *.processes=150  
  85. *.remote_login_passwordfile=‘EXCLUSIVE‘  
  86. *.undo_tablespace=‘UNDOTBS1‘  
  87.   
  88. d、生成辅助实例密码文件     
  89. --直接使用orapwd命令完成   
  90. $ orapwd file=/u01/oracle/db_1/dbs/orapwsybo3 password=oracle entries=10  
  91.   
  92.   
  93. e、实施数据库克隆   
  94. --由于此次测试无需连接到target及catalog,因此可以跳过配置监听,可在克隆完毕后再配置  
  95. [oracle@linux4 ~]$ export ORACLE_SID=sybo3  
  96. [oracle@linux4 ~]$ sqlplus / as sysdba  
  97. SQL> startup nomount;                   -->启动辅助实例到nomount状态  
  98. [oracle@linux4 ~]$ rman auxiliary /     -->直接使用auxiliary / 方式连接到辅助数据库  
  99.   
  100. connected to auxiliary database: SYBO3 (not mounted)  
  101.   
  102. RMAN> duplicate target database to sybo3 spfile  
  103. 2> backup location ‘/u01/database/sybo3/fra/SYBO3‘  
  104. 3> nofilenamecheck;  
  105.   
  106. Starting Duplicate Db at 31-JUL-13  
  107.   
  108. contents of Memory Script:  
  109. {  
  110.    restore clone spfile to  ‘/u01/oracle/db_1/dbs/spfilesybo3.ora‘ from  --->从自动备份还原spfile文件     
  111.  ‘/u01/database/sybo3/fra/SYBO3/autobackup/2013_07_31/o1_mf_s_822220850_8zjy9lp8_.bkp‘;  
  112.    sql clone "alter system set spfile= ‘‘/u01/oracle/db_1/dbs/spfilesybo3.ora‘‘";  
  113. }  
  114. executing Memory Script  
  115.   
  116. Starting restore at 31-JUL-13                                  
  117. allocated channel: ORA_AUX_DISK_1  
  118. channel ORA_AUX_DISK_1: SID=134 device type=DISK  
  119.   
  120. channel ORA_AUX_DISK_1: restoring spfile from AUTOBACKUP /u01/database/sybo3/fra/SYBO3/autobackup/2013_07_31/o1_mf_s_822220850_8zjy9lp8_.bkp  
  121. channel ORA_AUX_DISK_1: SPFILE restore from AUTOBACKUP complete  
  122. Finished restore at 31-JUL-13  
  123.   
  124. sql statement: alter system set spfile= ‘‘/u01/oracle/db_1/dbs/spfilesybo3.ora‘‘  
  125.   
  126. contents of Memory Script:  
  127. {  
  128.    sql clone "alter system set  db_name =    --->修改spfile并重启辅助实例   
  129.  ‘‘SYBO3‘‘ comment=  
  130.  ‘‘duplicate‘‘ scope=spfile";  
  131.    shutdown clone immediate;  
  132.    startup clone nomount;  
  133. }  
  134. executing Memory Script  
  135.   
  136. sql statement: alter system set  db_name =  ‘‘SYBO3‘‘ comment= ‘‘duplicate‘‘ scope=spfile  
  137.   
  138. Oracle instance shut down  
  139.   
  140. connected to auxiliary database (not started)  
  141. Oracle instance started  
  142.   
  143. Total System Global Area     376635392 bytes  
  144.   
  145. Fixed Size                     1336652 bytes  
  146. Variable Size                285215412 bytes  
  147. Database Buffers              83886080 bytes  
  148. Redo Buffers                   6197248 bytes  
  149.   
  150. contents of Memory Script:  
  151. {  
  152.    sql clone "alter system set  db_name =          
  153.  ‘‘SYBO3‘‘ comment=  
  154.  ‘‘Modified by RMAN duplicate‘‘ scope=spfile";  
  155.    sql clone "alter system set  db_unique_name =   
  156.  ‘‘SYBO3‘‘ comment=  
  157.  ‘‘Modified by RMAN duplicate‘‘ scope=spfile";  
  158.    shutdown clone immediate;  
  159.    startup clone force nomount             -->下面的命令用于还原控制文件  
  160.    restore clone primary controlfile from  ‘/u01/database/sybo3/fra/SYBO3/autobackup/2013_07_31/o1_mf_s_822220850_8zjy9lp8_.bkp‘;  
  161.    alter clone database mount;  
  162. }  
  163. executing Memory Script  
  164.   
  165. sql statement: alter system set  db_name =  ‘‘SYBO3‘‘ comment= ‘‘Modified by RMAN duplicate‘‘ scope=spfile  
  166.   
  167. sql statement: alter system set  db_unique_name =  ‘‘SYBO3‘‘ comment= ‘‘Modified by RMAN duplicate‘‘ scope=spfile  
  168.   
  169. Oracle instance shut down  
  170.   
  171. Oracle instance started  
  172.   
  173. Total System Global Area     376635392 bytes  
  174.   
  175. Fixed Size                     1336652 bytes  
  176. Variable Size                285215412 bytes  
  177. Database Buffers              83886080 bytes  
  178. Redo Buffers                   6197248 bytes  
  179.   
  180. Starting restore at 31-JUL-13  
  181. allocated channel: ORA_AUX_DISK_1  
  182. channel ORA_AUX_DISK_1: SID=133 device type=DISK  
  183.   
  184. channel ORA_AUX_DISK_1: restoring control file  
  185. channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01  
  186. output file name=/u01/database/sybo3/controlf/control01.ctl  
  187. output file name=/u01/database/sybo3/controlf/control02.ctl  
  188. Finished restore at 31-JUL-13  
  189.   
  190. database mounted  
  191. released channel: ORA_AUX_DISK_1  
  192. allocated channel: ORA_AUX_DISK_1  
  193. channel ORA_AUX_DISK_1: SID=133 device type=DISK  
  194. RMAN-05538: WARNING: implicitly using DB_FILE_NAME_CONVERT  
  195.   
  196. contents of Memory Script:  
  197. {  
  198.    set until scn  1177881;                --->设置时点恢复scn,修改datafile name.  
  199.    set newname for datafile  1 to   
  200.  "/u01/database/sybo3/oradata/system01.dbf";  
  201.    set newname for datafile  2 to   
  202.  "/u01/database/sybo3/oradata/sysaux01.dbf";  
  203.    set newname for datafile  3 to   
  204.  "/u01/database/sybo3/oradata/undotbs01.dbf";  
  205.    set newname for datafile  4 to   
  206.  "/u01/database/sybo3/oradata/users01.dbf";  
  207.    set newname for datafile  5 to   
  208.  "/u01/database/sybo3/oradata/example01.dbf";  
  209.    restore                              --->该命令用于还原辅助数据库  
  210.    clone database  
  211.    ;  
  212. }  
  213. executing Memory Script  
  214.   
  215. executing command: SET until clause  
  216.   
  217. executing command: SET NEWNAME  
  218.   
  219. executing command: SET NEWNAME  
  220.   
  221. executing command: SET NEWNAME  
  222.   
  223. executing command: SET NEWNAME  
  224.   
  225. executing command: SET NEWNAME  
  226.   
  227. Starting restore at 31-JUL-13  
  228. using channel ORA_AUX_DISK_1  
  229.   
  230. channel ORA_AUX_DISK_1: starting datafile backup set restore  
  231. channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set  
  232. channel ORA_AUX_DISK_1: restoring datafile 00001 to /u01/database/sybo3/oradata/system01.dbf  
  233. channel ORA_AUX_DISK_1: restoring datafile 00002 to /u01/database/sybo3/oradata/sysaux01.dbf  
  234. channel ORA_AUX_DISK_1: restoring datafile 00003 to /u01/database/sybo3/oradata/undotbs01.dbf  
  235. channel ORA_AUX_DISK_1: restoring datafile 00004 to /u01/database/sybo3/oradata/users01.dbf  
  236. channel ORA_AUX_DISK_1: restoring datafile 00005 to /u01/database/sybo3/oradata/example01.dbf  
  237. channel ORA_AUX_DISK_1: reading from backup piece /u01/database/sybo3/fra/SYBO3/backupset/2013_07_31/o1_mf_nnndf_TAG20130731T103921_8zjy6s8p_.bkp  
  238. channel ORA_AUX_DISK_1: piece handle=/u01/database/sybo3/fra/SYBO3/backupset/2013_07_31/o1_mf_nnndf_TAG20130731T103921_8zjy6s8p_.bkp   
  239.   tag=TAG20130731T103921  
  240. channel ORA_AUX_DISK_1: restored backup piece 1  
  241. channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:01:25  
  242. Finished restore at 31-JUL-13  
  243.   
  244. contents of Memory Script:  
  245. {  
  246.    switch clone datafile all;        --->更新数据文件信息到控制文件  
  247. }  
  248. executing Memory Script  
  249.   
  250. datafile 1 switched to datafile copy  
  251. input datafile copy RECID=1 STAMP=822223969 file name=/u01/database/sybo3/oradata/system01.dbf  
  252. datafile 2 switched to datafile copy  
  253. input datafile copy RECID=2 STAMP=822223969 file name=/u01/database/sybo3/oradata/sysaux01.dbf  
  254. datafile 3 switched to datafile copy  
  255. input datafile copy RECID=3 STAMP=822223969 file name=/u01/database/sybo3/oradata/undotbs01.dbf  
  256. datafile 4 switched to datafile copy  
  257. input datafile copy RECID=4 STAMP=822223969 file name=/u01/database/sybo3/oradata/users01.dbf  
  258. datafile 5 switched to datafile copy  
  259. input datafile copy RECID=5 STAMP=822223969 file name=/u01/database/sybo3/oradata/example01.dbf  
  260.   
  261. contents of Memory Script:  
  262. {  
  263.    set until scn  1177881;  
  264.    recover                        --->recover 辅助数据库以及删除日志  
  265.    clone database  
  266.     delete archivelog  
  267.    ;  
  268. }  
  269. executing Memory Script  
  270.   
  271. executing command: SET until clause  
  272.   
  273. Starting recover at 31-JUL-13  
  274. using channel ORA_AUX_DISK_1  
  275.   
  276. starting media recovery  
  277.   
  278. channel ORA_AUX_DISK_1: starting archived log restore to default destination  
  279. channel ORA_AUX_DISK_1: restoring archived log  
  280. archived log thread=1 sequence=41  
  281. channel ORA_AUX_DISK_1: reading from backup piece /u01/database/sybo3/fra/SYBO3/backupset/2013_07_31/o1_mf_annnn_TAG20130731T104049_8zjy9k8g_.bkp  
  282. channel ORA_AUX_DISK_1: piece handle=/u01/database/sybo3/fra/SYBO3/backupset/2013_07_31/o1_mf_annnn_TAG20130731T104049_8zjy9k8g_.bkp  
  283.    tag=TAG20130731T104049  
  284. channel ORA_AUX_DISK_1: restored backup piece 1  
  285. channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01  
  286. archived log file name=/u01/database/sybo3/fra/SYBO3/archivelog/2013_07_31/o1_mf_1_41_8zk1c4xq_.arc thread=1 sequence=41  
  287. channel clone_default: deleting archived log(s)  
  288. archived log file name=/u01/database/sybo3/fra/SYBO3/archivelog/2013_07_31/o1_mf_1_41_8zk1c4xq_.arc RECID=1 STAMP=822223972  
  289. media recovery complete, elapsed time: 00:00:01  
  290. Finished recover at 31-JUL-13  
  291.   
  292. contents of Memory Script:  
  293. {  
  294.    shutdown clone immediate;                        --->相关参数修改  
  295.    startup clone nomount;  
  296.    sql clone "alter system set  db_name =   
  297.  ‘‘SYBO3‘‘ comment=  
  298.  ‘‘Reset to original value by RMAN‘‘ scope=spfile";  
  299.    sql clone "alter system reset  db_unique_name scope=spfile";  
  300.    shutdown clone immediate;  
  301.    startup clone nomount;  
  302. }  
  303. executing Memory Script  
  304.   
  305. database dismounted  
  306. Oracle instance shut down  
  307.   
  308. connected to auxiliary database (not started)  
  309. Oracle instance started  
  310.   
  311. Total System Global Area     376635392 bytes  
  312.   
  313. Fixed Size                     1336652 bytes  
  314. Variable Size                285215412 bytes  
  315. Database Buffers              83886080 bytes  
  316. Redo Buffers                   6197248 bytes  
  317.   
  318. sql statement: alter system set  db_name =  ‘‘SYBO3‘‘ comment= ‘‘Reset to original value by RMAN‘‘ scope=spfile  
  319.   
  320. sql statement: alter system reset  db_unique_name scope=spfile  
  321.   
  322. Oracle instance shut down  
  323.   
  324. connected to auxiliary database (not started)  
  325. Oracle instance started  
  326.   
  327. Total System Global Area     376635392 bytes  
  328.   
  329. Fixed Size                     1336652 bytes  
  330. Variable Size                285215412 bytes  
  331. Database Buffers              83886080 bytes  
  332. Redo Buffers                   6197248 bytes  
  333. sql statement: CREATE CONTROLFILE REUSE SET DATABASE "SYBO3" RESETLOGS ARCHIVELOG  --->重建控制文件,隐式重置了dbid  
  334.   MAXLOGFILES     16  
  335.   MAXLOGMEMBERS      3  
  336.   MAXDATAFILES      100  
  337.   MAXINSTANCES     8  
  338.   MAXLOGHISTORY      292  
  339.  LOGFILE  
  340.   GROUP  1  SIZE 50 M ,  
  341.   GROUP  2  SIZE 50 M ,  
  342.   GROUP  3  SIZE 50 M   
  343.  DATAFILE  
  344.   ‘/u01/database/sybo3/oradata/system01.dbf‘  
  345.  CHARACTER SET AL32UTF8  
  346.   
  347.   
  348. contents of Memory Script:  
  349. {  
  350.    set newname for tempfile  1 to   
  351.  "/u01/database/sybo3/oradata/temp01.dbf";  
  352.    switch clone tempfile all;  
  353.    catalog clone datafilecopy  "/u01/database/sybo3/oradata/sysaux01.dbf",   
  354.  "/u01/database/sybo3/oradata/undotbs01.dbf",   
  355.  "/u01/database/sybo3/oradata/users01.dbf",   
  356.  "/u01/database/sybo3/oradata/example01.dbf";  
  357.    switch clone datafile all;  
  358. }  
  359. executing Memory Script  
  360.   
  361. executing command: SET NEWNAME  
  362.   
  363. renamed tempfile 1 to /u01/database/sybo3/oradata/temp01.dbf in control file  
  364.   
  365. cataloged datafile copy  
  366. datafile copy file name=/u01/database/sybo3/oradata/sysaux01.dbf RECID=1 STAMP=822223994  
  367. cataloged datafile copy  
  368. datafile copy file name=/u01/database/sybo3/oradata/undotbs01.dbf RECID=2 STAMP=822223994  
  369. cataloged datafile copy  
  370. datafile copy file name=/u01/database/sybo3/oradata/users01.dbf RECID=3 STAMP=822223994  
  371. cataloged datafile copy  
  372. datafile copy file name=/u01/database/sybo3/oradata/example01.dbf RECID=4 STAMP=822223994  
  373.   
  374. datafile 2 switched to datafile copy  
  375. input datafile copy RECID=1 STAMP=822223994 file name=/u01/database/sybo3/oradata/sysaux01.dbf  
  376. datafile 3 switched to datafile copy  
  377. input datafile copy RECID=2 STAMP=822223994 file name=/u01/database/sybo3/oradata/undotbs01.dbf  
  378. datafile 4 switched to datafile copy  
  379. input datafile copy RECID=3 STAMP=822223994 file name=/u01/database/sybo3/oradata/users01.dbf  
  380. datafile 5 switched to datafile copy  
  381. input datafile copy RECID=4 STAMP=822223994 file name=/u01/database/sybo3/oradata/example01.dbf  
  382.   
  383. contents of Memory Script:  
  384. {  
  385.    Alter clone database open resetlogs;  
  386. }  
  387. executing Memory Script  
  388.   
  389. database opened  
  390. Finished Duplicate Db at 31-JUL-13  
  391.   
  392. --对于那些没有连接到target db或者catalog而使用duplicate方式克隆的数据库,必须要指定BACKUP LOCATION,否则收到如下错误提示。  
  393. --这是由于所有和备份相关的信息,包括备份位置都记录在catalog或controlfile里,但是duplicate方式发布命令时,此时controlfile还没有还原。  
  394. --RMAN-05546: DUPLICATE without TARGET and CATALOG connections requires that BACKUP LOCATION is specified  
  395.   
  396.   
  397. f、验证结果(根据需要创建监听)  
  398. [oracle@linux4 ~]$ sqlplus / as sysdba  
  399.   
  400. SQL> select instance_name,host_name from v$instance;  
  401.   
  402. INSTANCE_NAME    HOST_NAME  
  403. ---------------- ------------------------------  
  404. sybo3            linux4.orasrv.com  
  405.   
  406. SQL> select * from t;   
  407.   
  408. NAME       ACTION  
  409. ---------- --------------------  
  410. Robinson   Transfer DB  
  411. Jackson    Transfer DB by rman  

4、后记
  a、在异机克隆时,如果auxiliary DB使用了与target DB相同的磁盘配置,目录结构以及文件名时,必须指定NOFILENAMECHECK。
       NOFILENAMECHECK可以阻止检查target DB的数据文件及联机日志文件是否处于正常使用的状态。而auxiliary DB与target DB的磁盘配置,
       目录结构以及文件名任一不同时,应避免使用NOFILENAMECHECK。
  b、对于没有连接到target DB或catalog的情形,应使用BACKUP LOCATION ‘<bak_dir>‘指定备份文件所在的位置。

 转:http://blog.csdn.net/leshami/article/details/9667847

基于RMAN的异机数据库克隆(rman duplicate)