Oracle 10g 数据恢复(闪回FLAHBACK)


1、闪回数据库 Flashbackdatabase(根据误操作时间闪回数据)

·DB_RECOVER_FILE_DEST

·DB_RECOVER_FILE_DEST_SIZE

这两个参数来确定Flashback日志的存放地点与该恢复区的大小。在创建数据库的时候,Oracle将自动创建恢复区(需要注意,该恢复区可不仅仅是为了flashbacklog,还可以用来归档,备份与恢复),但是默认是关闭Flashback database功能。如果想要利用这一功能,DBA就必须正确的配置该日志区的大小,如一个数据库的数据库,每天有10%的块发生改变,那么一天(24小时)的Flash Recovery Area就是1/10个数据库大小。DBA也可以动态的改变其大小以满足不同的需求。

另外一个参数DB_FLASHBACK_RETENTION_TARGET参数允许您设定闪回数据的保存时间,单位是分。默认是一天(24*60)

 

SQL> startup mount

ORACLE instance started.

Total System Global Area  113246208 bytes

Fixed Size                   787708 bytes

Variable Size              87030532 bytes

Database Buffers           25165824 bytes

Redo Buffers                 262144 bytes

Database mounted.

 

SQL> alter database archivelog;

Database altered.

SQL> alter database flashback on;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     13

Next log sequence to archive   15

Current log sequence           15

经过以上步骤,我们确保了flashback database的功能,我们还可以发现,10g的自动归档是不需要手工干预的,只要开启了归档,就是自动归档了,归档区也在DB_RECOVERY_FILE_DEST参数指定的地点。

 

通过如下的查询

SQL> alter session setnls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> SELECTOLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME

  2        FROMV$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCNOLDEST_FLASHBACK_TI

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

            875155 2007-05-20 21:45:50

我们可以知道,可以前滚恢复到的最早的SCN与时间点是多少,如果没有确保flashback database,该视图将没有查询结果。

 

注意:truncate 的数据用Flashback 的 Flashback database 恢复。

 

没有备份,我们利用flashback来恢复数据库到2007-05-20 21:45:50时间点。

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

SQL> FLASHBACKDATABASE TO timestamp(to_date('2007-05-20 21:45:50','yyyy-mm-dd hh24:mi:ss'));

Flashback complete.

 

发现truncate的记录或者是drop的表都存在,现在数据库已经前滚到前一个时间点了。

之后,我们可以用ALTERDATABASE OPEN READ ONLY来检查结果是否正确,如果满足结果,则可以用resetlog来正式启动数据库,注意,一旦resetlogs之后,将不能再flashback的resetlogs之前的时间点。

15:41:32 SQL> alter database openresetlogs;

Database altered.

 

SQL> SELECT OLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIME

  2          FROMV$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI

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

  8751552007-05-20 21:45:50

 

同时发现数据库的最早的flashback的时间与scn都回到resetlog的时间点了。


2、闪回delete的数据 flashback table(根据误操作时间闪回数据)

 

SQL> flashbacktable test1 TO TIMESTAMP to_timestamp('2007-05-20 22:20:10','yyyy-mm-ddhh24:mi:ss');

Flashback complete.

 

我们可以发现,执行delete操作的表是可以恢复的,而执行truncate操作的表是不可以恢复的.

还可以看到,对于drop的索引,也是没有办法恢复的,因为drop并不记录undo。


3、闪回drop的表flashbackdrop

对于truncate的表,除了flashback database之外,其它的flashback功能可能不可恢复。

所谓的回收站,是一个虚拟的容器,用于存放所有被删除的对象。在回收站中,被删除的对象将占用创建时的同样的空间,对于一个对象的删除,其实仅仅就是简单的重令名操作。你甚至还可以对已经删除的表查询,也可以利用flashback功能来恢复它, 这个就是flashbackdrop功能。

关于回收站内的相关信息可以从recyclebin/USER_recyclebin/DBA_recyclebin等视图中获取,或者通过SQL*Plus的show recyclebin 命令查看

 

通过下面语句查看drop操作过的表名

SQL> showrecyclebin

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME

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

TEST1   BIN$nwjcjTOtQUirZW4H1wlFVA==$0 TABLE        2007-05-20:22:37:18

 

可以将表恢复到删除之前。如

SQL> FLASHBACKTABLE test1 TO BEFORE DROP;

或者

SQL> FLASHBACKTABLE “BIN$nwjcjTOtQUirZW4H1wlFVA==$0” TO BEFORE DROP;

Flashback complete.

 

可以看到,表TEST1已经被恢复了,需要注意的是,flashback命令中的表名可以是原来的名字或者是回收站中的名称,都无所谓。如果原来的名称在回收站中存在同名,那么将恢复最后drop的表。

SQL> purge recyclebin;

Recyclebin purged.

SQL> show recyclebin

之后,可以看到,回收站中已经没有任何信息

如果删除一个表,而不想放到回收站中,可以利用purge选项在drop语句中,如

drop table tablename purge

 

另外,还有一些需要注意的地方

·drop tablespace tsname including contents时,表空间内的所有对象包括回收站内的对象都将被清除。

·如果仅仅是drop tablespace时,如果有永久对象将不能执行,如果仅仅是有回收站内的对象,将先清除回收站,然后删除表空间

·如果drop user username cascade时,所有对象将被删除,而且不放入回收站

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值