测试恢复7==不完全恢复

当归档日志丢失,或者联机日志丢失了一部分,这个时候不能恢复到出错前的状态,只能恢复到出错前更早时间点状态,这叫不完全恢复。不完全恢复总的来说就是说在恢复中有到的东西有丢失,比如日志文件等。

 

不完全恢复应用场景:在做完全恢复的时候,因为归档文件的丢失这时候做的是不完全恢复,当数据文件丢失REDO文件也丢失这时候也是不完全恢复,控制文件丢失这有可能是完全恢复也有可能是不完全恢复。,当数据文件丢失恢复数据库到某一个时间点的时候数据库的结构与当前数据库结构不一样的时候也要做不完全恢复。在恢复之前和恢复之后都做一次备份很有必要在做不完全恢复前。

 

不完全恢复的种类:基于时间[这个可以指定恢复到某一个时间点],基于CANCEL【在恢复的过程中会应用归档日志,在APPLY归档日志的期间某一个时间点可以取消恢复】,

 

不完全恢复的时候打开数据库一定是ALTER DATABASE OPEN RESETLOG.这说明老的归档文件没用了,可以删了。

 

不完全恢复过程:先备份,RESTORE所有数据文件,把数据库MOUNT,恢复数据库到指定时间点RECOVER,RESETLOG方式打开数据库,在做一次数据库的全备。

 

====================基于时间的不完全恢复=========================

会话1:查看测试表数据,关闭数据库

SQL> conn qq1/qq1

Connected.

SQL> select * from t;

 

        ID NAME

---------- ----------

         0 qq1

         1 qq2

         2 qq3

         3 qq4

         4 qq5

 

SQL> 

 

SQL> conn /as sysdba

Connected.

SQL> shutdown

Database closed.

Database dismounted.

ORACLE instance shut down.

会话2:冷备

root@oraclelinux dbtest]# cp * /backup/cold

[root@oraclelinux dbtest]# pwd

/u01/oradata/dbtest

[root@oraclelinux dbtest]# cd /backup/cold

[root@oraclelinux cold]# ll

[oracle@oraclelinux flash_recovery_area]$ cp -r DBTEST /backup/cold

会话1:打开数据库修改表记录

SQL> select * from t;

 

        ID NAME

---------- ----------

         0 qq1

         1 qq2

         2 qq3

         3 qq4

         4 qq5

 

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

 

1 row created.

 

SQL>commit;

Commit complete.

 

查看当前正在使用的联机重做日志组是那一组

SQL> conn /as sysdba

Connected.

SQL> select group#,status from v$log;

 

    GROUP# STATUS

---------- ----------------

         1 INACTIVE

         2 CURRENT

         3 INACTIVE

         4 INACTIVE

 

SQL> 

查看当前数据库时间

 

SQL> select to_char(sysdate,'dd-mm-yyyy hh24:mi:ss') as currenttime from dual;

 

CURRENTTIME

-------------------

28-04-2012 15:51:46

 

SQL> 【这个时候表还在】

会话2:删除表

SQL> show user

USER is "QQ1"

SQL> drop table t;

 

Table dropped.

 

SQL> 

会话1:强制关闭数据库

 

SQL> shutdown abort;

ORACLE instance shut down.

SQL> 

会话2RESTORE数据库

[oracle@oraclelinux dbtest]$ rm -f *.dbf

[oracle@oraclelinux dbtest]$ ll

total 278024

-rw-r-----  1 oracle oinstall  7389184 Apr 28 15:55 control01.ctl

-rw-r-----  1 oracle oinstall  7389184 Apr 28 15:55 control02.ctl

-rw-r-----  1 oracle oinstall  7389184 Apr 28 15:55 control03.ctl

-rw-r--r--  1 oracle oinstall     1228 Mar 22 21:09 ctl

-rw-r-----  1 oracle oinstall 52429312 Apr 28 15:37 redo01.log

-rw-r-----  1 oracle oinstall 52429312 Apr 28 15:55 redo02.log

-rw-r-----  1 oracle oinstall 52429312 Apr 28 15:37 redo03.log

-rw-r-----  1 oracle oinstall 52429312 Mar 23 14:50 redo04a.log

-rw-r-----  1 oracle oinstall 52429312 Apr 28 15:37 redo04.log

[oracle@oraclelinux dbtest]$ cp /backup/cold/*.dbf .

cp: cannot open `/backup/cold/example01.dbf' for reading: Permission denied

cp: cannot open `/backup/cold/paul01.dbf' for reading: Permission denied

cp: cannot open `/backup/cold/qq01.dbf' for reading: Permission denied

cp: cannot open `/backup/cold/qq02.dbf' for reading: Permission denied

cp: cannot open `/backup/cold/sysaux01.dbf' for reading: Permission denied

cp: cannot open `/backup/cold/system01.dbf' for reading: Permission denied

cp: cannot open `/backup/cold/undotbs01.dbf' for reading: Permission denied

cp: cannot open `/backup/cold/users01.dbf' for reading: Permission denied

cp: cannot open `/backup/cold/wenchuan01.dbf' for reading: Permission denied

cp: cannot open `/backup/cold/wenchuan2.dbf' for reading: Permission denied

[oracle@oraclelinux dbtest]$ su - root

Password: 

[root@oraclelinux ~]# cd /u01/oradata/dbtest

[root@oraclelinux dbtest]# ll

total 278024

-rw-r-----  1 oracle oinstall  7389184 Apr 28 15:55 control01.ctl

-rw-r-----  1 oracle oinstall  7389184 Apr 28 15:55 control02.ctl

-rw-r-----  1 oracle oinstall  7389184 Apr 28 15:55 control03.ctl

-rw-r--r--  1 oracle oinstall     1228 Mar 22 21:09 ctl

-rw-r-----  1 oracle oinstall 52429312 Apr 28 15:37 redo01.log

-rw-r-----  1 oracle oinstall 52429312 Apr 28 15:55 redo02.log

-rw-r-----  1 oracle oinstall 52429312 Apr 28 15:37 redo03.log

-rw-r-----  1 oracle oinstall 52429312 Mar 23 14:50 redo04a.log

-rw-r-----  1 oracle oinstall 52429312 Apr 28 15:37 redo04.log

[root@oraclelinux dbtest]# cp /backup/cold/*.dbf .

[root@oraclelinux dbtest]# 

把数据库MOUNT,现在控制文件是新的,数据文件是旧的

 

SQL> startup mount;

ORACLE instance started.

 

Total System Global Area  444596224 bytes

Fixed Size                  1219904 bytes

Variable Size             130024128 bytes

Database Buffers          310378496 bytes

Redo Buffers                2973696 bytes

Database mounted.

SQL> 

查看SCN

SQL> select file#,checkpoint_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE#

---------- ------------------

         1            1731941

         2            1731941

         3            1731941

         4            1731941

         5            1731941

         6            1731941

         7            1731941

         8            1731941

         9            1731941

        10            1731941

 

10 rows selected.

 

SQL> select file#,checkpoint_change# from v$datafile_header;

 

     FILE# CHECKPOINT_CHANGE#

---------- ------------------

         1                  0

         2                  0

         3                  0

         4                  0

         5                  0

         6                  0

         7                  0

         8                  0

         9                  0

        10                  0

 

10 rows selected.【怎么是0呢?】

 

SQL> 

恢复数据库

SQL> startup mount;

ORACLE instance started.

 

Total System Global Area  444596224 bytes

Fixed Size                  1219904 bytes

Variable Size             130024128 bytes

Database Buffers          310378496 bytes

Redo Buffers                2973696 bytes

Database mounted.

SQL> recover database until '2012-04-28:15:51:46';

ORA-00277: illegal option to the UNTIL recovery flag 2012-04-28:15:51:46

 

 

SQL> recover database until time '2012-04-28:15:51:46';

ORA-00283: recovery session canceled due to errors

ORA-38760: This database instance failed to turn on flashback database

 

 

SQL> alter database flashback off;

 

Database altered.

 

SQL> recover database until time '2012-04-28:15:51:46';

Media recovery complete.

SQL> alter database open resetlog;

alter database open resetlog

                    *

ERROR at line 1:

ORA-02288: invalid OPEN mode

 

 

SQL> alter database open resetlogs;

 

Database altered.

 

 

 

 

 注意:所有文件应该让ORACLE用户有访问权限或者更大权限,控制文件在没权限的时候打不开,报错!

请使用浏览器的分享功能分享到微信等