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

oracle用户管理的完全恢复4:在ARCHIVELOG 模式(恢复打开的数据库)

2013-01-24 10:10 716 查看
场景描述:恢复打开的数据库

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

  a.未导致数据库关闭的文件损坏、文件意外丢失或介质故障。

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

  c.受到影响的文件不属于系统表空间或还原/回退段表空间。

1.查看环境
#此时数据库实在打开的情况下

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/admin/sun/arch
Oldest online log sequence     5
Next log sequence to archive   7
Current log sequence           7
SQL>


2.模拟生产环境
2.1 插入数据

SQL> conn user1/user1
Connected.
SQL> insert into t values(3,'oracle');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t;

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

SQL>

#手动切换日志 产生归档日志
SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL>


#sun01_1.dbf文件在上一节已经进行热备
2.2 损坏表空间sun01的数据文件sun01_1.dbf

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


3.恢复场景:数据库在open的情况下做完全恢复情况

3.1 查看需要恢复信息

#此时oracle并未发现有数据文件被损坏
SQL> select * from v$recover_file;

no rows selected

SQL>


3.2 继续向t表插入数据,仍然可以插入(此时数据在redo中)

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

1 row created.

SQL> commit;

Commit complete.

SQL>


3.3 手动执行CKPT,使redo中的数据插入数据文件

SQL> alter system checkpoint local;--检查点分为三类:local,global,文件检查点

System altered.

SQL>

#查看alter日志发现报错信息
Wed Jan 23 00:16:33 2013
Errors in file /u01/admin/sun/udump/sun_ora_1227.trc:
ORA-01110: data file 6: '/u01/oradata/sunbak/sun01_1.dbf'
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/oradata/sunbak/sun01_1.dbf'
ORA-27041: unable to open file
Intel SVR4 UNIX Error: 2: No such file or directory
Additional information: 3
Wed Jan 23 00:16:33 2013
Errors in file /u01/admin/sun/udump/sun_ora_1227.trc:
ORA-01171: datafile 6 going offline due to error advancing checkpoint
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/oradata/sunbak/sun01_1.dbf'
ORA-27041: unable to open file
Intel SVR4 UNIX Error: 2: No such file or directory
Additional information: 3


3.4查看需要恢复信息

SQL> select file#,ONLINE_STATUS,ERROR from v$recover_file;

FILE# ONLINE_ ERROR
---------- ------- --------------------
6 OFFLINE FILE NOT FOUND

SQL>


3.5 把被损坏文件离线

SQL> alter database datafile 6 offline;

Database altered.

SQL>


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

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$


3.7 恢复

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 604184 generated at 01/22/2013 23:54:27 needed for thread 1
ORA-00289: suggestion : /u01/admin/sun/arch/1_8_805319563.dbf
ORA-00280: change 604184 for thread 1 is in sequence #8
ORA-00278: log file '/u01/admin/sun/arch/1_7_805319563.dbf' no longer needed
for this recovery

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

Log applied.
Media recovery complete.
SQL>

#恢复完成
SQL> select * from v$recover_file;

no rows selected

SQL>


3.8 将offline文件online

SQL> desc v$datafile;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
FILE#                                              NUMBER
CREATION_CHANGE#                                   NUMBER
CREATION_TIME                                      DATE
TS#                                                NUMBER
RFILE#                                             NUMBER
STATUS                                             VARCHAR2(7)
ENABLED                                            VARCHAR2(10)
CHECKPOINT_CHANGE#                                 NUMBER
CHECKPOINT_TIME                                    DATE
UNRECOVERABLE_CHANGE#                              NUMBER
UNRECOVERABLE_TIME                                 DATE
LAST_CHANGE#                                       NUMBER
LAST_TIME                                          DATE
OFFLINE_CHANGE#                                    NUMBER
ONLINE_CHANGE#                                     NUMBER
ONLINE_TIME                                        DATE
BYTES                                              NUMBER
BLOCKS                                             NUMBER
CREATE_BYTES                                       NUMBER
BLOCK_SIZE                                         NUMBER
NAME                                               VARCHAR2(513)
PLUGGED_IN                                         NUMBER
BLOCK1_OFFSET                                      NUMBER
AUX_NAME                                           VARCHAR2(513)
FIRST_NONLOGGED_SCN                                NUMBER
FIRST_NONLOGGED_TIME                               DATE

SQL> col name format a30
SQL> select file#,status,name from v$datafile;

FILE# STATUS  NAME
---------- ------- ------------------------------
1 SYSTEM  /u01/oradata/sunbak/system01.dbf

2 ONLINE  /u01/oradata/sunbak/undotbs01.dbf

3 ONLINE  /u01/oradata/sunbak/sysaux01.dbf

4 ONLINE  /u01/oradata/sunbak/users01.dbf

FILE# STATUS  NAME
---------- ------- ------------------------------
5 ONLINE  /u01/oradata/sunbak/example01.dbf

6 OFFLINE /u01/oradata/sunbak/sun01_1.dbf

SQL>
SQL> alter database datafile 6 online;

Database altered.

SQL>


4.查看恢复数据

SQL> select * from t;

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

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