rman备份数据库后到另一台机器上恢复的例子

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;

One thought on “rman备份数据库后到另一台机器上恢复的例子

发表评论

电子邮件地址不会被公开。