技术开发 频道

如何使用RMAN在两机器间克隆数据库

【IT168 技术文档】

    目标数据库和克隆数据库分别在两台机器,其环境都一样:
    WINDOWS 2000 SERVER SP4
IE6.1, ORACLE9205
    
在本文中,使用的是目标数据库上的RMAN,目录数据库在第3台机器上,
    
操作步骤:
    1
、连接目标数据库,对目标数据库做全库备份
 
D:ORACLEBIN>rman 恢复管理器: 版本9.2.0.5.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. RMAN> connect catalog rman/rman@187 连接到恢复目录数据库 RMAN> connect target / 连接到目标数据库: ENCORE (DBID=3146513770) RMAN> run 2> {allocate channel d1 type disk maxpiecesize = 500m; 3> backup full database 4> format 'E:rmanbakdb_%d_%s_%p_%t'; 5> release channel d1; 6> } 分配的通道: d1 通道 d1: sid=16 devtype=DISK 启动 backup2004-06-28 21:03:31 通道 d1: 正在启动 full 数据文件备份集 通道 d1: 正在指定备份集中的数据文件 在备份集中包含当前的 SPFILE 备份集中包括当前控制文件 输入数据文件 fno=00001 name=D:ORACLEORADATAENCORESYSTEM01.DBF 输入数据文件 fno=00002 name=D:ORACLEORADATAENCOREUNDOTBS01.DBF 输入数据文件 fno=00005 name=D:ORACLEORADATAENCOREEXAMPLE01.DBF 输入数据文件 fno=00008 name=D:ORACLEORADATAENCORETOOLS01.DBF 输入数据文件 fno=00010 name=D:ORACLEORADATAENCOREXDB01.DBF 输入数据文件 fno=00006 name=D:ORACLEORADATAENCOREINDX01.DBF 输入数据文件 fno=00009 name=D:ORACLEORADATAENCOREUSERS01.DBF 输入数据文件 fno=00003 name=D:ORACLEORADATAENCORECWMLITE01.DBF 输入数据文件 fno=00004 name=D:ORACLEORADATAENCOREDRSYS01.DBF 输入数据文件 fno=00007 name=D:ORACLEORADATAENCOREODM01.DBF 通道 d1: 正在启动段 12004-06-28 21:03:37 通道 d1: 已完成段 12004-06-28 21:05:02 段 handle=E:RMANBAKDB_ENCORE_1_1_530053412 comment=NONE 通道 d1: 正在启动段 22004-06-28 21:05:02 通道 d1: 已完成段 22004-06-28 21:06:07 段 handle=E:RMANBAKDB_ENCORE_1_2_530053412 comment=NONE 通道 d1: 备份集已完成, 经过时间:00:02:35 完成 backup2004-06-28 21:06:07 释放的通道: d1 RMAN>
   
    2
、备份目标数据库的参数文件
SQL> create pfile from spfile; 文件已创建 SQL>
  
      3
--将目标数据库的参数文件(第2步创建)拷贝到克隆机器上,修改相应的参数(主要是实例名和数据库名,和bdumpudumpcdump 等后台进程的跟踪文件存放的路径,本文中,克隆数据库的实例名为 CLONE,数据库名为 CLONE_DB),然后在克隆机器上创建实例
D:oraclebin>oradim -new -sid clone -PFILE D:ORACLEdatabaseINITCLONE.ORA -INTPWD SYS1 D:oraclebin>
   
    4
--修改克隆数据库的监听器,增加对克隆数据库的监听(第3段)

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = D:ORACLE) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = ORACLE) (ORACLE_HOME = D:ORACLE) (SID_NAME = ORACLE92) ) (SID_DESC = (GLOBAL_DBNAME = clone_db) (ORACLE_HOME = D:ORACLE) (SID_NAME = clone) ) )
    
    5
、修改RMAN机器上的TNSNAMES.ORA文件,增加此连接串,保证RMAN使用此连接串能够连接到克隆数据库的实例

CLONE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.194)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = CLONE_DB) )


    6
、将目标数据库的备份集拷贝到克隆数据库机器的同一位置,并启动克隆数据库(nomount 状态)
    
由于第1步骤中没有备份日志,在使用
RMAN> run 2> {allocate auxiliary channel d1 type disk; 3> set newname for datafile 1 to 'F:CLONEdataSYSTEM01.DBF';
    脚本克隆数据库时,出现 NO BACKUP COPY 之类的错误,
之后补充备份目标数据库的日志,

RMAN> run 2> {allocate channel d1 type disk maxpiecesize = 500m; 3> backup archivelog all 4> format 'E:rmanbaklog_%d_%s_%p_%t'; 5> release channel d1; 6> } 分配的通道: d1 通道 d1: sid=11 devtype=DISK 启动 backup2004-06-28 21:42:18 当前日志已存档 通道 d1: 正在启动存档日志备份集 通道 d1: 正在指定备份集中的存档日志 输入存档日志线程 =1 序列 =107 记录 ID=107 时间戳=528371132 输入存档日志线程 =1 序列 =108 记录 ID=108 时间戳=530053839 输入存档日志线程 =1 序列 =109 记录 ID=109 时间戳=530054855 输入存档日志线程 =1 序列 =110 记录 ID=110 时间戳=530055437 输入存档日志线程 =1 序列 =111 记录 ID=111 时间戳=530055540 输入存档日志线程 =1 序列 =112 记录 ID=112 时间戳=530055739 通道 d1: 正在启动段 12004-06-28 21:42:23 通道 d1: 已完成段 12004-06-28 21:42:26 段 handle=E:RMANBAKLOG_ENCORE_2_1_530055742 comment=NONE 通道 d1: 备份集已完成, 经过时间:00:00:04 完成 backup2004-06-28 21:42:26 释放的通道: d1



    7、将日志备份集拷贝到克隆机器的同一目录后,回到RMAN处,连接辅助(克隆)数据库,
执行脚本,剩下的RMAN自己会做

RMAN> connect auxiliary sys/sys1@clone 连接到备用数据库: CLONE_DB (未安装) RMAN> run 2> {allocate auxiliary channel d1 type disk; 3> set newname for datafile 1 to 'F:CLONEdataSYSTEM01.DBF'; 4> set newname for datafile 2 to 'F:CLONEdataUNDOTBS01.DBF'; 5> set newname for datafile 3 to 'F:CLONEdataCWMLITE01.DBF'; 6> set newname for datafile 4 to 'F:CLONEdataDRSYS01.DBF'; 7> set newname for datafile 5 to 'F:CLONEdataEXAMPLE01.DBF'; 8> set newname for datafile 6 to 'F:CLONEdataINDX01.DBF'; 9> set newname for datafile 7 to 'F:CLONEdataODM01.DBF'; 10> set newname for datafile 8 to 'F:CLONEdataTOOLS01.DBF'; 11> set newname for datafile 9 to 'F:CLONEdataUSERS01.DBF'; 12> set newname for datafile 10 to 'F:CLONEdataXDB01.DBF'; 13> DUPLICATE TARGET DATABASE TO CLONE_DB 14> LOGFILE 15> GROUP 1 ('F:clonedataREDO01.DBF') SIZE 10M, 16> GROUP 2 ('F:clonedataREDO02.DBF') SIZE 10M, 17> GROUP 3 ('F:clonedataREDO03.DBF') SIZE 10M; 18> } 分配的通道: d1 通道 d1: sid=8 devtype=DISK 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 启动 Duplicate Db 于 2004-06-28 21:43:51 正在打印存储的脚本: Memory Script { set until scn 261688166; set newname for datafile 1 to "F:CLONEDATASYSTEM01.DBF"; set newname for datafile 2 to "F:CLONEDATAUNDOTBS01.DBF"; set newname for datafile 3 to "F:CLONEDATACWMLITE01.DBF"; set newname for datafile 4 to "F:CLONEDATADRSYS01.DBF"; set newname for datafile 5 to "F:CLONEDATAEXAMPLE01.DBF"; set newname for datafile 6 to "F:CLONEDATAINDX01.DBF"; set newname for datafile 7 to "F:CLONEDATAODM01.DBF"; set newname for datafile 8 to "F:CLONEDATATOOLS01.DBF"; set newname for datafile 9 to "F:CLONEDATAUSERS01.DBF"; set newname for datafile 10 to "F:CLONEDATAXDB01.DBF"; restore check readonly clone database ; } 正在执行脚本: Memory Script 正在执行命令: SET until clause 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 启动 restore2004-06-28 21:43:54 通道 d1: 正在开始恢复数据文件备份集 通道 d1: 正在指定从备份集恢复的数据文件 正将数据文件00001恢复到F:CLONEDATASYSTEM01.DBF 正将数据文件00002恢复到F:CLONEDATAUNDOTBS01.DBF 正将数据文件00003恢复到F:CLONEDATACWMLITE01.DBF 正将数据文件00004恢复到F:CLONEDATADRSYS01.DBF 正将数据文件00005恢复到F:CLONEDATAEXAMPLE01.DBF 正将数据文件00006恢复到F:CLONEDATAINDX01.DBF 正将数据文件00007恢复到F:CLONEDATAODM01.DBF 正将数据文件00008恢复到F:CLONEDATATOOLS01.DBF 正将数据文件00009恢复到F:CLONEDATAUSERS01.DBF 正将数据文件00010恢复到F:CLONEDATAXDB01.DBF 通道 d1: 已恢复备份段 1 段 handle=E:RMANBAKDB_ENCORE_1_1_530053412 tag=TAG20040628T210331 params=NULL 通道 d1: 已恢复备份段 2 段 handle=E:RMANBAKDB_ENCORE_1_2_530053412 tag=TAG20040628T210331 params=NULL 通道 d1: 恢复完成 完成 restore2004-06-28 21:46:35 sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "CLONE_DB" RESETLOGS ARCHIVELOG MAXLOGFILES 50 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 ( 'F:clonedataREDO01.DBF' ) SIZE 10485760 , GROUP 2 ( 'F:clonedataREDO02.DBF' ) SIZE 10485760 , GROUP 3 ( 'F:clonedataREDO03.DBF' ) SIZE 10485760 DATAFILE 'F:CLONEDATASYSTEM01.DBF' CHARACTER SET ZHS16GBK 正在打印存储的脚本: Memory Script { switch clone datafile all; } 正在执行脚本: Memory Script 数据文件 2 已转换成数据文件副本 输入数据文件副本 recid=1 stamp=530056505 文件名=F:CLONEDATAUNDOTBS01.DBF 数据文件 3 已转换成数据文件副本 输入数据文件副本 recid=2 stamp=530056505 文件名=F:CLONEDATACWMLITE01.DBF 数据文件 4 已转换成数据文件副本 输入数据文件副本 recid=3 stamp=530056505 文件名=F:CLONEDATADRSYS01.DBF 数据文件 5 已转换成数据文件副本 输入数据文件副本 recid=4 stamp=530056505 文件名=F:CLONEDATAEXAMPLE01.DBF 数据文件 6 已转换成数据文件副本 输入数据文件副本 recid=5 stamp=530056505 文件名=F:CLONEDATAINDX01.DBF 数据文件 7 已转换成数据文件副本 输入数据文件副本 recid=6 stamp=530056505 文件名=F:CLONEDATAODM01.DBF 数据文件 8 已转换成数据文件副本 输入数据文件副本 recid=7 stamp=530056505 文件名=F:CLONEDATATOOLS01.DBF 数据文件 9 已转换成数据文件副本 输入数据文件副本 recid=8 stamp=530056505 文件名=F:CLONEDATAUSERS01.DBF 数据文件 10 已转换成数据文件副本 输入数据文件副本 recid=9 stamp=530056505 文件名=F:CLONEDATAXDB01.DBF 正在打印存储的脚本: Memory Script { set until scn 261688166; recover clone database delete archivelog ; } 正在执行脚本: Memory Script 正在执行命令: SET until clause 启动 recover 于 2004-06-28 21:46:37 正在开始介质的恢复 通道 d1: 正在启动到默认目标的存档日志恢复 通道 d1: 正在恢复存档日志 存档日志线程 =1 序列=108 通道 d1: 正在恢复存档日志 存档日志线程 =1 序列=109 通道 d1: 正在恢复存档日志 存档日志线程 =1 序列=110 通道 d1: 正在恢复存档日志 存档日志线程 =1 序列=111 通道 d1: 正在恢复存档日志 存档日志线程 =1 序列=112 通道 d1: 已恢复备份段 1 段 handle=E:RMANBAKLOG_ENCORE_2_1_530055742 tag=TAG20040628T214221 params=NULL 通道 d1: 恢复完成 存档日志文件名 =F:CLONELOGARC00108.001 线程 =1 序列 =108 通道 clone_default: 正在删除存档日志 存档日志文件名 =F:CLONELOGARC00108.001 记录 ID=3 时间戳 =530056510 存档日志文件名 =F:CLONELOGARC00109.001 线程 =1 序列 =109 通道 clone_default: 正在删除存档日志 存档日志文件名 =F:CLONELOGARC00109.001 记录 ID=4 时间戳 =530056510 存档日志文件名 =F:CLONELOGARC00110.001 线程 =1 序列 =110 通道 clone_default: 正在删除存档日志 存档日志文件名 =F:CLONELOGARC00110.001 记录 ID=5 时间戳 =530056510 存档日志文件名 =F:CLONELOGARC00111.001 线程 =1 序列 =111 通道 clone_default: 正在删除存档日志 存档日志文件名 =F:CLONELOGARC00111.001 记录 ID=2 时间戳 =530056510 存档日志文件名 =F:CLONELOGARC00112.001 线程 =1 序列 =112 通道 clone_default: 正在删除存档日志 存档日志文件名 =F:CLONELOGARC00112.001 记录 ID=1 时间戳 =530056510 完成介质的恢复 完成 recover 于 2004-06-28 21:46:47 正在打印存储的脚本: Memory Script { shutdown clone; startup clone nomount ; } 正在执行脚本: Memory Script 数据库已卸载 Oracle 例程已关闭 已连接到备用数据库 (未启动) Oracle 例程已启动 系统全局区域总计 319889436 字节 Fixed Size 454684 字节 Variable Size 109051904 字节 Database Buffers 209715200 字节 Redo Buffers 667648 字节 sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "CLONE_DB" RESETLOGS ARCHIVELOG MAXLOGFILES 50 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 ( 'F:clonedataREDO01.DBF' ) SIZE 10485760 , GROUP 2 ( 'F:clonedataREDO02.DBF' ) SIZE 10485760 , GROUP 3 ( 'F:clonedataREDO03.DBF' ) SIZE 10485760 DATAFILE 'F:CLONEDATASYSTEM01.DBF' CHARACTER SET ZHS16GBK 正在打印存储的脚本: Memory Script { catalog clone datafilecopy "F:CLONEDATAUNDOTBS01.DBF"; catalog clone datafilecopy "F:CLONEDATACWMLITE01.DBF"; catalog clone datafilecopy "F:CLONEDATADRSYS01.DBF"; catalog clone datafilecopy "F:CLONEDATAEXAMPLE01.DBF"; catalog clone datafilecopy "F:CLONEDATAINDX01.DBF"; catalog clone datafilecopy "F:CLONEDATAODM01.DBF"; catalog clone datafilecopy "F:CLONEDATATOOLS01.DBF"; catalog clone datafilecopy "F:CLONEDATAUSERS01.DBF"; catalog clone datafilecopy "F:CLONEDATAXDB01.DBF"; switch clone datafile all; } 正在执行脚本: Memory Script 已将数据文件副本列入目录 数据文件副本 filename=F:CLONEDATAUNDOTBS01.DBF recid=1 stamp=530056530 已将数据文件副本列入目录 数据文件副本 filename=F:CLONEDATACWMLITE01.DBF recid=2 stamp=530056530 已将数据文件副本列入目录 数据文件副本 filename=F:CLONEDATADRSYS01.DBF recid=3 stamp=530056531 已将数据文件副本列入目录 数据文件副本 filename=F:CLONEDATAEXAMPLE01.DBF recid=4 stamp=530056531 已将数据文件副本列入目录 数据文件副本 filename=F:CLONEDATAINDX01.DBF recid=5 stamp=530056531 已将数据文件副本列入目录 数据文件副本 filename=F:CLONEDATAODM01.DBF recid=6 stamp=530056531 已将数据文件副本列入目录 数据文件副本 filename=F:CLONEDATATOOLS01.DBF recid=7 stamp=530056532 已将数据文件副本列入目录 数据文件副本 filename=F:CLONEDATAUSERS01.DBF recid=8 stamp=530056532 已将数据文件副本列入目录 数据文件副本 filename=F:CLONEDATAXDB01.DBF recid=9 stamp=530056532 数据文件 2 已转换成数据文件副本 输入数据文件副本 recid=1 stamp=530056530 文件名=F:CLONEDATAUNDOTBS01.DBF 数据文件 3 已转换成数据文件副本 输入数据文件副本 recid=2 stamp=530056530 文件名=F:CLONEDATACWMLITE01.DBF 数据文件 4 已转换成数据文件副本 输入数据文件副本 recid=3 stamp=530056531 文件名=F:CLONEDATADRSYS01.DBF 数据文件 5 已转换成数据文件副本 输入数据文件副本 recid=4 stamp=530056531 文件名=F:CLONEDATAEXAMPLE01.DBF 数据文件 6 已转换成数据文件副本 输入数据文件副本 recid=5 stamp=530056531 文件名=F:CLONEDATAINDX01.DBF 数据文件 7 已转换成数据文件副本 输入数据文件副本 recid=6 stamp=530056531 文件名=F:CLONEDATAODM01.DBF 数据文件 8 已转换成数据文件副本 输入数据文件副本 recid=7 stamp=530056532 文件名=F:CLONEDATATOOLS01.DBF 数据文件 9 已转换成数据文件副本 输入数据文件副本 recid=8 stamp=530056532 文件名=F:CLONEDATAUSERS01.DBF 数据文件 10 已转换成数据文件副本 输入数据文件副本 recid=9 stamp=530056532 文件名=F:CLONEDATAXDB01.DBF 正在打印存储的脚本: Memory Script { Alter clone database open resetlogs; } 正在执行脚本: Memory Script 数据库已打开 RMAN> --执行此步骤需要注意:避免连接克隆数据库,否则,RMAN将无法正常关闭克隆数据库 shutdown clone),剩下的步骤无法继续执行。
        
    8
、测试克隆数据库
D:oraclebin>sqlplus SQL*Plus: Release 9.2.0.5.0 - Production on Mon Jun 28 22:01:46 2004 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Enter user-name: sys/sys1@clone as sysdba Connected to: Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options JServer Release 9.2.0.5.0 - Production SQL> select status from v$instance; STATUS ------------ OPEN SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination F:CLONElog Oldest online log sequence 0 Next log sequence to archive 1 Current log sequence 1 SQL>
总结:在两台机器间用RMAN克隆数据库,个人认为,有两点需要注意:

    1
、在对目标数据库做全库备份时,要注意同时备份日志,缺少此步骤,RMAN在克隆时
将报 NO BACKUP COPY 之类的错误

    2
、要将目标数据库备份的备份集拷贝到克隆机器的同一个目录(同备份目标数据库时
备份集存放的目录)下,否则,RMAN将报:找不到XXXX备份集
0
相关文章