从业的时间长了,俺感觉现在的技术圈子水也混啊,一个个在岸边上都是十八般武艺,下了水才知道他是不是真的会游。俺这一枪可能会打着不少人,不过对俺自己是个警示 : 基础一定要抓落,技术一定要过硬,不明确的 俺 一定要做测试 !

  本节演示通过rman创建备份机(由于俺只有一台机器,俺只能在这台机器上模拟,赶紧把你脑袋里那堆污七八糟的东西清除清除,一定要有一个清醒的大脑,要不你一定会看晕的。),参考网址如下:

  http://download-west.oracle.com/docs/cd/B19306_01/backup.102/b14191/rcmrecov002.htm#sthref727

  http://download-west.oracle.com/docs/cd/B19306_01/backup.102/b14192/recov003.htm#BRBSC50002

初始设定:

假设两台服务器a和b(虽然我这儿只有一台,您就把它假装是两台吧),服务器A中运行的库sid为mydb,现在将它复制一份到服务器b

准备工作:

1 、记录下源数据库的DBID,DBID的获取方式上节讲过的。

2 、将源数据库的初始化参数文件,拷贝到目标服务器上。

3 、确认备份(含控制文件,数据文件,归档文件)有效,并已拷贝至目标服务器(没归档应该也可以,只要能确认数据文件和控制文件是一致备份。)

步骤:

1. 首先创建源库的全库备份,(由于只有一台机器,所以备份完之后,通过dbca删除源库,正式情况下务必要等备份库完全建立并正常运行之后才能决定是否要删除源库啊)。 前面讲了太多的备份,这里就不列详细的操作步骤了。本例中我创建了一个新库,并在库中建了一个tmp表,插入了4条记录。

2. 在目标服务器配置oracle_sid。

    C:\Documents and Settings\Administrator>oradim -new -sid mydb

添加一个名为mydb的sid,由于是异机恢复,sid要与源库相同。

3. 连接到该sid

    C:\Documents and Settings\Administrator> set oracle_sid=mydb

    C:\Documents and Settings\Administrator>rman target /

    恢复管理器: 版本9.2.0.1.0 - Production

    Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

    已连接到目标数据库 (未启动)

    RMAN>  set dbid 2543439098;

    正在执行命令: SET DBID

    RMAN> startup nomount;

    启动失败: ORA-01078: failure in processing system parameters

    LRM-00109: N^7(4r?*2NJ}ND<~ ¨F:\ORAHOME1\DATABASE\INITMYDB.ORA¨

    正在尝试在没有参数文件的情况下启动 Oracle 例程...

    Oracle  例程已启动

    系统全局区域总计      97589952 字节

    Fixed Size                      453312  字节

    Variable Size                 46137344  字节

    Database Buffers              50331648  字节

    Redo Buffers                    667648  字节

4. 先恢复初始化参数文件

    RMAN>  restore spfile to pfile ¨F:\ORAHOME1\DATABASE\INITMYDB.ORA¨ from ¨d:\backup\mydb\C-2543439098-20070720-02¨;

    启动 restore 于 20-7月 -07

    正在使用目标数据库控制文件替代恢复目录

    分配的通道: ORA_DISK_1

    通道 ORA_DISK_1: sid=9 devtype=DISK

    通道 ORA_DISK_1: 已找到的自动备份: d:\backup\mydb\C-2543439098-20070720-02

    通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成

    完成 restore 于 20-7月 -07

然后使用刚刚创建的参数文件重新启动到未加载状态(注意,你最好打开该参数文件,看一下路径是否都确实存在,或者是否正确。)

    RMAN>  startup force nomount pfile=¨F:\ORAHOME1\DATABASE\INITMYDB.ORA¨;

    Oracle  例程已启动

    系统全局区域总计     135338868 字节

    Fixed Size                      453492  字节

    Variable Size                109051904  字节

    Database Buffers              25165824  字节

    Redo Buffers                    667648  字节

5. 恢复控制文件并进入到加载状态

    RMAN>  restore controlfile from ¨f:\backup\mydb\C-2543439098-20070720-01¨;

    启动 restore 于 20-7月 -07

    使用通道 ORA_DISK_1

    通道 ORA_DISK_1: 正在恢复控制文件

    通道 ORA_DISK_1: 恢复完成

    正在复制控制文件

    输出文件名=F:\ORAHOME1\ORADATA\MYDB\CONTROL01.CTL

    输出文件名=F:\ORAHOME1\ORADATA\MYDB\CONTROL02.CTL

    输出文件名=F:\ORAHOME1\ORADATA\MYDB\CONTROL03.CTL

    完成 restore 于 20-7月 -07

    RMAN>  alter database mount;

    RMAN-00571: ===========================================================

    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

    RMAN-00571: ===========================================================

    RMAN-03002: failure of alter db command at 07/20/2007 17:44:22

    ORA-01990:  打开口令文件¨F:\OraHome1\DATABASE\PWDmydb.ORA¨时出错

    ORA-27041:  无法打开文件

    OSD-04002:  无法打开文件

    O/S-Error: (OS 2)  系统找不到指定的文件。

奇怪,我这里报错了,但再次执行加载,发现提供已经是加载状态了,报错不奇怪,奇怪的是报错了还能进加载,呵呵,不就是缺少密码文件嘛,不管它,一会儿恢复完了再重建,继续进行。

    RMAN> alter database mount;

    RMAN-00571: ===========================================================

    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

    RMAN-00571: ===========================================================

    RMAN-03002: failure of alter db command at 07/20/2007 17:44:51

    ORA-01100:  数据库已安装

6. 修复数据库,我这里是源路径修复,如果你要恢复的文件地址与源库地址不同的话,需要通过SET NEWNAME FOR DATAFILE命令来为数据文件重新设定路径。

    RMAN>  restore database;

    启动 restore 于 20-7月 -07

    分配的通道: ORA_DISK_1

    通道 ORA_DISK_1: sid=11 devtype=DISK

    通道 ORA_DISK_1: 正在开始恢复数据文件备份集

    通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件

    正将数据文件00001恢复到F:\ORAHOME1\ORADATA\MYDB\SYSTEM01.DBF

    正将数据文件00002恢复到F:\ORAHOME1\ORADATA\MYDB\UNDOTBS01.DBF

    正将数据文件00003恢复到F:\ORAHOME1\ORADATA\MYDB\DRSYS01.DBF

    正将数据文件00004恢复到F:\ORAHOME1\ORADATA\MYDB\INDX01.DBF

    正将数据文件00005恢复到F:\ORAHOME1\ORADATA\MYDB\TOOLS01.DBF

    正将数据文件00006恢复到F:\ORAHOME1\ORADATA\MYDB\USERS01.DBF

    正将数据文件00007恢复到F:\ORAHOME1\ORADATA\MYDB\XDB01.DBF

    通道 ORA_DISK_1: 已恢复备份段 1

    段 handle=D:\BACKUP\MYDB\03INAL1I_1_1 tag=TAG20070720T162417 params=NULL

    通道 ORA_DISK_1: 恢复完成

    完成 restore 于 20-7月 -07

7. 恢复数据库

    RMAN>  recover database;

    启动 recover 于 20-7月 -07

    使用通道 ORA_DISK_1

    正在开始介质的恢复

    通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复

    通道 ORA_DISK_1: 正在恢复存档日志

    存档日志线程 =1 序列=10

    通道 ORA_DISK_1: 已恢复备份段 1

    段 handle=D:\BACKUP\MYDB\04INAL2V_1_1 tag=TAG20070720T162503 params=NULL

    通道 ORA_DISK_1: 恢复完成

    存档日志文件名 =F:\ORAHOME1\ORADATA\MYDB\ARCHIVE\1_10.DBF 线程 =1 序列 =10

    无法找到存档日志

    存档日志线程 =1 序列=11

    RMAN-00571: ===========================================================

    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

    RMAN-00571: ===========================================================

    RMAN-03002: failure of recover command at 07/20/2007 17:50:36

    RMAN-06054: media recovery requesting unknown log: thread 1 scn 143893

报错了,但是没关系,并非严重错误,只是提醒你恢复到一个未知的scn号。如果要避免这个错误,可以在alter database mount之后,通过set until scn或者set until time命令设置恢复到的scn号或时间。

8. 然后通过open resetlogs方式打开数据库

    RMAN>  alter database open resetlogs;

    数据库已打开

呵呵,成功打开,这是个好消息,我们需要连接到数据库来验证一下。

    C:\Documents and Settings\Administrator>sqlplus /nolog

    SQL*Plus: Release 9.2.0.1.0 - Production on  星期五 7月 20 17:55:24 2007

    Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

    SQL> conn system/manager

    已连接。

    SQL> select *from tmp;

    COL

    --------------------------------------------------

    11111

    22222

    33333

    44444

    SQL>

哈哈,成功啦。剩下的工作就简单了,你即可以通过dbca配置数据库,也可以通过orapwd命令重建密码文件等等,那就不在本节的讨论范围了。

呵呵,另外, 表忘了重建临时表空间,以及马上进行全备份。