Oracle RMAN实践篇1

概述

本文主要介绍RMAN的一些实战操作。

准备工作

1、数据库运行在归档方式下;

2、备份整个数据库;

3、rman备份整个数据库与归档日志。

rman备份脚本如下(运行日志):

shell

RMAN> #script:fullbakup.rcv
2> # creater:wangyunzeng
3> # date:3.1.2011
4> # desc:backup all database datafile in archive with rman
5> # connect database
6> #rman target/;
7> #connect catalog rman/rman@inomc;
8> connect catalog *
9> connect target *
10> 
11> #start backup
12> run
13> {
14>   allocate channel c1 type disk;
15>   backup tag 'dbfull' format 'fullbak_%u_%s_%p' database
16>   archivelog all;
17>   sql 'alter system archive log current';
18>   release channel c1;
19> }

归档模式下丢失或损坏一个数据文件

OS备份方案

在归档方式下,丢失或损坏一个数据文件,如果有响应的物理文件的备用以及该备份以来的归档日志,恢复数据库是比较容易的,而且可以减少宕机时间。

步骤一 创建测试表

shell

oracle@mmsc103:~> sqlplus mmsg/mmsg@mmsgdb

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 3月 7 10:30:57 2011

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


连接到: 
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table sybex(id int);    

表已创建。


SQL> insert into  sybex values(0);

已创建 1 行。

SQL> insert into  sybex values(1);

已创建 1 行。

SQL> insert into  sybex values(2);

已创建 1 行。

SQL> insert into  sybex values(3);

已创建 1 行。

SQL> insert into  sybex values(4);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from sybex;

        ID
----------
         0
         1
         2
         3
         4

SQL>

步骤二 关闭数据库,模拟数据文件损坏或丢失

shell

oracle@mmsc103:~> sqlplus / as sysdba

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 3月 7 10:44:24 2011

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


连接到: 
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> alter database datafile 5 online;

数据库已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> 
删除数据文件
oracle@mmsc103:~> cd oradata/mmsgdb/
oracle@mmsc103:~/oradata/mmsgdb> rm -rf mmsgdata01 
oracle@mmsc103:~/oradata/mmsgdb> 

步骤三 启动数据库,并脱机数据文件

shell

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 8417955840 bytes
Fixed Size                  2146024 bytes
Variable Size            4429185304 bytes
Database Buffers         3959422976 bytes
Redo Buffers               27201536 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 5: '/opt/oracle/oradata/mmsgdb/mmsgdata01'


SQL> alter database datafile 5 offline drop;

数据库已更改。

SQL> alter database open;

数据库已更改。

步骤四 拷贝文件,恢复并联机该数据文件

拷贝过程省略。

shell

SQL> recover datafile 5
ORA-00279: 更改 427060 (在 03/05/2011 09:46:20 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_05/o1_mf_1_29_6q3jw83d
_.arc
ORA-00280: 更改 427060 (用于线程 1) 在序列 #29 中


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 433844 (在 03/05/2011 13:00:55 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_05/o1_mf_1_30_6q477cfq
_.arc
ORA-00280: 更改 433844 (用于线程 1) 在序列 #30 中


ORA-00279: 更改 462078 (在 03/05/2011 19:22:19 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_31_6q4w04c0
_.arc
ORA-00280: 更改 462078 (用于线程 1) 在序列 #31 中


ORA-00279: 更改 489270 (在 03/06/2011 01:16:52 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_32_6q5dmrx0
_.arc
ORA-00280: 更改 489270 (用于线程 1) 在序列 #32 中


ORA-00279: 更改 519023 (在 03/06/2011 06:00:24 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_33_6q5rg0mj
_.arc
ORA-00280: 更改 519023 (用于线程 1) 在序列 #33 中


ORA-00279: 更改 537366 (在 03/06/2011 09:22:08 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_34_6q5yl1sz
_.arc
ORA-00280: 更改 537366 (用于线程 1) 在序列 #34 中


ORA-00279: 更改 549703 (在 03/06/2011 11:06:41 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_35_6q6d89j5
_.arc
ORA-00280: 更改 549703 (用于线程 1) 在序列 #35 中


ORA-00279: 更改 567132 (在 03/06/2011 15:00:25 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_36_6q6t01c4
_.arc
ORA-00280: 更改 567132 (用于线程 1) 在序列 #36 中


ORA-00279: 更改 584372 (在 03/06/2011 18:54:57 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_37_6q77sdpv
_.arc
ORA-00280: 更改 584372 (用于线程 1) 在序列 #37 中


ORA-00279: 更改 601986 (在 03/06/2011 22:50:20 生成) 对于线程 1 是必需的
ORA-00289: 建议:
/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_07/o1_mf_1_38_6q7sz1gn
_.arc
ORA-00280: 更改 601986 (用于线程 1) 在序列 #38 中


已应用的日志。
完成介质恢复。
SQL> alter database datafile 5 online;

数据库已更改。

SQL>

步骤五 查询数据,检查恢复效果

shell

oracle@mmsc103:~> sqlplus mmsg/mmsg@mmsgdb

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 3月 7 11:04:52 2011

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


连接到: 
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from sybex;

        ID
----------
         0
         1
         2
         3
         4

SQL>

说明:

  • 1、采用热备份,需要运行在归档模式下,可以实现数据库的完全恢复,也就是说,从备份后到数据库崩溃时的数据都不会丢失。

  • 2、可以采用全备份数据库的方式备份,对于特殊情况,也可以只备份特定的数据文件,如只备份用户表空间(一般情况下对于某些写特别频繁的数据文件,可以单独加大备份频率)

  • 3、如果在恢复过程中,发现损坏的是多个数据文件,即可以采用一个一个数据文件的恢复方法(第5步中需要对数据文件一一脱机,第6步中需要对数据文件分别恢复),也可以采用整个数据库的恢复方法。

  • 4、如果是系统表空间的损坏,不能采用此方法

RMAN备份方案

步骤一 表中插入记录

shell

oracle@mmsc103:~> sqlplus mmsg/mmsg@mmsgdb

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 3月 7 11:51:31 2011

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


连接到: 
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> insert into sybex values(5);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from sybex;

        ID
----------
         5
         0
         1
         2
         3
         4

已选择6行。   #备份前表中有6条记录

步骤二 备份表空间

shell

RMAN> backup tablespace MMSG;

启动 backup 于 07-3月 -11
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=289 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00005 名称=/opt/oracle/oradata/mmsgdb/mmsgdata01
通道 ORA_DISK_1: 正在启动段 1 于 07-3月 -11
通道 ORA_DISK_1: 已完成段 1 于 07-3月 -11
段句柄=/opt/oracle/flash_recovery_area/MMSGDB/backupset/2011_03_07/o1_mf_nnndf_TAG20110307T115233_6q8on44m_.bkp 标记=TAG20110307T115233 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 07-3月 -11

启动 Control File and SPFILE Autobackup 于 07-3月 -11
段 handle=/opt/oracle/flash_recovery_area/MMSGDB/autobackup/2011_03_07/o1_mf_s_745156357_6q8on8c8_.bkp comment=NONE
完成 Control File and SPFILE Autobackup 于 07-3月 -11

RMAN>

步骤三 再次向表中插入记录

shell

SQL> insert into sybex values(6);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from sybex;

        ID
----------
         5
         6
         0
         1
         2
         3
         4

已选择7行。     #备份后,表中记录为7条,比备份前增加了一条

SQL>

步骤四 切换relog日志记录

shell

SQL> alter system switch logfile;

系统已更改。

SQL> /

系统已更改。

步骤五 关闭数据库,模拟数据文件丢失

shell

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host   
oracle@mmsc103:~> cd oradata/mmsgdb/
oracle@mmsc103:~/oradata/mmsgdb> rm -rf mmsgdata01 
oracle@mmsc103:~/oradata/mmsgdb> exit
exit

步骤六 启动数据库,并脱机数据文件

shell

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 8417955840 bytes
Fixed Size                  2146024 bytes
Variable Size            4429185304 bytes
Database Buffers         3959422976 bytes
Redo Buffers               27201536 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 5: '/opt/oracle/oradata/mmsgdb/mmsgdata01'


SQL> alter database datafile 5 offline;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL>

步骤七 恢复表空间

恢复脚本可以是恢复单个数据文件

shell

RMAN> run
2> {
3> allocate channel c1 type disk;
4> restore datafile 5;
5> recover datafile 5;
6> sql 'alter database datafile 5 online';
7> release channel c1;
8> }

也可以是表空间

shell

RMAN> run
2> {
3> allocate channel c1 type disk;
4> restoretablespace MMSG;
5> recover tablespace MMSG;
6> sql 'alter database datafile 5 online';
7> release channel c1;
8> }

过程如下:

shell

使用目标数据库控制文件替代恢复目录
分配的通道: c1
通道 c1: SID=293 设备类型=DISK

启动 restore 于 07-3月 -11

通道 c1: 正在开始还原数据文件备份集
通道 c1: 正在指定从备份集还原的数据文件
通道 c1: 将数据文件 00005 还原到 /opt/oracle/oradata/mmsgdb/mmsgdata01
通道 c1: 正在读取备份片段 /opt/oracle/flash_recovery_area/MMSGDB/backupset/2011_03_07/o1_mf_nnndf_TAG20110307T115233_6q8on44m_.bkp
通道 c1: 段句柄 = /opt/oracle/flash_recovery_area/MMSGDB/backupset/2011_03_07/o1_mf_nnndf_TAG20110307T115233_6q8on44m_.bkp 标记 = TAG20110307T115233
通道 c1: 已还原备份片段 1
通道 c1: 还原完成, 用时: 00:00:15
完成 restore 于 07-3月 -11

启动 recover 于 07-3月 -11

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

完成 recover 于 07-3月 -11

sql 语句: alter database datafile 5 online

释放的通道: c1

RMAN>

步骤八 检查恢复效果

shell

SQL> select * from sybex;

        ID
----------
         5
         6
         0
         1
         2
         3
         4

已选择7行。   #恢复后,数据是7条,没有丢失

说明:

  • 1、RMAN也可以实现单个表空间或数据文件的恢复,恢复过程可以在mount下或open方式下,如果在open方式下恢复,可以减少down机时间

  • 2、如果损坏的是一个数据文件,建议offline并在open方式下恢复

  • 3、这里可以看到,RMAN进行数据文件与表空间恢复的时候,代码都比较简单,而且能保证备份与恢复的可靠性,所以建议采用RMAN的备份与恢复

丢失多个数据文件的数据库恢复

OS备份方案

步骤一 表中插入记录

shell

SQL> insert into sybex values(7);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from sybex;

        ID
----------
         7
         5
         6
         0
         1
         2
         3
         4

已选择8行。        #故障前有8条记录

步骤二 关闭数据库,删除除临时文件外的所有数据文件

shell

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host
oracle@mmsc103:~> cd oradata/mmsgdb/
oracle@mmsc103:~/oradata/mmsgdb> l
total 2255540
drwxr-x--- 2 oracle oinstall       4096 2011-03-07 11:59 ./
drwxr-x--- 3 oracle oinstall       4096 2011-03-03 18:20 ../
-rw-r----- 1 oracle oinstall    9912320 2011-03-07 12:38 control01.ctl
-rw-r----- 1 oracle oinstall    9912320 2011-03-07 12:38 control02.ctl
-rw-r----- 1 oracle oinstall    9912320 2011-03-07 12:38 control03.ctl
-rw-r----- 1 oracle oinstall 1048584192 2011-03-07 12:38 mmsgdata01
-rw-r----- 1 oracle oinstall  524296192 2011-03-05 11:47 mmsgdata02
-rw-r----- 1 oracle oinstall   52429312 2011-03-07 12:38 redo01.log
-rw-r----- 1 oracle oinstall   52429312 2011-03-07 11:57 redo02.log
-rw-r----- 1 oracle oinstall   52429312 2011-03-07 11:57 redo03.log
-rw-r----- 1 oracle oinstall  209723392 2011-03-07 12:38 rman_data.dbf
-rw-r----- 1 oracle oinstall   20979712 2011-03-05 11:47 rman_tmp.dbf
-rw-r----- 1 oracle oinstall  287186944 2011-03-07 12:38 sysaux01.dbf
-rw-r----- 1 oracle oinstall  356524032 2011-03-07 12:38 system01.dbf
-rw-r----- 1 oracle oinstall   20979712 2011-03-07 10:45 temp01.dbf
-rw-r----- 1 oracle oinstall  209723392 2011-03-07 12:38 undotbs01.dbf
-rw-r----- 1 oracle oinstall    5251072 2011-03-07 12:38 users01.dbf
oracle@mmsc103:~/oradata/mmsgdb> rm -rf mmsgdata01  sysaux01.dbf  system01.dbf  users01.dbf  undotbs01.dbf 
oracle@mmsc103:~/oradata/mmsgdb> exit
exit

步骤三 启动数据库,并查看告警日志

shell

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 8417955840 bytes
Fixed Size                  2146024 bytes
Variable Size            4429185304 bytes
Database Buffers         3959422976 bytes
Redo Buffers               27201536 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1: '/opt/oracle/oradata/mmsgdb/system01.dbf'


SQL>

查看告警日志

shell

<msg time='2011-03-07T12:41:50.153+08:00' org_id='oracle' comp_id='rdbms'
 client_id='' type='UNKNOWN' level='16'
 module='' pid='22906'>
 <txt>Errors in file /opt/oracle/diag/rdbms/mmsgdb/mmsgdb/trace/mmsgdb_dbw0_22906.trc:
ORA-01157: ????/?????? 1 - ??? DBWR ????
ORA-01110: ???? 1: &apos;/opt/oracle/oradata/mmsgdb/system01.dbf&apos;
ORA-27037: ????????
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
 </txt>
</msg>
<msg time='2011-03-07T12:41:50.154+08:00' org_id='oracle' comp_id='rdbms'
 client_id='' type='UNKNOWN' level='16'
 module='' pid='22906'>
 <txt>Errors in file /opt/oracle/diag/rdbms/mmsgdb/mmsgdb/trace/mmsgdb_dbw0_22906.trc:
ORA-01157: ????/?????? 2 - ??? DBWR ????
ORA-01110: ???? 2: &apos;/opt/oracle/oradata/mmsgdb/sysaux01.dbf&apos;
ORA-27037: ????????
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
 </txt>
</msg>
<msg time='2011-03-07T12:41:50.154+08:00' org_id='oracle' comp_id='rdbms'
 client_id='' type='UNKNOWN' level='16'
 module='' pid='22906'>
 <txt>Errors in file /opt/oracle/diag/rdbms/mmsgdb/mmsgdb/trace/mmsgdb_dbw0_22906.trc:
ORA-01157: ????/?????? 3 - ??? DBWR ????
ORA-01110: ???? 3: &apos;/opt/oracle/oradata/mmsgdb/undotbs01.dbf&apos;
ORA-27037: ????????
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
 </txt>
</msg>
<msg time='2011-03-07T12:41:50.154+08:00' org_id='oracle' comp_id='rdbms'
 client_id='' type='UNKNOWN' level='16'
 module='' pid='22906'>
 <txt>Errors in file /opt/oracle/diag/rdbms/mmsgdb/mmsgdb/trace/mmsgdb_dbw0_22906.trc:
ORA-01157: ????/?????? 4 - ??? DBWR ????
ORA-01110: ???? 4: &apos;/opt/oracle/oradata/mmsgdb/users01.dbf&apos;
ORA-27037: ????????
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
 </txt>
</msg>
<msg time='2011-03-07T12:41:50.154+08:00' org_id='oracle' comp_id='rdbms'
 client_id='' type='UNKNOWN' level='16'
 module='' pid='22906'>
 <txt>Errors in file /opt/oracle/diag/rdbms/mmsgdb/mmsgdb/trace/mmsgdb_dbw0_22906.trc:
ORA-01157: ????/?????? 5 - ??? DBWR ????
ORA-01110: ???? 5: &apos;/opt/oracle/oradata/mmsgdb/mmsgdata01&apos;
ORA-27037: ????????
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
 </txt>
</msg>
<msg time='2011-03-07T12:41:50.156+08:00' org_id='oracle' comp_id='rdbms'
 msg_id='opiexe:2986:2780954927' client_id='' type='NOTIFICATION'
 group='admin_ddl' level='16' module='sqlplus@mmsc103 (TNS V1-V3)'
 pid='23023'>
 <txt>ORA-1157 signalled during: ALTER DATABASE OPEN...
 </txt>
</msg>

通过查询视图v$recover_file可以发现

shell

SQL> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- --------------
         1 ONLINE  ONLINE  FILE NOT FOUND                                                             0
         2 ONLINE  ONLINE  FILE NOT FOUND                                                             0
         3 ONLINE  ONLINE  FILE NOT FOUND                                                             0
         4 ONLINE  ONLINE  FILE NOT FOUND                                                             0
         5 ONLINE  ONLINE  FILE NOT FOUND                                                             0

SQL>

有5个数据文件需要恢复,整改是我删除的那5个数据文件。

步骤四 拷贝数据文件到目录,着手恢复

shell

oracle@mmsc103:~> cd bak_oradata/mmsgdb/
oracle@mmsc103:~/bak_oradata/mmsgdb> l
total 2206832
drwxr-x--- 2 oracle oinstall       4096 2011-03-05 09:48 ./
drwxr-x--- 3 oracle oinstall       4096 2011-03-05 09:48 ../
-rw-r----- 1 oracle oinstall    9748480 2011-03-05 09:48 control01.ctl
-rw-r----- 1 oracle oinstall    9748480 2011-03-05 09:48 control02.ctl
-rw-r----- 1 oracle oinstall    9748480 2011-03-05 09:48 control03.ctl
-rw-r----- 1 oracle oinstall 1048584192 2011-03-05 09:48 mmsgdata01
-rw-r----- 1 oracle oinstall  524296192 2011-03-05 09:48 mmsgdata02
-rw-r----- 1 oracle oinstall   52429312 2011-03-05 09:48 redo01.log
-rw-r----- 1 oracle oinstall   52429312 2011-03-05 09:48 redo02.log
-rw-r----- 1 oracle oinstall   52429312 2011-03-05 09:48 redo03.log
-rw-r----- 1 oracle oinstall  209723392 2011-03-05 09:48 rman_data.dbf
-rw-r----- 1 oracle oinstall   20979712 2011-03-05 09:48 rman_tmp.dbf
-rw-r----- 1 oracle oinstall  249438208 2011-03-05 09:48 sysaux01.dbf
-rw-r----- 1 oracle oinstall  346038272 2011-03-05 09:48 system01.dbf
-rw-r----- 1 oracle oinstall   20979712 2011-03-05 09:48 temp01.dbf
-rw-r----- 1 oracle oinstall  209723392 2011-03-05 09:48 undotbs01.dbf
-rw-r----- 1 oracle oinstall    5251072 2011-03-05 09:48 users01.dbf
oracle@mmsc103:~/bak_oradata/mmsgdb> cp mmsgdata01  sysaux01.dbf  system01.dbf  users01.dbf  undotbs01.dbf  ../../oradata/mmsgdb/
oracle@mmsc103:~/bak_oradata/mmsgdb>

恢复过程如下:

shell

SQL> recover database;
ORA-00279: 更改 427060 (在 03/05/2011 09:46:20 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_05/o1_mf_1_29_6q3jw83d_.arc
ORA-00280: 更改 427060 (用于线程 1) 在序列 #29 中


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 433844 (在 03/05/2011 13:00:55 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_05/o1_mf_1_30_6q477cfq_.arc
ORA-00280: 更改 433844 (用于线程 1) 在序列 #30 中


ORA-00279: 更改 462078 (在 03/05/2011 19:22:19 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_31_6q4w04c0_.arc
ORA-00280: 更改 462078 (用于线程 1) 在序列 #31 中


ORA-00279: 更改 489270 (在 03/06/2011 01:16:52 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_32_6q5dmrx0_.arc
ORA-00280: 更改 489270 (用于线程 1) 在序列 #32 中


ORA-00279: 更改 519023 (在 03/06/2011 06:00:24 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_33_6q5rg0mj_.arc
ORA-00280: 更改 519023 (用于线程 1) 在序列 #33 中


ORA-00279: 更改 537366 (在 03/06/2011 09:22:08 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_34_6q5yl1sz_.arc
ORA-00280: 更改 537366 (用于线程 1) 在序列 #34 中


ORA-00279: 更改 549703 (在 03/06/2011 11:06:41 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_35_6q6d89j5_.arc
ORA-00280: 更改 549703 (用于线程 1) 在序列 #35 中


ORA-00279: 更改 567132 (在 03/06/2011 15:00:25 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_36_6q6t01c4_.arc
ORA-00280: 更改 567132 (用于线程 1) 在序列 #36 中


ORA-00279: 更改 584372 (在 03/06/2011 18:54:57 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_06/o1_mf_1_37_6q77sdpv_.arc
ORA-00280: 更改 584372 (用于线程 1) 在序列 #37 中


ORA-00279: 更改 601986 (在 03/06/2011 22:50:20 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_07/o1_mf_1_38_6q7sz1gn_.arc
ORA-00280: 更改 601986 (用于线程 1) 在序列 #38 中


ORA-00279: 更改 624387 (在 03/07/2011 04:00:33 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_07/o1_mf_1_39_6q8k2j5f_.arc
ORA-00280: 更改 624387 (用于线程 1) 在序列 #39 中


ORA-00279: 更改 642232 (在 03/07/2011 10:34:56 生成) 对于线程 1 是必需的
ORA-00289: 建议: /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_07/o1_mf_1_40_6q8kl8sg_.arc
ORA-00280: 更改 642232 (用于线程 1) 在序列 #40 中


已应用的日志。
完成介质恢复。
SQL> alter database open;

数据库已更改。

SQL>

步骤五 检查数据完整性

shell

oracle@mmsc103:~> sqlplus mmsg/mmsg@mmsgdb

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 3月 7 12:48:35 2011

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


连接到: 
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from sybex;

        ID
----------
         7
         5
         6
         0
         1
         2
         3
         4

已选择8行。   #数据还是8条,未丢失.

SQL>

说明:

  • 1、只要有备份与归档存在,就可以实现数据库的完全恢复(不丢失数据)

  • 2、适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复

  • 3、恢复过程在mount下进行,如果恢复成功,再打开数据库,down机时间可能比较长一些。

RMAN备份方案

rman备份归档模式下数据库,损坏或丢失多个数据文件,可进行整个数据库的恢复。

步骤一 表中插入记录

shell

SQL> insert into sybex values(8);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from sybex;

        ID
----------
         7
         8
         5
         6
         0
         1
         2
         3
         4

已选择9行。       #备份前有9条记录

步骤二 备份整个数据库

备份日志如下:

shell

恢复管理器: Release 11.1.0.6.0 - Production on 星期一 3月 7 13:52:27 2011

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

RMAN> #script:fullbakup.rman
2> # creater:wangyunzeng
3> # date:2011-03-01
4> # desc:backup all database datafile in archive with rman
5> # connect database
6> connect target *
7> connect catalog *
8> 
9> #start backup database
10> run
11> {
12>   allocate channel c1 type disk;
13>   backup tag 'dbfull' format 'fullbak_%u_%s_%p' database
14>   archivelog all;
15>   sql 'alter system archive log current';
16>   release channel c1;
17> }
18> #end
19> 
连接到目标数据库: MMSGDB (DBID=3148145279)

连接到恢复目录数据库

正在启动全部恢复目录的 resync
完成全部 resync
分配的通道: c1
通道 c1: SID=288 设备类型=DISK

启动 backup 于 07-3月 -11
通道 c1: 正在启动归档日志备份集
通道 c1: 正在指定备份集内的归档日志
输入归档日志线程=1 序列=29 RECID=30 STAMP=744987657
输入归档日志线程=1 序列=30 RECID=32 STAMP=745010540
输入归档日志线程=1 序列=31 RECID=34 STAMP=745031813
输入归档日志线程=1 序列=32 RECID=36 STAMP=745048826
输入归档日志线程=1 序列=33 RECID=38 STAMP=745060929
输入归档日志线程=1 序列=34 RECID=40 STAMP=745067203
输入归档日志线程=1 序列=35 RECID=42 STAMP=745081226
输入归档日志线程=1 序列=36 RECID=44 STAMP=745095298
输入归档日志线程=1 序列=37 RECID=46 STAMP=745109422
输入归档日志线程=1 序列=38 RECID=48 STAMP=745128034
输入归档日志线程=1 序列=39 RECID=50 STAMP=745151697
输入归档日志线程=1 序列=40 RECID=52 STAMP=745152201
输入归档日志线程=1 序列=41 RECID=54 STAMP=745156439
输入归档日志线程=1 序列=42 RECID=56 STAMP=745156440
通道 c1: 正在启动段 1 于 07-3月 -11
通道 c1: 已完成段 1 于 07-3月 -11
段句柄=/opt/oracle/product/11g/dbs/fullbak_0bm6kip0_11_1 标记=DBFULL 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:07
通道 c1: 正在启动全部数据文件备份集
通道 c1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00005 名称=/opt/oracle/oradata/mmsgdb/mmsgdata01
输入数据文件: 文件号=00001 名称=/opt/oracle/oradata/mmsgdb/system01.dbf
输入数据文件: 文件号=00002 名称=/opt/oracle/oradata/mmsgdb/sysaux01.dbf
输入数据文件: 文件号=00003 名称=/opt/oracle/oradata/mmsgdb/undotbs01.dbf
输入数据文件: 文件号=00006 名称=/opt/oracle/oradata/mmsgdb/rman_data.dbf
输入数据文件: 文件号=00004 名称=/opt/oracle/oradata/mmsgdb/users01.dbf
通道 c1: 正在启动段 1 于 07-3月 -11
通道 c1: 已完成段 1 于 07-3月 -11
段句柄=/opt/oracle/product/11g/dbs/fullbak_0cm6kip9_12_1 标记=DBFULL 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:15
完成 backup 于 07-3月 -11

启动 Control File and SPFILE Autobackup 于 07-3月 -11
段 handle=/opt/oracle/flash_recovery_area/MMSGDB/autobackup/2011_03_07/o1_mf_s_745163579_6q8woy7q_.bkp comment=NONE
完成 Control File and SPFILE Autobackup 于 07-3月 -11

sql 语句: alter system archive log current

释放的通道: c1

恢复管理器完成。

步骤三 表中再次插入记录

shell

SQL> insert into sybex values(9);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select count(0) from sybex;

  COUNT(0)
----------
        10    #出故障前,表中有10条记录

SQL>

步骤四 关闭数据库,模拟多个数据文件丢失或损坏

shell

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host
oracle@mmsc103:~> cd oradata/mmsgdb/
oracle@mmsc103:~/oradata/mmsgdb> l
total 2255540
drwxr-x--- 2 oracle oinstall       4096 2011-03-07 12:46 ./
drwxr-x--- 3 oracle oinstall       4096 2011-03-03 18:20 ../
-rw-r----- 1 oracle oinstall    9912320 2011-03-07 13:55 control01.ctl
-rw-r----- 1 oracle oinstall    9912320 2011-03-07 13:55 control02.ctl
-rw-r----- 1 oracle oinstall    9912320 2011-03-07 13:55 control03.ctl
-rw-r----- 1 oracle oinstall 1048584192 2011-03-07 13:55 mmsgdata01
-rw-r----- 1 oracle oinstall  524296192 2011-03-05 11:47 mmsgdata02
-rw-r----- 1 oracle oinstall   52429312 2011-03-07 13:53 redo01.log
-rw-r----- 1 oracle oinstall   52429312 2011-03-07 13:55 redo02.log
-rw-r----- 1 oracle oinstall   52429312 2011-03-07 12:48 redo03.log
-rw-r----- 1 oracle oinstall  209723392 2011-03-07 13:55 rman_data.dbf
-rw-r----- 1 oracle oinstall   20979712 2011-03-05 11:47 rman_tmp.dbf
-rw-r----- 1 oracle oinstall  287186944 2011-03-07 13:55 sysaux01.dbf
-rw-r----- 1 oracle oinstall  356524032 2011-03-07 13:55 system01.dbf
-rw-r----- 1 oracle oinstall   20979712 2011-03-07 10:45 temp01.dbf
-rw-r----- 1 oracle oinstall  209723392 2011-03-07 13:55 undotbs01.dbf
-rw-r----- 1 oracle oinstall    5251072 2011-03-07 13:55 users01.dbf
oracle@mmsc103:~/oradata/mmsgdb> rm -rf mmsgdata01  system01.dbf  sysaux01.dbf  users01.dbf  undotbs01.dbf 
oracle@mmsc103:~/oradata/mmsgdb> exit
exit

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 8417955840 bytes
Fixed Size                  2146024 bytes
Variable Size            4429185304 bytes
Database Buffers         3959422976 bytes
Redo Buffers               27201536 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1: '/opt/oracle/oradata/mmsgdb/system01.dbf'


SQL>

shell

SQL> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- --------------
         1 ONLINE  ONLINE  FILE NOT FOUND                                                             0
         2 ONLINE  ONLINE  FILE NOT FOUND                                                             0
         3 ONLINE  ONLINE  FILE NOT FOUND                                                             0
         4 ONLINE  ONLINE  FILE NOT FOUND                                                             0
         5 ONLINE  ONLINE  FILE NOT FOUND                                                             0

SQL>

步骤五 恢复数据库

shell

RMAN> run
2> {
3> allocate channel c1 type disk;
4> restore database;
5> recover database;
6> sql 'alter database open';
7> release channel c1;
8> }

使用目标数据库控制文件替代恢复目录
分配的通道: c1
通道 c1: SID=317 设备类型=DISK

启动 restore 于 07-3月 -11

通道 c1: 正在开始还原数据文件备份集
通道 c1: 正在指定从备份集还原的数据文件
通道 c1: 将数据文件 00001 还原到 /opt/oracle/oradata/mmsgdb/system01.dbf
通道 c1: 将数据文件 00002 还原到 /opt/oracle/oradata/mmsgdb/sysaux01.dbf
通道 c1: 将数据文件 00003 还原到 /opt/oracle/oradata/mmsgdb/undotbs01.dbf
通道 c1: 将数据文件 00004 还原到 /opt/oracle/oradata/mmsgdb/users01.dbf
通道 c1: 将数据文件 00005 还原到 /opt/oracle/oradata/mmsgdb/mmsgdata01
通道 c1: 将数据文件 00006 还原到 /opt/oracle/oradata/mmsgdb/rman_data.dbf
通道 c1: 正在读取备份片段 /opt/oracle/product/11g/dbs/fullbak_0cm6kip9_12_1
通道 c1: 段句柄 = /opt/oracle/product/11g/dbs/fullbak_0cm6kip9_12_1 标记 = DBFULL
通道 c1: 已还原备份片段 1
通道 c1: 还原完成, 用时: 00:00:35
完成 restore 于 07-3月 -11

启动 recover 于 07-3月 -11

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

完成 recover 于 07-3月 -11

sql 语句: alter database open

释放的通道: c1

RMAN>

步骤六 恢复结果检查

shell

oracle@mmsc103:~> sqlplus mmsg/mmsg@mmsgdb

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 3月 7 14:00:33 2011

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


连接到: 
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(0) from sybex;

  COUNT(0)
----------
        10       #数据库恢复后,10条记录,未丢失数据.

SQL>

说明:

  • 1、只要有备份与归档存在,RMAN也可以实现数据库的完全恢复(不丢失数据)

  • 2、同OS备份数据库恢复,适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复

  • 3、目标数据库在mount下进行,如果恢复成功,再打开数据库。

  • 4、RMAN的备份与恢复命令相对比较简单并可靠,建议有条件的话,都采用RMAN进行数据库的备份。

不完全恢复

OS备份下的基于时间的恢复

不完全恢复分为三种,基于时间(TIME)、基于撤销(CANCLE)、基于改变(SCN),这里以基于时间的恢复为例。

步骤一 创建表

shell

SQL> select * from sybex;

        ID
----------
         7
         8
         9
         5
         6
         0
         1
         2
         3
         4

已选择10行。

SQL> create table time(id int);

表已创建。

SQL> insert into time values(0);

已创建 1 行。

SQL> commit;

提交完成。

SQL>

步骤二 备份数据库

这里冷备整个数据库,包括临时数据文件,热物理备份也可以,这里不在赘述。

步骤三 再次插入数据,并归档

应用用户创建表并插入数据。

shell

SQL> insert into time values(1);

已创建 1 行。

SQL> commit
  2  ;

提交完成。

SQL> 
SQL> select count(0) from time;

  COUNT(0)
----------
         2
sysdba用户切换日志归档

shell

SQL> alter system archive log current;

系统已更改。

SQL> alter system archive log current;

系统已更改。

SQL> alter system archive log current;

系统已更改。
应用用户执行如下操作

shell

SQL> select to_char(sysdate,'yyyy-mm-dd HH24:MI:SS') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2011-03-07 15:49:29

SQL> drop table time;

表已删除。

SQL> commit;

提交完成。

SQL>

步骤四 关闭数据库,拷贝回之前备份的数据文件(这个数据文件中无数据记录)

shell

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host
oracle@mmsc103:~> cp bak_20110307/mmsgdb/* ./oradata/mmsgdb/
oracle@mmsc103:~>

步骤五 mount数据库,执行不完全恢复

shell

SQL> startup mount    
ORACLE 例程已经启动。

Total System Global Area 8417955840 bytes
Fixed Size                  2146024 bytes
Variable Size            4429185304 bytes
Database Buffers         3959422976 bytes
Redo Buffers               27201536 bytes
数据库装载完毕。
SQL> recover database until time '2011-03-07 15:49:29';
完成介质恢复。
SQL> alter database open resetlogs;

数据库已更改。

SQL>
数据库已更改。

SQL>

说明:

  • 不完全恢复,必须使用resetlogs打开数据库。

步骤六 数据验证

shell

SQL> select * from time;

说明:

  • 1、不完全恢复最好备份所有的数据,冷备份亦可,因为恢复过程是从备份点往后恢复的,如果因为其中一个数据文件的时间戳(SCN)大于要恢复的时间点,那么恢复都是不可能成功的(报错,例如:

shell

SQL> recover database until time '2011-03-07 15:06:07';
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 1 没有从过旧的备份中还原
ORA-01110: 数据文件 1: '/opt/oracle/oradata/mmsgdb/system01.dbf'
)。
  • 2、不完全恢复有三种方式,过程都一样,仅仅是recover命令有所不一样,这里用基于时间的恢复作为示例。

  • 3、不完全恢复之后,都必须用resetlogs的方式打开数据库,建议马上再做一次全备份,因为resetlogs之后再用以前的备份恢复是很难了。

  • 4、以上是在删除之前获得时间,但是实际应用中,很难知道删除之前的实际时间,但可以采用大致时间即可,或可以采用分析日志文件(logmnr),取得精确的需要恢复的时间。

  • 5、一般都是在测试机后备用机器上采用这种不完全恢复,恢复之后导出/导入被误删的表回生产系统

RMAN备份下的基于改变的恢复

步骤一 创建表,表中插入记录

shell

SQL> create table scn(id int);

表已创建。

SQL> insert into scn values(0);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from scn;

        ID
----------
         0

SQL>

步骤二 rman备份整个数据库

shell

RMAN> run
2> {
3> allocate channel c1 type disk;
4> backup database
5> (archivelog all);
6> release channel c1;
7> }

在恢复目录中注册的数据库的新原型
正在启动全部恢复目录的 resync
完成全部 resync
分配的通道: c1
通道 c1: SID=286 设备类型=DISK

启动 backup 于 07-3月 -11
通道 c1: 正在启动归档日志备份集
通道 c1: 正在指定备份集内的归档日志
输入归档日志线程=1 序列=29 RECID=30 STAMP=744987657
输入归档日志线程=1 序列=30 RECID=32 STAMP=745010540
输入归档日志线程=1 序列=31 RECID=34 STAMP=745031813
输入归档日志线程=1 序列=32 RECID=36 STAMP=745048826
输入归档日志线程=1 序列=33 RECID=38 STAMP=745060929
输入归档日志线程=1 序列=34 RECID=40 STAMP=745067203
输入归档日志线程=1 序列=35 RECID=42 STAMP=745081226
输入归档日志线程=1 序列=36 RECID=44 STAMP=745095298
输入归档日志线程=1 序列=37 RECID=46 STAMP=745109422
输入归档日志线程=1 序列=38 RECID=48 STAMP=745128034
输入归档日志线程=1 序列=39 RECID=50 STAMP=745151697
输入归档日志线程=1 序列=40 RECID=52 STAMP=745152201
输入归档日志线程=1 序列=41 RECID=54 STAMP=745156439
输入归档日志线程=1 序列=42 RECID=56 STAMP=745156440
输入归档日志线程=1 序列=43 RECID=58 STAMP=745163589
输入归档日志线程=1 序列=44 RECID=60 STAMP=745165838
输入归档日志线程=1 序列=45 RECID=62 STAMP=745167957
输入归档日志线程=1 序列=46 RECID=64 STAMP=745167959
输入归档日志线程=1 序列=47 RECID=66 STAMP=745169653
输入归档日志线程=1 序列=48 RECID=68 STAMP=745169660
输入归档日志线程=1 序列=49 RECID=70 STAMP=745169670
输入归档日志线程=1 序列=50 RECID=72 STAMP=745169894
输入归档日志线程=1 序列=51 RECID=74 STAMP=745169909
输入归档日志线程=1 序列=52 RECID=76 STAMP=745169920
输入归档日志线程=1 序列=53 RECID=78 STAMP=745170730
通道 c1: 正在启动段 1 于 07-3月 -11
通道 c1: 已完成段 1 于 07-3月 -11
段句柄=/opt/oracle/flash_recovery_area/MMSGDB/backupset/2011_03_07/o1_mf_annnn_TAG20110307T160808_6q94mc1l_.bkp 标记=TAG20110307T160808 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:16
通道 c1: 正在启动全部数据文件备份集
通道 c1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00005 名称=/opt/oracle/oradata/mmsgdb/mmsgdata01
输入数据文件: 文件号=00001 名称=/opt/oracle/oradata/mmsgdb/system01.dbf
输入数据文件: 文件号=00002 名称=/opt/oracle/oradata/mmsgdb/sysaux01.dbf
输入数据文件: 文件号=00003 名称=/opt/oracle/oradata/mmsgdb/undotbs01.dbf
输入数据文件: 文件号=00006 名称=/opt/oracle/oradata/mmsgdb/rman_data.dbf
输入数据文件: 文件号=00004 名称=/opt/oracle/oradata/mmsgdb/users01.dbf
通道 c1: 正在启动段 1 于 07-3月 -11
通道 c1: 已完成段 1 于 07-3月 -11
段句柄=/opt/oracle/flash_recovery_area/MMSGDB/backupset/2011_03_07/o1_mf_nnndf_TAG20110307T160808_6q94my75_.bkp 标记=TAG20110307T160808 注释=NONE
通道 c1: 备份集已完成, 经过时间:00:00:15
完成 backup 于 07-3月 -11

启动 Control File and SPFILE Autobackup 于 07-3月 -11
段 handle=/opt/oracle/flash_recovery_area/MMSGDB/autobackup/2011_03_07/o1_mf_s_745171724_6q94ngyy_.bkp comment=NONE
完成 Control File and SPFILE Autobackup 于 07-3月 -11

释放的通道: c1

RMAN>

步骤三 继续插入记录,应用归档以及获取删除前scn

应用用户执行

shell

SQL> insert into scn values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from scn;

        ID
----------
         0
         1
#2条记录
dba用户执行

shell

SQL> alter system switch logfile;

系统已更改。

SQL> /

系统已更改。

SQL> /

系统已更改。

SQL> /

系统已更改。

SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;

       SCN
----------
    690969

SQL>

步骤四 删除表

shell

SQL> drop table scn;

表已删除。

SQL> commit;

提交完成。

步骤五 基于SCN恢复

shell

SQL> shutdown immediate 
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area 8417955840 bytes
Fixed Size                  2146024 bytes
Variable Size            4429185304 bytes
Database Buffers         3959422976 bytes
Redo Buffers               27201536 bytes
数据库装载完毕。
SQL>

RMAN> run
2> {
3> allocate channel c1 type disk;
4> restore database;
5> recover database until scn 690969;
6> sql 'alter database open resetlogs';
7> release channel c1;
8> }

使用目标数据库控制文件替代恢复目录
分配的通道: c1
通道 c1: SID=317 设备类型=DISK

启动 restore 于 07-3月 -11

通道 c1: 正在开始还原数据文件备份集
通道 c1: 正在指定从备份集还原的数据文件
通道 c1: 将数据文件 00001 还原到 /opt/oracle/oradata/mmsgdb/system01.dbf
通道 c1: 将数据文件 00002 还原到 /opt/oracle/oradata/mmsgdb/sysaux01.dbf
通道 c1: 将数据文件 00003 还原到 /opt/oracle/oradata/mmsgdb/undotbs01.dbf
通道 c1: 将数据文件 00004 还原到 /opt/oracle/oradata/mmsgdb/users01.dbf
通道 c1: 将数据文件 00005 还原到 /opt/oracle/oradata/mmsgdb/mmsgdata01
通道 c1: 将数据文件 00006 还原到 /opt/oracle/oradata/mmsgdb/rman_data.dbf
通道 c1: 正在读取备份片段 /opt/oracle/flash_recovery_area/MMSGDB/backupset/2011_03_07/o1_mf_nnndf_TAG20110307T160808_6q94my75_.bkp
通道 c1: 段句柄 = /opt/oracle/flash_recovery_area/MMSGDB/backupset/2011_03_07/o1_mf_nnndf_TAG20110307T160808_6q94my75_.bkp 标记 = TAG20110307T160808
通道 c1: 已还原备份片段 1
通道 c1: 还原完成, 用时: 00:00:35
完成 restore 于 07-3月 -11

启动 recover 于 07-3月 -11

正在开始介质的恢复

线程 1 序列 1 的归档日志已作为文件 /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_07/o1_mf_1_1_6q9526m9_.arc 存在于磁盘上
线程 1 序列 2 的归档日志已作为文件 /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_07/o1_mf_1_2_6q9527t3_.arc 存在于磁盘上
线程 1 序列 3 的归档日志已作为文件 /opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_07/o1_mf_1_3_6q952bqb_.arc 存在于磁盘上
归档日志文件名=/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_07/o1_mf_1_1_6q9526m9_.arc 线程=1 序列=1
归档日志文件名=/opt/oracle/flash_recovery_area/MMSGDB/archivelog/2011_03_07/o1_mf_1_2_6q9527t3_.arc 线程=1 序列=2
介质恢复完成, 用时: 00:00:02
完成 recover 于 07-3月 -11

sql 语句: alter database open resetlogs

释放的通道: c1

RMAN>

步骤六 数据检查

shell

oracle@mmsc103:~> sqlplus mmsg/mmsg@mmsgdb

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 3月 7 16:23:01 2011

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


连接到: 
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from scn;

        ID
----------
         0
         1

SQL>     #两条记录,数据未丢失

说明:

  • 1、RMAN也可以实现不完全恢复,方法比OS备份恢复的方法更简单可靠

  • 2、RMAN可以基于时间,基于改变与基于日志序列的不完全恢复,基于日志序列的恢复可以指定恢复到哪个日志序列,如

shell

run { 
allocate channel ch1 type disk; 
allocate channel ch2 type 'sbt_tape'; 
set until logseq 1234 thread 1; 
restore controlfile to '$ORACLE_HOME/dbs/cf1.f' ; 
replicate controlfile from '$ORACLE_HOME/dbs/cf1.f'; 
alter database mount; 
restore database; 
recover database; 
sql "ALTER DATABASE OPEN RESETLOGS";
}
  • 3、与所有的不完全恢复一样,必须在mount下,restore所有备份数据文件,需要resetlogs

  • 4、基于改变的恢复比基于时间的恢复更可靠,但是可能也更复杂,需要知道需要恢复到哪一个改变号(SCN),在正常生产中,获取SCN的办法其实也有很多,如查询数据库字典表(V$archived_log or v$log_history),或分析归档与联机日志(logmnr)等。


来源: Transcendent
文章作者: Gavin Wang
文章链接: Oracle RMAN实践篇1 | Transcendent
本文章著作权归作者所有,任何形式的转载都请注明出处。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值