现在的位置: 首页 > 综合 > 正文

Oracle 10g中使用RMAN进行备份恢复的几个实验手记

2013年09月21日 ⁄ 综合 ⁄ 共 12526字 ⁄ 字号 评论关闭

 

***********************************************************************************

实验一: 对于非归档模式的数据库处于OPEN状态使用RMAN备份,系统出错
 
         如果对于非归档模式的数据库处于MOUNT状态使用RMAN备份,系统会出错吗?不会,可以实施备份。
***********************************************************************************

SQL> archive log list;
数据库日志模式             非存档模式
自动存档             禁用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     216
当前日志序列           218
SQL>

RMAN> backup database;

启动 backup 于 11-5月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=144 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
ORA-19602: 无法按 NOARCHIVELOG 模式备份或复制活动文件通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 11-5月 -09
通道 ORA_DISK_1: 已完成段 1 于 11-5月 -09
段句柄=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KEYMEN\BACKUPSET\2009_05_11\O1_MF_NCSNF_TAG20090511T144853_50HLLSHN_
.BKP 标记=TAG20090511T144853 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:07
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================

***********************************************************************************

实验二:  有RMAN产生的全库备份,目标数据库部分数据文件丢失,包括SYSTEM和UNDO丢失的恢复
          其中还有一个USERS表空间的数据文件之前已经脱机。

***********************************************************************************

利用RMAN产生全库备份

RMAN> connect target /

连接到目标数据库: MYGOD (DBID=85383244)

RMAN> backup database;

启动 backup 于 11-5月 -09
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=134 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\SYSTEM01.DBF
输入数据文件 fno=00003 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\SYSAUX01.DBF
输入数据文件 fno=00005 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\EXAMPLE01.DBF
输入数据文件 fno=00002 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\UNDOTBS01.DBF
输入数据文件 fno=00004 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 11-5月 -09
通道 ORA_DISK_1: 已完成段 1 于 11-5月 -09
段句柄=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\BACKUPSET\2009_05_11\O1_MF_NNNDF_TAG20090511T151129_50HMX55V_.
BKP 标记=TAG20090511T151129 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:55
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 11-5月 -09
通道 ORA_DISK_1: 已完成段 1 于 11-5月 -09
段句柄=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\BACKUPSET\2009_05_11\O1_MF_NCSNF_TAG20090511T151129_50HMYWDP_.
BKP 标记=TAG20090511T151129 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 11-5月 -09

RMAN>

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

C:\>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 5月 11 15:18:01 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn / as sysdba
已连接。
SQL> select * from scott.dept;
select * from scott.dept
                    *
第 1 行出现错误:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\SYSTEM01.DBF'

SQL>

数据库需要恢复。

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

开始恢复:

在RMAN窗口中,编写恢复的脚本

RMAN> connect target /

已连接到目标数据库: MYGOD (DBID=85383244, 未打开)

RMAN> run{
2> restore database;
3> recover database;
4> sql 'alter database open';
5> }

启动 restore 于 11-5月 -09
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK

数据文件4未被处理, 因为文件已脱机
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\SYSTEM01.DBF
正将数据文件00002恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\UNDOTBS01.DBF
正将数据文件00003恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\SYSAUX01.DBF
正将数据文件00005恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\EXAMPLE01.DBF
通道 ORA_DISK_1: 正在读取备份段 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\BACKUPSET\2009_05_11\O1_MF_NNNDF_TAG2
0090511T151129_50HMX55V_.BKP
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\BACKUPSET\2009_05_11\O1_MF_NNNDF_TAG20090511T151129_50HMX55V
_.BKP 标记 = TAG20090511T151129
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:55
完成 restore 于 11-5月 -09

启动 recover 于 11-5月 -09
使用通道 ORA_DISK_1
数据文件4未被处理, 因为文件已脱机

正在开始介质的恢复
介质恢复完成, 用时: 00:00:04

完成 recover 于 11-5月 -09

sql 语句: alter database open

RMAN>

恢复完成以后,在SQLPlus窗口中发现,数据已经打开

SQL> select open_mode from v$database;

OPEN_MODE
----------
READ WRITE

SQL>

但是发现USERS表空间还是没有被恢复

SQL> select * from scott.dept;
select * from scott.dept
                    *
第 1 行出现错误:
ORA-00376: 此时无法读取文件 4
ORA-01110: 数据文件 4: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\USERS01.DBF'

SQL>

需要针对于单个表空间进行恢复

RMAN> run{
2> restore tablespace users;
3> recover tablespace users;
4> }

启动 restore 于 11-5月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=130 devtype=DISK

通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00004恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\USERS01.DBF
通道 ORA_DISK_1: 正在读取备份段 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\BACKUPSET\2009_05_11\O1_MF_NNNDF_TAG2
0090511T151129_50HMX55V_.BKP
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\BACKUPSET\2009_05_11\O1_MF_NNNDF_TAG20090511T151129_50HMX55V
_.BKP 标记 = TAG20090511T151129
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:04
完成 restore 于 11-5月 -09

启动 recover 于 11-5月 -09
使用通道 ORA_DISK_1

正在开始介质的恢复
介质恢复完成, 用时: 00:00:01

完成 recover 于 11-5月 -09

SQL> alter tablespace users online;

表空间已更改。

SQL> select * from scott.dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL>

***********************************************************************************

实验三:  有RMAN产生的全库备份,目标数据库部分数据文件丢失。
           在数据库打开的时候,模拟USERS表空间损坏或者丢失,恢复也是在数据库打开时进行。
         

***********************************************************************************

在数据库打开时,让USERS表空间脱机,然后通过OS命令删除其对应的数据文件。模拟故障!

SQL> alter tablespace users offline immediate;

表空间已更改。

SQL> select count(*) from scott.myemp;
select count(*) from scott.myemp
                           *
第 1 行出现错误:
ORA-00376: 此时无法读取文件 4
ORA-01110: 数据文件 4: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\USERS01.DBF'

SQL>

SQL> alter tablespace users online;
alter tablespace users online
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 4: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\USERS01.DBF'

SQL>

需要进行数据库的恢复!

------------------------------使用RMAN开始进行单个表空间的恢复。
C:\Documents and Settings\Administrator>rman

恢复管理器: Release 10.2.0.1.0 - Production on 星期一 5月 11 16:42:27 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

RMAN> connect target sys/sysadmin@mygod;

连接到目标数据库: MYGOD (DBID=85383244)

RMAN> run{
2> restore tablespace users;
3> recover tablespace users;
4> }

启动 restore 于 11-5月 -09
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=147 devtype=DISK

通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00004恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\USERS01.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORABAK\20090511_8_1_08KEP62Q.RMN
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORABAK\20090511_8_1_08KEP62Q.RMN 标记 = TAG20090511T163538
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:04
完成 restore 于 11-5月 -09

启动 recover 于 11-5月 -09
使用通道 ORA_DISK_1

正在开始介质的恢复
介质恢复完成, 用时: 00:00:03

完成 recover 于 11-5月 -09

RMAN>

恢复完成,在SQL Plus窗口中,执行表空间联机操作

 

SQL> alter tablespace users online;

表空间已更改。

SQL> select count(*) from scott.myemp;

  COUNT(*)
----------
     18432

SQL>

***********************************************************************************

实验四:  没有数据库的备份,如何恢复?此时受损的不能是SYSTEM或者UNDO文件
         

***********************************************************************************

在没有备份的情况下,恢复一个数据文件,此时受损的不能是SYSTEM或者UNDO文件
create tablespace testtbs datafile 'c:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\testtbs.DBF' size 10M;
alter system switch logfile;
create table scott.com4 (n1 number) tablespace testtbs;
alter system switch logfile;
insert into scott.com4 values(1);
commit;
alter system switch logfile;

SQL> create tablespace testtbs datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\testtbs.DBF' size 10M;

表空间已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> create table scott.com4 (n1 number) tablespace testtbs;

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into scott.com4 values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL>

破坏 testtbs.dbf
我采用的方法:将数据文件指向另外一个目录
alter tablespace testtbs offline immediate;
alter database create datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\testtbs.DBF'

as 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\testtbs1.DBF';

SQL> select * from scott.com4;
select * from scott.com4
                    *
第 1 行出现错误:
ORA-00376: 此时无法读取文件 6
ORA-01110: 数据文件 6: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\TESTTBS1.DBF'

SQL>

需要使用RMAN恢复数据库:
连接到RMAN,运行:

 

run{
 set newname for datafile 6  to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\testtbs1.DBF';
}

recover tablespace testtbs;

RMAN> run{
2>      set newname for datafile 6  to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\testtbs1.DBF';
3> }

正在执行命令: SET NEWNAME

RMAN> recover tablespace testtbs;

启动 recover 于 11-5月 -09
使用通道 ORA_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 6 已作为文件 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\ARCHIVELOG\2009_05_11\O1_MF_1_6_50HS
GHMK_.ARC 存在于磁盘上
存档日志线程 1 序列 7 已作为文件 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\ARCHIVELOG\2009_05_11\O1_MF_1_7_50HS
GTCQ_.ARC 存在于磁盘上
存档日志线程 1 序列 8 已作为文件 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\ARCHIVELOG\2009_05_11\O1_MF_1_8_50HS
HBWS_.ARC 存在于磁盘上
存档日志文件名 =C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\ARCHIVELOG\2009_05_11\O1_MF_1_6_50HSGHMK_.ARC 线程 =1
 序列 =6
介质恢复完成, 用时: 00:00:02
完成 recover 于 11-5月 -09

RMAN>

在RMAN恢复过程中存在一个介质恢复的过程。

在SQLPLus窗口中,让USERS表空间联机,然后查询,确认数据已经恢复了。

alter tablespace testtbs online;
select * from scott.com4;

 

不完全恢复的三个实验
***************************************************************************************************************
不完全恢复实验一:
***************************************************************************************************************
注意:在开始实验之前,需要首先对数据进行备份处理。

设置环境:
alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';

SQL> alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';

会话已更改。

 

 

SQL> select sysdate from dual;

SYSDATE
-------------------
2009-05-11:17:06:43

SQL>  drop table scott.myemp;

表已删除。

SQL>

SQL> create table scott.com4(id number);

表已创建。

SQL> insert into scott.com4 values(1000);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

需要将删除的数据表找回来,将数据库恢复到2009-05-11:17:06:43时间点。需要执行基于时间点的不完全恢复。

SQL> shutdown immediate;
SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             188746628 bytes
Database Buffers          415236096 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
SQL>

在RMAN中
run{
                 set until time="to_date('2009-05-11:17:06:43','yyyy-mm-dd:hh24:mi:ss')";
                 restore database;
                 recover database;
}

C:\Documents and Settings\Administrator>rman

恢复管理器: Release 10.2.0.1.0 - Production on 星期一 5月 11 17:16:39 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

RMAN> connect target sys/sysadmin@mygod;

已连接到目标数据库: MYGOD (DBID=85383244, 未打开)

RMAN> run{
2>                  set until time="to_date('2009-05-11:17:06:43','yyyy-mm-dd:hh24:mi:ss')";
3>                  restore database;
4>                  recover database;
5> }

正在执行命令: SET until clause
使用目标数据库控制文件替代恢复目录

启动 restore 于 11-5月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK

通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\SYSTEM01.DBF
正将数据文件00002恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\UNDOTBS01.DBF
正将数据文件00003恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\SYSAUX01.DBF
正将数据文件00004恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\USERS01.DBF
正将数据文件00005恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\EXAMPLE01.DBF
正将数据文件00006恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\TESTTBS1.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORABAK\20090511_17_1_0HKEP7NS.RMN
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORABAK\20090511_17_1_0HKEP7NS.RMN 标记 = TAG20090511T170355
通道 ORA_DISK_1: 恢复完成, 用时: 00:01:16
完成 restore 于 11-5月 -09

启动 recover 于 11-5月 -09
使用通道 ORA_DISK_1

正在开始介质的恢复
介质恢复完成, 用时: 00:00:02

完成 recover 于 11-5月 -09

RMAN>

恢复完成以后在SQLPLus窗口中:

SQL> alter database open resetlogs;

数据库已更改。

 

SQL> select count(*) from scott.myemp;

  COUNT(*)
----------
     18432

SQL> select * from scott.com4;
select * from scott.com4
                    *
第 1 行出现错误:
ORA-00942: 表或视图不存在

SQL>

数据库已经进行了基于时间点的恢复。。

附加信息:数据库的备份方法

RMAN> backup database format='e:\orabak\20090511_%s_%p_%u.rmn';

启动 backup 于 11-5月 -09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\SYSTEM01.DBF
输入数据文件 fno=00003 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\SYSAUX01.DBF
输入数据文件 fno=00005 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\EXAMPLE01.DBF
输入数据文件 fno=00002 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\UNDOTBS01.DBF
输入数据文件 fno=00006 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\TESTTBS1.DBF
输入数据文件 fno=00004 name=C:\ORACLE\PRODUCT\10.2.0\ORADATA\MYGOD\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 11-5月 -09
通道 ORA_DISK_1: 已完成段 1 于 11-5月 -09
段句柄=E:\ORABAK\20090511_17_1_0HKEP7NS.RMN 标记=TAG20090511T170355 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:05
完成 backup 于 11-5月 -09

启动 Control File and SPFILE Autobackup 于 11-5月 -09
段 handle=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\MYGOD\AUTOBACKUP\2009_05_11\O1_MF_S_686595902_50HTKZNJ_.BKP comme
nt=NONE
完成 Control File and SPFILE Autobackup 于 11-5月 -09

抱歉!评论已关闭.