说明:
操作系统:oracle_linux_5.6_32
数据库:oracle_10.2.0.1 单实例
故障模拟:
丢失了所有的控制文件,数据文件、日志文件。
数据库归档已经开启,归档日志没有丢失。
演示步骤:
(1)
先对数据库做一个全备,rman会自动备份控制文件和spfile。
RMAN> run {
2> allocate channel c1 device type disk;
3> allocate channel c2 device type disk;
4> allocate channel c3 device type disk;
5> allocate channel c4 device type disk;
6> backup database format '/backup/rmanbak/full_2013_9_29_2020%U';
7> }
(2)
查看要删除的所有文件列表:
SQL> select name from v$datafile
2 union
3 select name from v$controlfile
4 union
5 select member from v$logfile;
NAME
-----------------------------------------------------------
/u01/app/oracle/oradata/rac3/control01.ctl
/u01/app/oracle/oradata/rac3/control02.ctl
/u01/app/oracle/oradata/rac3/example01.dbf
/u01/app/oracle/oradata/rac3/redo01.log
/u01/app/oracle/oradata/rac3/redo02.log
/u01/app/oracle/oradata/rac3/redo03.log
/u01/app/oracle/oradata/rac3/sysaux01.dbf
/u01/app/oracle/oradata/rac3/system01.dbf
/u01/app/oracle/oradata/rac3/undotbs01.dbf
/u01/app/oracle/oradata/rac3/users01.dbf
/u01/app/oracle/oradata/rac3/zsx01.dbf
(3)
创建测试表、插入测试数据。
SQL> conn zsx/zsx
SQL> create table test(id number);
SQL> insert into test values(1);
SQL> commit;
(4)
手工切换日志,是日志归档。
SQL> alter system switch logfile;
System altered.
(5)
强制关闭数据库
SQL> shutdown abort;
ORACLE instance shut down.
(6)
删除数据文件、联机日志、控制文件。
[oracle@rac3 rmanbak]$ cd /u01/app/oracle/oradata/rac3/
[oracle@rac3 rac3]$ ls -al
total 1953812
drwxr-x--- 2 oracle oinstall 4096 Sep 29 17:37 .
drwxr-x--- 3 oracle oinstall 4096 Sep 28 13:24 ..
-rw-r----- 1 oracle oinstall 9748480 Sep 29 18:13 control01.ctl
-rw-r----- 1 oracle oinstall 9748480 Sep 29 18:13 control02.ctl
-rw-r----- 1 oracle oinstall 362422272 Sep 29 18:12 example01.dbf
-rw-r----- 1 oracle oinstall 52429312 Sep 29 18:11 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Sep 29 18:12 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Sep 29 18:11 redo03.log
-rw-r----- 1 oracle oinstall 576724992 Sep 29 18:12 sysaux01.dbf
-rw-r----- 1 oracle oinstall 754982912 Sep 29 18:12 system01.dbf
-rw-r----- 1 oracle oinstall 30416896 Sep 29 15:33 temp01.dbf
-rw-r----- 1 oracle oinstall 99622912 Sep 29 18:12 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Sep 29 18:12 users01.dbf
-rw-r----- 1 oracle oinstall 20979712 Sep 29 18:12 zsx01.dbf
[oracle@rac3 rac3]$ rm -rf *
(7)
先恢复控制文件,启动到nomount;
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 849530880 bytes
Fixed Size 1348244 bytes
Variable Size 511708524 bytes
Database Buffers 331350016 bytes
Redo Buffers 5124096 bytes
RMAN> restore controlfile from '/backup/rmanbak/full_2013_9_29_20200col36fs_1_1';
Starting restore at 29-SEP-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
output file name=/u01/app/oracle/oradata/rac3/control01.ctl
output file name=/u01/app/oracle/oradata/rac3/control02.ctl
Finished restore at 29-SEP-13
(8)
将数据库启动到mount状态:
RMAN> sql 'alter database mount';
sql statement: alter database mount
released channel: ORA_DISK_1
查看oradata下的控制文件
[root@rac3 rmanbak]# cd /u01/app/oracle/oradata/rac3/
[root@rac3 rac3]# ll
total 19072
-rw-r----- 1 oracle oinstall 9748480 Sep 29 18:30 control01.ctl
-rw-r----- 1 oracle oinstall 9748480 Sep 29 18:30 control02.ctl
(9)
开始恢复数据文件
RMAN> restore database;
......
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:01:25
Finished restore at 29-SEP-13
RMAN> recover database;
......
media recovery complete, elapsed time: 00:00:16
Finished recover at 29-SEP-13
(10)
打开数据库,以resetlogs的方式
SQL> alter database open resetlogs;
Database altered.
(11)
查询测试数据是否丢失:
SQL> conn zsx/zsx
Connected.
SQL> select * from s;
ID
----------
1
注意:
表存在,数据也存在,证明数据库是完全恢复了,并没有丢失数据。
操作系统:oracle_linux_5.6_32
数据库:oracle_10.2.0.1 单实例
故障模拟:
丢失了所有的控制文件,数据文件、日志文件。
数据库归档已经开启,归档日志没有丢失。
演示步骤:
(1)
先对数据库做一个全备,rman会自动备份控制文件和spfile。
RMAN> run {
2> allocate channel c1 device type disk;
3> allocate channel c2 device type disk;
4> allocate channel c3 device type disk;
5> allocate channel c4 device type disk;
6> backup database format '/backup/rmanbak/full_2013_9_29_2020%U';
7> }
(2)
查看要删除的所有文件列表:
SQL> select name from v$datafile
2 union
3 select name from v$controlfile
4 union
5 select member from v$logfile;
NAME
-----------------------------------------------------------
/u01/app/oracle/oradata/rac3/control01.ctl
/u01/app/oracle/oradata/rac3/control02.ctl
/u01/app/oracle/oradata/rac3/example01.dbf
/u01/app/oracle/oradata/rac3/redo01.log
/u01/app/oracle/oradata/rac3/redo02.log
/u01/app/oracle/oradata/rac3/redo03.log
/u01/app/oracle/oradata/rac3/sysaux01.dbf
/u01/app/oracle/oradata/rac3/system01.dbf
/u01/app/oracle/oradata/rac3/undotbs01.dbf
/u01/app/oracle/oradata/rac3/users01.dbf
/u01/app/oracle/oradata/rac3/zsx01.dbf
(3)
创建测试表、插入测试数据。
SQL> conn zsx/zsx
SQL> create table test(id number);
SQL> insert into test values(1);
SQL> commit;
(4)
手工切换日志,是日志归档。
SQL> alter system switch logfile;
System altered.
(5)
强制关闭数据库
SQL> shutdown abort;
ORACLE instance shut down.
(6)
删除数据文件、联机日志、控制文件。
[oracle@rac3 rmanbak]$ cd /u01/app/oracle/oradata/rac3/
[oracle@rac3 rac3]$ ls -al
total 1953812
drwxr-x--- 2 oracle oinstall 4096 Sep 29 17:37 .
drwxr-x--- 3 oracle oinstall 4096 Sep 28 13:24 ..
-rw-r----- 1 oracle oinstall 9748480 Sep 29 18:13 control01.ctl
-rw-r----- 1 oracle oinstall 9748480 Sep 29 18:13 control02.ctl
-rw-r----- 1 oracle oinstall 362422272 Sep 29 18:12 example01.dbf
-rw-r----- 1 oracle oinstall 52429312 Sep 29 18:11 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Sep 29 18:12 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Sep 29 18:11 redo03.log
-rw-r----- 1 oracle oinstall 576724992 Sep 29 18:12 sysaux01.dbf
-rw-r----- 1 oracle oinstall 754982912 Sep 29 18:12 system01.dbf
-rw-r----- 1 oracle oinstall 30416896 Sep 29 15:33 temp01.dbf
-rw-r----- 1 oracle oinstall 99622912 Sep 29 18:12 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Sep 29 18:12 users01.dbf
-rw-r----- 1 oracle oinstall 20979712 Sep 29 18:12 zsx01.dbf
[oracle@rac3 rac3]$ rm -rf *
(7)
先恢复控制文件,启动到nomount;
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 849530880 bytes
Fixed Size 1348244 bytes
Variable Size 511708524 bytes
Database Buffers 331350016 bytes
Redo Buffers 5124096 bytes
RMAN> restore controlfile from '/backup/rmanbak/full_2013_9_29_20200col36fs_1_1';
Starting restore at 29-SEP-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
output file name=/u01/app/oracle/oradata/rac3/control01.ctl
output file name=/u01/app/oracle/oradata/rac3/control02.ctl
Finished restore at 29-SEP-13
(8)
将数据库启动到mount状态:
RMAN> sql 'alter database mount';
sql statement: alter database mount
released channel: ORA_DISK_1
查看oradata下的控制文件
[root@rac3 rmanbak]# cd /u01/app/oracle/oradata/rac3/
[root@rac3 rac3]# ll
total 19072
-rw-r----- 1 oracle oinstall 9748480 Sep 29 18:30 control01.ctl
-rw-r----- 1 oracle oinstall 9748480 Sep 29 18:30 control02.ctl
(9)
开始恢复数据文件
RMAN> restore database;
......
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:01:25
Finished restore at 29-SEP-13
RMAN> recover database;
......
media recovery complete, elapsed time: 00:00:16
Finished recover at 29-SEP-13
(10)
打开数据库,以resetlogs的方式
SQL> alter database open resetlogs;
Database altered.
(11)
查询测试数据是否丢失:
SQL> conn zsx/zsx
Connected.
SQL> select * from s;
ID
----------
1
注意:
表存在,数据也存在,证明数据库是完全恢复了,并没有丢失数据。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29107230/viewspace-1062582/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29107230/viewspace-1062582/