oracle用户管理的完全恢复4:在ARCHIVELOG 模式(恢复打开的数据库--数据库最初是关闭的)

场景描述:恢复打开的数据库(数据库最初是关闭的)

此恢复方法一般在以下情况下使用:

  a.介质或硬件故障导致系统关闭。

  b.数据库全天候(每周7 天、每天24 小时)运行。必须最大限度地减少数据库的停机时间。

  c.损坏的文件不属于系统表空间或还原段表空间

1.模拟生产环境
1.1 插入数据

1 SQL> insert into t values(5,'oracle');
2 
3 1 row created.
4 
5 SQL> commit;
6 
7 Commit complete.
8 
9 SQL> 

1.2 将数据写入数据文件sun01_1.dbf

1 SQL> alter system checkpoint local;--是否实现将日志文件内容写入数据文件有待检验
2 
3 System altered.
4 
5 SQL>

1.3 关闭数据库

1 SQL> shutdown immediate
2 Database closed.
3 Database dismounted.
4 ORACLE instance shut down.
5 SQL> 

1.4 损坏sun01_1.dbf文件

 1 bash-3.00$ cd /u01/oradata/sunbak
 2 bash-3.00$ ls -l
 3 total 2162512
 4 -rw-r-----   1 oracle   oinstall 7061504 Jan 23 01:08 control01.ctl
 5 -rw-r-----   1 oracle   oinstall 7061504 Jan 23 01:08 control02.ctl
 6 -rw-r-----   1 oracle   oinstall 7061504 Jan 23 01:08 control03.ctl
 7 -rw-r-----   1 oracle   oinstall 104865792 Jan 23 01:08 example01.dbf
 8 -rw-r-----   1 oracle   oinstall 52429312 Jan 23 01:06 redo01.log
 9 -rw-r-----   1 oracle   oinstall 52429312 Jan 23 01:06 redo02.log
10 -rw-r-----   1 oracle   oinstall 52429312 Jan 23 01:08 redo03.log
11 -rw-r-----   1 oracle   oinstall 10493952 Jan 23 01:08 sun01_1.dbf
12 -rw-r-----   1 oracle   oinstall 251666432 Jan 23 01:08 sysaux01.dbf
13 -rw-r-----   1 oracle   oinstall 503324672 Jan 23 01:08 system01.dbf
14 -rw-r-----   1 oracle   oinstall 20979712 Jan 22 23:24 temp01.dbf
15 -rw-r-----   1 oracle   oinstall 31465472 Jan 23 01:08 undotbs01.dbf
16 -rw-r-----   1 oracle   oinstall 5251072 Jan 23 01:08 users01.dbf
17 bash-3.00$ rm -f sun01_1.dbf 
18 bash-3.00$ 

1.5 将数据库打开(实际只能打开到mount)

 1 SQL> startup
 2 ORACLE instance started.
 3 
 4 Total System Global Area  289406976 bytes
 5 Fixed Size                  1279820 bytes
 6 Variable Size              92276916 bytes
 7 Database Buffers          192937984 bytes
 8 Redo Buffers                2912256 bytes
 9 Database mounted.
10 ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
11 ORA-01110: data file 6: '/u01/oradata/sunbak/sun01_1.dbf'
12 
13 
14 SQL>
15 #查看休要恢复文件
16 SQL> select * from v$recover_file;
17 
18      FILE# ONLINE  ONLINE_ ERROR                   CHANGE# TIME
19 ---------- ------- ------- -------------------- ---------- ---------
20          6 ONLINE  ONLINE  FILE NOT FOUND                0
21 
22 SQL> 

1.6 将需恢复文件下线

1 SQL> alter database datafile 6 offline;
2 
3 Database altered.
4 
5 SQL> 

1.7 打开数据库

1 SQL> alter database open;
2 
3 Database altered.
4 
5 SQL> 

2.开始恢复(利用冷备文件 热备文件皆可)

2.1把上次备份的sun01_1.dbf文件拷过来

 1 bash-3.00$ cd /u01/oradata/sunbak
 2 bash-3.00$ ls -l /u01/backup/hot
 3 total 20512
 4 -rw-r-----   1 oracle   oinstall 10493952 Jan 22 22:00 sun01_1.dbf
 5 bash-3.00$ cp /u01/backup/hot/sun01_1.dbf .
 6 bash-3.00$ 
 7 
 8 #此时可把文件恢复到新的目录
 9 bash-3.00$ ls -l /u01/backup/hot
10 total 20512
11 -rw-r-----   1 oracle   oinstall 10493952 Jan 22 22:00 sun01_1.dbf
12 bash-3.00$ cp /u01/backup/hot/sun01_1.dbf /u01/oradata/sun
13 bash-3.00$
14 #通过控制文件中文件的位置
15 SQL> alter database rename file '/u01/oradata/sunbak/sun01_1.dbf' to '/u01/oradata/sun/sun01_1.dbf'

2.2 恢复文件

 1 SQL> recover datafile 6;
 2 ORA-00279: change 574756 generated at 01/22/2013 21:58:34 needed for thread 1
 3 ORA-00289: suggestion : /u01/admin/sun/arch/1_2_805319563.dbf
 4 ORA-00280: change 574756 for thread 1 is in sequence #2
 5 
 6 
 7 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
 8 
 9 ORA-00279: change 581083 generated at 01/22/2013 22:04:42 needed for thread 1
10 ORA-00289: suggestion : /u01/admin/sun/arch/1_3_805319563.dbf
11 ORA-00280: change 581083 for thread 1 is in sequence #3
12 ORA-00278: log file '/u01/admin/sun/arch/1_2_805319563.dbf' no longer needed
13 for this recovery
14 
15 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
16 
17 Log applied.
18 Media recovery complete.
19 SQL> 

2.3将离线文件拉起

1 SQL> alter database datafile 6 online;
2 
3 Database altered.
4 
5 SQL> 

3.查看恢复结果

SQL> select * from user1.t;

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

6 rows selected.

SQL> 

 

 

 

posted @ 2013-01-24 10:54  PoleStar  阅读(256)  评论(0编辑  收藏  举报