10G Flashback 新特性

本文详细介绍了Oracle 10G中引入的Flashback特性,包括Flashback Query、Flashback Database和Recycle Bin的具体使用方法及步骤。通过实际案例展示了如何利用这些特性进行数据恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10G Flashback 新特性

一、使用Oracle10gFlashback Query进行数据闪回

   Oracle10g对于闪回查询进行了增强,支持更简单的SQL操作,允许对误删除、误更新等DML操作进行闪回。

 

  看一下以下测试:

  1.原表记录

 SQL> select count(*) from test;

 

  COUNT(*)

----------

         5

 

  2.误删除所有记录,并且提交更改。

SQL> delete test;

 

5 rows deleted.

 

SQL> commit;

 

Commit complete.

 

SQL> select count(*) from test;

 

  COUNT(*)

----------

         0

 

  3.获得当前SCN

   如果能够确切知道删除之前SCN最好,如果不知道,可以进行闪回查询尝试.

 

SQL> select dbms_flashback.get_system_change_number from dual;

 

GET_SYSTEM_CHANGE_NUMBER

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

                 1338692

 

 

 

SQL> select count(*) from test as of scn 1338660;

 

  COUNT(*)

----------

        5

我们看到在SCN=1338760时,数据都在。

4.恢复数据.

 

SQL> insert into emp3 select * from emp3 as of scn 1338660;

 

14 rows created.

 

SQL> commit;

 

Commit complete.

 

总结:如果回滚段被覆盖,则无法进行闪回查询恢复。

 

=======================================================

 

二、flashback database

 

  以下的例子演示了命令行配置。这也可以用企业治理器来完成。

 在我们配置重现数据库之前,我们需要照顾以下一些先决条件。

 Flash Recovery Area  

  

  首先,我们需要配置一个Flash Recovery Area (FRA)。在10g中,这是个新东西,FRA只不过是一个恢复相关文件的磁盘定位。对于重现数据库,一个新的后台进程,名为Recovery Writer (RVWR),在来自SGA的数据库重现缓存的映像之前,阶段性地写入磁盘,作为FRA中的重现日志。重现日志是在FRA中由Oracle数据库自动治理的。

 重现日志的成本是以空间和性能来衡量的。空间是数据库写密度的一个因素。一个24小时运行的,以5%的数据块写入作为重现日志的方式必然会导致磁盘整体空间的5%的增长。因为块是以规律的间隔写入的,而不是事务的一部分,所以对性能的影响是可以忽略不计的。

 

  1、要配置FRA,需要设置如下的初始化参数:

  alter system set db_recovery_file_dest='/oracle/flash_recovery_area' scope=both;

  alter system set db_recovery_file_dest_size = 10G scope=both;

 

  2、接下来,我们需要配置归档。再一次,我们需要使用FRA作为我们的归档日志目的地。与传统恢复类似,重现数据库需要归档以向前恢复提交的事务,在重现日志重新存储了希望时间之前的时点之后。

  要最小化配置归档,执行如下的命令,按照顺序:

  

  SQL> startup mount

  ORACLE instance started.

  Database mounted.

  SQL> alter database archivelog;

  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 2

  Next log sequence to archive 4

  Current log sequence 4

 

  3、启用重现数据库

  配置了这些先决条件之后,我们预备好配置重现数据库了。

  首先,我们需要设置重现保持目标。这个初始化参数,以分钟来计算,代表我们可以把数据库返回到多长时间之前。它的值决定了FRA中重现日志的数量和时间段。下面我们的例子将其设置为24小时。要理解这个保持时间段并不是保证是非常重要的。假如FRA需要空间,重现日志将会自动删除目标保持时间点之前的记录。稍后我们会看到,我们保证重现日志的方式在FRA中进行维护。有了保持时间段设置,重现数据库可以激活。

  

  在mount状态下执行如下命令,设置重现保持目标为24小时:

  SQL> alter system set db_flashback_retention_target = 1440 scope=both;

  System altered.

  SQL> alter database flashback on;

  Database altered.

  SQL> alter database open;

  Database altered.

  SQL> select flashback_on from v$database;

  FLASHBACK_ON

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

  YES

 

  4、监控FRA

  SQL>select name,space_limit,space_used, space_reclaimable from v$recovery_file_dest;

 

  5、判定数据库的可重现的时间点

  

   10gR1中,你有两种选择来捕捉你的数据库的PIT:时间戳和系统修改号码(SCN)。这个信息是作为重现操作的一部分要求的。 捕捉到提交的SCN或者稍后的非常重要,而不是数据治理语言操作。Oracle提供了一种比较笨拙的方式来捕捉提交的SCN,通过userenv('commitscn')函数。我们的示例在发生损坏的数据治理语言操作之前捕捉到了这个信息。

  

  select current_scn from v$database;

  CURRENT_SCN

  -----------

   1321065

  or

  select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS')

   "Recover Time" from v$database;

  Recover Time

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

  2006-09-23:20:13:48

  在10gR2中,Oracle通过重新存储点简化了这个过程。一个重新存储点就是一个用户定义的与数据库PIT相关连的名字,可以在时间戳或者SCN中使用。可以认为重新存储点是一个redo历史的参考标记。重新存储点保留在控制文件中,直到重新存储点被删除或者重现日志被删除。第二个例子保证了重现数据库对于恢复是可用的。

  

  create restore point my_restore_point;

  Operation 206 succeeded.

    guarantee flsashback database;(可选)

   注意:重新存储点并不会保证所有的事务都在那个时间点上提交

 

  6、模拟数据库损坏

   模拟数据库损坏

   insert into my_table values (2);

  

   1 row created.

  

   commit;

  

   提交完成

   判定数据库是否由于人为错误导致逻辑损坏。

   select c1, ora_rowscn from my_table;

  

   C1 ORA_ROWSCN

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

   1 1320954

   2 1321231

  注意:在默认情况下,Oracle在时钟级别上检索SCN。当然,时钟当中的所有行都有一样的SCN。激活行级别的SCN检索,可以在CREATE TABLE命令中使用ROWDEPENDENCIES要害字。

    比如:CREATE TABLE MY_TABLE (C1 NUMBER) ROWDEPENDENCIES;

   

  7、检验重现数据库是可能的。  

  判定你可以重现的最早的时间。

  SELECT OLDEST_FLASHBACK_SCN

   ,to_char(OLDEST_FLASHBACK_TIME,'YYYY-MM-DD:HH24:MI:SS')

   "OLDEST_FLASHBACK_TIME"

   FROM V$FLASHBACK_DATABASE_LOG;

  OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI

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

   1319629 2006-09-23:19:51:56

  判定你是否有重新存储点。

  select name, scn, time from v$restore_point;

  NAME SCN TIME

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

  MY_RESTORE_POINT 1321136 23-SEP-06 08.16.24.000000000 PM

 

  8、使用先前创建的重新存储点来重现数据库。

  

  SQL> shutdown immediate;

  Database closed.

  Database dismounted.

  ORACLE instance shut down.

  SQL> startup mount

  ORACLE instance started.

  Database mounted.

  SQL> flashback database to restore point my_restore_point;   #flashback database to timestamp sysdate-15/1440; (当前的系统时间之前的15分钟)

  Flashback complete.

  在警告日志中检查重现数据库消息

  .

  .

  .

  Sat Sep 23 20:38:11 2006

  flashback database to restore point my_restore_point

  Sat Sep 23 20:38:12 2006

  Flashback Restore Start

  Flashback Restore Complete

  Flashback Media Recovery Start

  parallel recovery started with 2 processes

  Sat Sep 23 20:38:14 2006

  Recovery of Online Redo Log: Thread 1 Group 2 Seq 33 Reading mem 0

   Mem# 0 errs 0:

  C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG

  Sat Sep 23 20:38:16 2006

  Incomplete Recovery applied until change 1321137

  Flashback Media Recovery Complete

  Completed: flashback database to restore point my_restore_point

  

   验证你的数据库恢复到你想要的状态

  假如你不满足,你可以再次重现,把数据库向前恢复,直到或者执行了完全恢复:recover database.

 

  9、只读方式打开数据库(如果以resetlogs打开数据库,那么就无法进行完全恢复了),检查数据是否正确。

  SQL> alter database open read only;

  Database altered.

  SQL> select c1, ora_rowscn from my_table;

   C1 ORA_ROWSCN

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

   1 1321002

 

       10、可以重新完全恢复后打开数据库。进行正常的应用:

       SQL>SHUTDOWN IMMEDIATE

       SQL>STARTUP MOUNT;

       SQL>RECOVER DATABASE;

       SQL>ALTER DATABASE OPEN;

       注意:这时候的数据库还是原来正常的数据库。

      

       结论:

  重现数据库将会成为DBA最喜欢的Oracle10g特性之一。无论你是否纠正了用户的错误,只是看看先前的数据库状态,或者在衰退测试之后回到测试环境中,这个特性都是减少恢复时间的最好策略。我们看到这项技术很轻易使用,比传统的恢复更快,并且最好的是,它是免费的!我希望你也会认为重现数据库是可用性体系结构中的一项主要组件。

   

  注意:为了不丢失数据,可以先用flashback恢复到以前的某个restore点(类似于时间点恢复),然后只读方式打开数据库,把表给导出来,然后再回到mount状态,重新做完全恢复,正常打开数据库,把表导入。

 

 ===================================

三、10gflashback recyclebin特性

 

       对被drop表的管理

  1、查看当前回收站被删除的表

  Show recyclebin

  2、查看被删除表的内容:

  Select * from “RECYCLEBIN NAME”;

  3、恢复被drop的表

  Flashback table table_name to before drop;

  Flashback table table_name to before drop rename to new_name;

  4、清空回收站

  Purge table “RECYCLEBIN NAME”;

  Purge tablespace tablespace_name;

  清空所有的回收站(需要sysdba权限)

  Purge recyclebin;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值