您的位置:首页 > 数据库 > Oracle

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

2013-01-24 10:54 671 查看
场景描述:恢复打开的数据库(数据库最初是关闭的)

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

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

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

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

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

SQL> insert into t values(5,'oracle');

1 row created.

SQL> commit;

Commit complete.

SQL>


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

SQL> alter system checkpoint local;--是否实现将日志文件内容写入数据文件有待检验

System altered.

SQL>


1.3 关闭数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>


1.4 损坏sun01_1.dbf文件

bash-3.00$ cd /u01/oradata/sunbak
bash-3.00$ ls -l
total 2162512
-rw-r-----   1 oracle   oinstall 7061504 Jan 23 01:08 control01.ctl
-rw-r-----   1 oracle   oinstall 7061504 Jan 23 01:08 control02.ctl
-rw-r-----   1 oracle   oinstall 7061504 Jan 23 01:08 control03.ctl
-rw-r-----   1 oracle   oinstall 104865792 Jan 23 01:08 example01.dbf
-rw-r-----   1 oracle   oinstall 52429312 Jan 23 01:06 redo01.log
-rw-r-----   1 oracle   oinstall 52429312 Jan 23 01:06 redo02.log
-rw-r-----   1 oracle   oinstall 52429312 Jan 23 01:08 redo03.log
-rw-r-----   1 oracle   oinstall 10493952 Jan 23 01:08 sun01_1.dbf
-rw-r-----   1 oracle   oinstall 251666432 Jan 23 01:08 sysaux01.dbf
-rw-r-----   1 oracle   oinstall 503324672 Jan 23 01:08 system01.dbf
-rw-r-----   1 oracle   oinstall 20979712 Jan 22 23:24 temp01.dbf
-rw-r-----   1 oracle   oinstall 31465472 Jan 23 01:08 undotbs01.dbf
-rw-r-----   1 oracle   oinstall 5251072 Jan 23 01:08 users01.dbf
bash-3.00$ rm -f sun01_1.dbf
bash-3.00$


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

SQL> startup
ORACLE instance started.

Total System Global Area  289406976 bytes
Fixed Size                  1279820 bytes
Variable Size              92276916 bytes
Database Buffers          192937984 bytes
Redo Buffers                2912256 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/oradata/sunbak/sun01_1.dbf'

SQL>
#查看休要恢复文件
SQL> select * from v$recover_file;

FILE# ONLINE  ONLINE_ ERROR                   CHANGE# TIME
---------- ------- ------- -------------------- ---------- ---------
6 ONLINE  ONLINE  FILE NOT FOUND                0

SQL>


1.6 将需恢复文件下线

SQL> alter database datafile 6 offline;

Database altered.

SQL>


1.7 打开数据库

SQL> alter database open;

Database altered.

SQL>


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

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

bash-3.00$ cd /u01/oradata/sunbak
bash-3.00$ ls -l /u01/backup/hot
total 20512
-rw-r-----   1 oracle   oinstall 10493952 Jan 22 22:00 sun01_1.dbf
bash-3.00$ cp /u01/backup/hot/sun01_1.dbf .
bash-3.00$

#此时可把文件恢复到新的目录
bash-3.00$ ls -l /u01/backup/hot
total 20512
-rw-r-----   1 oracle   oinstall 10493952 Jan 22 22:00 sun01_1.dbf
bash-3.00$ cp /u01/backup/hot/sun01_1.dbf /u01/oradata/sun
bash-3.00$
#通过控制文件中文件的位置
SQL> alter database rename file '/u01/oradata/sunbak/sun01_1.dbf' to '/u01/oradata/sun/sun01_1.dbf'


2.2 恢复文件

SQL> recover datafile 6;
ORA-00279: change 574756 generated at 01/22/2013 21:58:34 needed for thread 1
ORA-00289: suggestion : /u01/admin/sun/arch/1_2_805319563.dbf
ORA-00280: change 574756 for thread 1 is in sequence #2

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: change 581083 generated at 01/22/2013 22:04:42 needed for thread 1
ORA-00289: suggestion : /u01/admin/sun/arch/1_3_805319563.dbf
ORA-00280: change 581083 for thread 1 is in sequence #3
ORA-00278: log file '/u01/admin/sun/arch/1_2_805319563.dbf' no longer needed
for this recovery

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

Log applied.
Media recovery complete.
SQL>


2.3将离线文件拉起

SQL> alter database datafile 6 online;

Database altered.

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐