rman备份数据库后到另一台机器上恢复的过程
1.先查询并记录源数据库的dbid号和数据文件名
SQL> select dbid from v$database; DBID ---------- 2674069457 SQL> select file#,name from v$datafile 2 ; FILE# NAME ---------- -------------------------------------------------------------------------------- 1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\SYSTEM01.DBF 2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\UNDOTBS01.DBF 3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\SYSAUX01.DBF 4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\USERS01.DBF 5 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\EXAMPLE01.DBF 6 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\HYGEIA01.DBF 7 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\HYGEIA02.DBF 7 rows selected
2.在新机器上使用和源数据库版本相同的oracle安装软件创建一个和源数据库同名的实例使用dbca来创建(生成的数据文件删除掉)或 使用如下命令来创建
复制一个pfile文件,放到C:\oracle\product\10.2.0\db_1\database目录下,并启动数据库到nomount状态(需要设置内存参数, 否则无法unmount,会无法分内存,报ORA-04031错误)并修改initcc.ora文件的内容来达到你要的设置要求
C:\Documents and Settings\Administrator>e: C:\>cd E:\oracle\product\10.2.0\db_1\BIN C:\oracle\product\10.2.0\db_1\BIN>orapwd file=C:\oracle\product\10.2.0\db_1\data base\pwdCC.ora password=oracle entries=5; E:\oracle\product\10.2.0\db_1\BIN>oradim -new -sid CC -pfile C:\oracle\product\10.2.0\db_1\database\initcc.ora 执行处理已建立.
修改机器上的监听,以便能够对实例CC进行监听
原内容为:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:oracle92ora92) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = logicdg) (ORACLE_HOME = C:oracle92ora92) (SID_NAME = logicdg) ) )
更改以后的内容为:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:oracle92ora92) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = logicdg) (ORACLE_HOME = C:oracle92ora92) (SID_NAME = logicdg) ) (SID_DESC = (GLOBAL_DBNAME = CC (ORACLE_HOME = D:\ORADATA\OCP) (SID_NAME = CC ) ) C:\oracle\product\10.2.0\db_1\BIN>set ORACLE_SID=CC C:\oracle\product\10.2.0\db_1\BIN>sqlplus "/as sysdba"
联机至闲置的执行处理.
可以连接DB了
3.启动实例到nomount状态
SQL>startup pfile='C:\oracle\product\10.2.0\db_1\database\initcc.ora' nomount; ORACLE执行处理已启动. Total System Global Area 163577856 bytes Fixed Size 1247852 bytes Variable Size 104859028 bytes Database Buffers 50331648 bytes Redo Buffers 7139328 bytes
4.恢复控制文件
C:\Documents and Settings\Administrator>rman target/ 恢复管理器: Release 10.2.0.1.0 - Production on 星期六 3月 17 10:53:10 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接到目标数据库: ocp (未装载) RMAN> startup nomount 数据库已经启动 RMAN> restore controlfile from 'D:\t\O1_MF_NCSNF_TAG20120316T161306_7P5Y9JQG_.BK P'; 启动 restore 于 17-3月 -12 使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=156 devtype=DISK 通道 ORA_DISK_1: 正在复原控制文件 通道 ORA_DISK_1: 恢复完成, 用时: 00:00:04 输出文件名=D:\ORADATA\OCP\CONTROL01.CTL 输出文件名=D:\ORADATA\OCP\CONTROL02.CTL 输出文件名=D:\ORADATA\OCP\CONTROL03.CTL 完成 restore 于 17-3月 -12
5. 将新数据库的dbid设置成源数据库的dbid
RMAN> set dbid=2674069457; 正在执行命令: SET DBID
6.启动数据库到mount状态
RMAN> alter database mount; 数据库已装载 释放的通道: ORA_DISK_1
7.将备份集的信息加入到catalog,因为从远端数据库拷贝过来的备份集存放于目录D:\t而不是和源数据库备份集在相同的目录下
RMAN> catalog start with 'D:\t'; 启动 implicit crosscheck backup 于 17-3月 -12 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=155 devtype=DISK 已交叉检验的 1 对象 完成 implicit crosscheck backup 于 17-3月 -12 启动 implicit crosscheck copy 于 17-3月 -12 使用通道 ORA_DISK_1 完成 implicit crosscheck copy 于 17-3月 -12 搜索恢复区域中的所有文件 正在编制文件目录... 没有为文件编制目录 搜索与样式 D:\t 匹配的所有文件 数据库未知文件的列表 ===================================== 文件名: D:\t\O1_MF_NCSNF_TAG20120316T161306_7P5Y9JQG_.BKP 文件名: D:\t\O1_MF_NNNDF_TAG20120316T161306_7P5XJMHN_.BKP 是否确实要将上述文件列入目录 (输入 YES 或 NO)? yes 正在编制文件目录... 目录编制完毕 已列入目录的文件的列表 ======================= 文件名: D:\t\O1_MF_NCSNF_TAG20120316T161306_7P5Y9JQG_.BKP 文件名: D:\t\O1_MF_NNNDF_TAG20120316T161306_7P5XJMHN_.BKP
8.恢复数据文件,因为恢复的路径跟源库的数据文件路径不一致,需要用set newname转换路径.
RMAN> run{ 2> set newname for datafile 1 to 'D:\oradata\ocp\SYSTEM01.DBF'; 3> set newname for datafile 2 to 'D:\oradata\ocp\UNDOTBS01.DBF'; 4> set newname for datafile 3 to 'D:\oradata\ocp\SYSAUX01.DBF'; 5> set newname for datafile 4 to 'D:\oradata\ocp\USERS01.DBF'; 6> set newname for datafile 5 to 'D:\oradata\ocp\EXAMPLE01.DBF'; 7> set newname for datafile 6 to 'D:\oradata\ocp\HYGEIA01.DBF'; 8> set newname for datafile 7 to 'D:\oradata\ocp\HYGEIA02.DBF'; 9> restore database; 10> switch datafile all; 11> } 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 正在执行命令: SET NEWNAME 启动 restore 于 17-3月 -12 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在开始恢复数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件 正将数据文件00001恢复到D:\ORADATA\OCP\SYSTEM01.DBF 正将数据文件00002恢复到D:\ORADATA\OCP\UNDOTBS01.DBF 正将数据文件00003恢复到D:\ORADATA\OCP\SYSAUX01.DBF 正将数据文件00004恢复到D:\ORADATA\OCP\USERS01.DBF 正将数据文件00005恢复到D:\ORADATA\OCP\EXAMPLE01.DBF 正将数据文件00006恢复到D:\ORADATA\OCP\HYGEIA01.DBF 正将数据文件00007恢复到D:\ORADATA\OCP\HYGEIA02.DBF 通道 ORA_DISK_1: 正在读取备份段 D:\T\O1_MF_NNNDF_TAG20120316T161306_7P5XJMHN_.BK P 通道 ORA_DISK_1: 已恢复备份段 1 段句柄 = D:\T\O1_MF_NNNDF_TAG20120316T161306_7P5XJMHN_.BKP 标记 = TAG20120316T16 1306 通道 ORA_DISK_1: 恢复完成, 用时: 00:20:25 完成 restore 于 17-3月 -12 数据文件 1 已转换成数据文件副本 输入数据文件副本 recid=9 stamp=778160312 文件名=D:\ORADATA\OCP\SYSTEM01.DBF 数据文件 2 已转换成数据文件副本 输入数据文件副本 recid=10 stamp=778160312 文件名=D:\ORADATA\OCP\UNDOTBS01.DBF 数据文件 3 已转换成数据文件副本 输入数据文件副本 recid=11 stamp=778160312 文件名=D:\ORADATA\OCP\SYSAUX01.DBF 数据文件 4 已转换成数据文件副本 输入数据文件副本 recid=12 stamp=778160312 文件名=D:\ORADATA\OCP\USERS01.DBF 数据文件 5 已转换成数据文件副本 输入数据文件副本 recid=13 stamp=778160312 文件名=D:\ORADATA\OCP\EXAMPLE01.DBF 数据文件 6 已转换成数据文件副本 输入数据文件副本 recid=14 stamp=778160313 文件名=D:\ORADATA\OCP\HYGEIA01.DBF 数据文件 7 已转换成数据文件副本 输入数据文件副本 recid=15 stamp=778160313 文件名=D:\ORADATA\OCP\HYGEIA02.DBF
9.打开数据库
RMAN> alter database open resetlogs; RMAN> alter database open resetlogs; MAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: alter db 命令 (在 03/17/2012 11:41:10 上) 失败 ORA-00344: 无法重新创建联机日志 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\REDO01.LOG' ORA-27040: 文件创建错误, 无法创建文件 OSD-04002: 无法打开文件 O/S-Error: (OS 3) 系统找不到指定的路径。
这里报找不到redo日志文件的错误,因为数据库是非归档的,日志文件没有备份,在新库中也没有redo日志文件,这里需要重新创建日志
SQL> alter database drop logfile group 1; alter database drop logfile group 1 * 第 1 行出现错误: ORA-01623: 日志 1 是实例 ocp (线程 1) 的当前日志 - 无法删除 ORA-00312: 联机日志 1 线程 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\REDO01.LOG' SQL> alter database drop logfile group 2; 数据库已更改。 SQL> alter database add logfile group 2 'D:\oradata\ocp\redo02.log'; alter database add logfile group 2 'D:\oradata\ocp\redo02.log' * 第 1 行出现错误: ORA-00301: 添加日志文件 'D:\oradata\ocp\redo02.log' 时出错 - 无法创建文件 ORA-17610: 文件 'D:\oradata\ocp\redo02.log' 不存在, 大小也未指定 ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 2) 系统找不到指定的文件。 SQL> alter database add logfile group 2 'D:\oradata\ocp\redo02.log' size 50M; 数据库已更改。 SQL> alter database drop logfile group 3; 数据库已更改。 SQL> alter database add logfile group 3 'D:\oradata\ocp\redo03.log' size 50M; 数据库已更改。 SQL> alter system switch logfile; alter system switch logfile * 第 1 行出现错误: ORA-01109: 数据库未打开
下面试着修改日志文件的在控制文件中的路径(restore回来的控制文件中记录的日志文件路径是源端日志文件的路径)
由于redo01.log是当前重做日志组所要先复制一个重做日志文件命为’D:\oradata\ocp\redo01.log’再执行修改日志文件的路径
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\OCP\REDO01.LOG ' to 'D:\oradata\ocp\REDO01.log'; SQL> alter database open resetlogs; 数据库已更改。
10.处理临时表空间文件
先创建一个新临时表空间
sql>CREATE TEMPORARY TABLESPACE hygeiatemp Tempfile 'D:\oradata\ocp\hygeiatemp01.dbf' size 500M;
修改新建的临时表空间为缺省的临时表空间
sql> Alter Database Default Temporary Tablespace hygeiatemp;
再删除原来的临时表空间
sql> Drop Tablespace temp;
再新建原来的临时表空间
sql> CREATE TEMPORARY TABLESPACE temp Tempfile 'D:\oradata\ocp\temp01.dbf' size 500M;
再将新建的原来的临时表空间修改为缺省的临时表空间
sql> Alter Database Default Temporary Tablespace temp;
Hello to every one, as I am actually eager of reading
this blog’s post to be updated regularly. It contains good material.