使用RMAN备份集恢复DB到其他机器 (2复制方法)
使用 RMAN DUPLICATE 命令可 以在保 留目 标数 据库 的基础上 依靠目标 数 据库(Target Database)的备份创建一个副本数据库(Duplicate Database) .该副本即可与目标数 据库完全相同,也可仅包含目标数据库表空间的一部子集。目标站点(Target Site)以及副 本站点(Duplicate Site)甚至可以在同一台机器上。
( 生成新的唯一的 DBID,如果控制文件中仍保存有备份信息,可以不连接 Catalog )
步骤:
1.准备工作,配置副本DB环境
1. 备份主数据库(包括数据文件、控制文件以及所有归档),并把该备份集拷贝到副本 数据库机器同样的目录下。
2. 拷贝主数据库的初始化参数文件 pfile 到副本数据库机器上,并根据需要作相应修改,创建密码文件。
3. 配置主数据库到副本数据库的连接。
2.启动副本数据库到 nomount下,目录数据库必须MOUNT (或OPEN)
$ sqlplus /nolog SQL> conn / as sysdba SQL> startup nomount
3.运行RMAN,分别连接主数据库与副本数据库实例
控制文件中保存有备份信息,可以不连接 Catalog
在副本数据库上:$ rman target sys/change_on_install@MING auxiliary /
4.运行复制命令
如果没有配置自动分配通道的话,需要手工指定至少 1 条辅助通道。
DUPLICATE命令将自动完成:将还原所有数据文件,重新创建控制文件,并利 用新的参数文件启动恢复数据库到一致状态,最后用 resetlog 方式打开数据库,并 重建 redolog
RMAN> RUN { ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;duplicate target database tocrmnofilenamecheck; RELEASE CHANNEL aux1;}
5.重建临时表空间,立即备份数据库
SQL> alter tablespace temp add tempfile '/u05/oracle/oradata/crm/temp01.dbf' size 10M;
附:Duplicate 复制命令的一些高级用法:
1.NOFILENAMECHECK异机恢复需要指定 NOFILENAMECHECK,可以跳过文件名检测,避免 oracle 错 误的领会你的操作意图。
2.指定PFILE如果辅助实例不是用 SPFILE启动,需要指定 PFILE 参数,PFILE文件必须放在运行 RMAN 的客户端上。
3.跳过不需要复制的表空间要跳过只读表空间,在执行 duplicate 命令时指定 SKIP READONLY 子句即可。
要跳过离线表空间,在执行 duplicate 命令之前将其置为 OFFLINE NORMAL 状态即可,RMAN 复制时会跳过只读或离线表空间的数据文件。
要跳过正常的表空间,指定 SKIP TABLESPACE ts_name, …
4.恢复到以前的时间点要恢复到以前的时间点,在 duplicate 命令中指定 UNTIL TIME 'SYSDATE-1' 5.创建过程中重命名控制文件可以使用 restore controlfile from …;或者 dbms_backup_restore 包恢复出控件文件,然后在初始化参数文件 PFILE 中进行正确的设置。
6.创建过程中重命名在线日志文件1.执行 duplicate 命名时指定 LOGFILE子句,手工设置 redo logs 文件名。 例:LOGFILE GROUP 1 ('?/oradata/newdb/redo01_1.log',
'?/oradata/newdb/redo01_2. log') SIZE 200K,)
2.副本数据库初始化参数文件 PFILE中设置 LOG_FILE_NAME_CONVERT LOG_FILE_NAME_CONVERT = 'string1' , 'string2' , 'string3' , 'string4' , ……;将 strin1 替换为 string2,string3 替换为 string4 7.创建过程中重命名数据文件,或改变数据库文件的新的路径1.在初始化参数中重命名:DB_FILE_NAME_CONVERT=‘xxxx’,‘yyyy’2.在 Duplicate Duplicate Duplicate 命令中重命名数据文件: duplicate target database to newdb DB_FILE_NAME_CONVERT=('xxxx', 'yyyyy ');3.使用 SET NEWNAME 命令重命名数据文件SET NEWNAME FOR DATAFILE 1 TO '/xxx/xxx.dbf';4.使用 CONFIGURE AUXNAME 命令重命名数据文件CONFIGURE AUXNAME FOR DATAFILE 1 TO '/xxxx/xxx.dbf';5.重命名临时文件路径SET NEWNAME FOR TEMPFILE '/xxx/xxx.dbf' TO '/yyy/xxx.dbf';
例:一个比较复杂的复制命令如下:
RMAN> RUN {
allocate auxiliary channel newdb1 device type sbt;
duplicate target database to newdb
DB_FILE_NAME_CONVERT=('/h1/oracle/dbs/trgt/','/h2/oracle/oradata/newdb/')
UNTIL TIME 'SYSDATE-1' # specifies incomplete recovery
SKIP TABLESPACE cmwlite, drsys, example # skip desired tablespaces
PFILE = ?/dbs/initNEWDB.ora
LOGFILE
GROUP 1 ('?/oradata/newdb/redo01_1.log',
'?/oradata/newdb/redo01_2. log') SIZE 200K,
GROUP 2 ('?/oradata/newdb/redo02_1. log'',
'?/oradata/newdb/redo02_2. log'') SIZE 200K
GROUP 3 ('?/oradata/newdb/redo03_1. log'',
'?/oradata/newdb/redo03_2. log'') SIZE 200K REUSE;
}
使用 RMAN DUPLICATE 命令可 以在保 留目 标数 据库 的基础上 依靠目标 数 据库(Target Database)的备份创建一个副本数据库(Duplicate Database) .该副本即可与目标数 据库完全相同,也可仅包含目标数据库表空间的一部子集。目标站点(Target Site)以及副 本站点(Duplicate Site)甚至可以在同一台机器上。
( 生成新的唯一的 DBID,如果控制文件中仍保存有备份信息,可以不连接 Catalog )
步骤:
1.准备工作,配置副本DB环境
1. 备份主数据库(包括数据文件、控制文件以及所有归档),并把该备份集拷贝到副本 数据库机器同样的目录下。
2. 拷贝主数据库的初始化参数文件 pfile 到副本数据库机器上,并根据需要作相应修改,创建密码文件。
3. 配置主数据库到副本数据库的连接。
2.启动副本数据库到 nomount下,目录数据库必须MOUNT (或OPEN)
$ sqlplus /nolog SQL> conn / as sysdba SQL> startup nomount
3.运行RMAN,分别连接主数据库与副本数据库实例
控制文件中保存有备份信息,可以不连接 Catalog
在副本数据库上:$ rman target sys/change_on_install@MING auxiliary /
4.运行复制命令
如果没有配置自动分配通道的话,需要手工指定至少 1 条辅助通道。
DUPLICATE命令将自动完成:将还原所有数据文件,重新创建控制文件,并利 用新的参数文件启动恢复数据库到一致状态,最后用 resetlog 方式打开数据库,并 重建 redolog
RMAN> RUN { ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;duplicate target database tocrmnofilenamecheck; RELEASE CHANNEL aux1;}
5.重建临时表空间,立即备份数据库
SQL> alter tablespace temp add tempfile '/u05/oracle/oradata/crm/temp01.dbf' size 10M;
附:Duplicate 复制命令的一些高级用法:
1.NOFILENAMECHECK异机恢复需要指定 NOFILENAMECHECK,可以跳过文件名检测,避免 oracle 错 误的领会你的操作意图。
2.指定PFILE如果辅助实例不是用 SPFILE启动,需要指定 PFILE 参数,PFILE文件必须放在运行 RMAN 的客户端上。
3.跳过不需要复制的表空间要跳过只读表空间,在执行 duplicate 命令时指定 SKIP READONLY 子句即可。
要跳过离线表空间,在执行 duplicate 命令之前将其置为 OFFLINE NORMAL 状态即可,RMAN 复制时会跳过只读或离线表空间的数据文件。
要跳过正常的表空间,指定 SKIP TABLESPACE ts_name, …
4.恢复到以前的时间点要恢复到以前的时间点,在 duplicate 命令中指定 UNTIL TIME 'SYSDATE-1' 5.创建过程中重命名控制文件可以使用 restore controlfile from …;或者 dbms_backup_restore 包恢复出控件文件,然后在初始化参数文件 PFILE 中进行正确的设置。
6.创建过程中重命名在线日志文件1.执行 duplicate 命名时指定 LOGFILE子句,手工设置 redo logs 文件名。 例:LOGFILE GROUP 1 ('?/oradata/newdb/redo01_1.log',
'?/oradata/newdb/redo01_2. log') SIZE 200K,)
2.副本数据库初始化参数文件 PFILE中设置 LOG_FILE_NAME_CONVERT LOG_FILE_NAME_CONVERT = 'string1' , 'string2' , 'string3' , 'string4' , ……;将 strin1 替换为 string2,string3 替换为 string4 7.创建过程中重命名数据文件,或改变数据库文件的新的路径1.在初始化参数中重命名:DB_FILE_NAME_CONVERT=‘xxxx’,‘yyyy’2.在 Duplicate Duplicate Duplicate 命令中重命名数据文件: duplicate target database to newdb DB_FILE_NAME_CONVERT=('xxxx', 'yyyyy ');3.使用 SET NEWNAME 命令重命名数据文件SET NEWNAME FOR DATAFILE 1 TO '/xxx/xxx.dbf';4.使用 CONFIGURE AUXNAME 命令重命名数据文件CONFIGURE AUXNAME FOR DATAFILE 1 TO '/xxxx/xxx.dbf';5.重命名临时文件路径SET NEWNAME FOR TEMPFILE '/xxx/xxx.dbf' TO '/yyy/xxx.dbf';
例:一个比较复杂的复制命令如下:
RMAN> RUN {
allocate auxiliary channel newdb1 device type sbt;
duplicate target database to newdb
DB_FILE_NAME_CONVERT=('/h1/oracle/dbs/trgt/','/h2/oracle/oradata/newdb/')
UNTIL TIME 'SYSDATE-1' # specifies incomplete recovery
SKIP TABLESPACE cmwlite, drsys, example # skip desired tablespaces
PFILE = ?/dbs/initNEWDB.ora
LOGFILE
GROUP 1 ('?/oradata/newdb/redo01_1.log',
'?/oradata/newdb/redo01_2. log') SIZE 200K,
GROUP 2 ('?/oradata/newdb/redo02_1. log'',
'?/oradata/newdb/redo02_2. log'') SIZE 200K
GROUP 3 ('?/oradata/newdb/redo03_1. log'',
'?/oradata/newdb/redo03_2. log'') SIZE 200K REUSE;
}