广

oracle数据库

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

    Oracle数据库备份与恢复(5):Flashback

    2018-04-16 10:56:38 次阅读 稿源:互联网
    广告
    全网推广平台,软文发布

       Flashback在开发环境(有时生产环境的特殊情况下)是很有用的一个工具。

        5.1 9i Flashback 简介

        5.1.1  原理

        当数据  update  或  delete  时,原来的数据会保存在  undo  表空间中,保存的最少时间是 UNDO_RETENTION.实际的保存时间与 undo表空间的大小和数据更改的繁忙程度相关。 UNDO_RETENTION 的参数(单位为秒)指定 Oracle保存用于 flashback查询的 undo映像 的时间。一般你可以将这个值设为一整天(864000秒),这样你就能看到前一天全天的映像。 当然,你的在线 undo日志必须足够大,大到足以能保存一整天的 undo日志数据,对于繁忙的 Oracle系统,这个数值可以达到很大。

        5.1.2  一些限制

        服务器必须配置成使用自动 undo管理。

        在使用 Flashback查询时不能使用 DDL或者 DML.

        Flashback 不取消 DDL操作,例如 DROP命令。 数据库管理员做一些必要的设置之后,一般用户才能使用 Flashback查询功能:

        SQL> ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO

        SQL> ALTER SYSTEM SET UNDO_RETENTION=86400

        SQL> GRANT EXECUTE ON DBMS_FLASHBACK TO USERNAME;

        5.1.3  获得SCN或时间点

        在 Flashback 时,可以尝试多个 SCN,获取最佳值。

        如果能得知具体时间,那么可以获得准确的数据闪回。

        SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'; SQL> select sysdate from v$database;

        捕捉提交的 SCN:  //  不知为什么,两种方法获得的 SCN不一样

        SQL> select dbms_flashback.get_system_change_number scn from dual;

        SQL> select max(ktuxescnw * power(2,32) + ktuxescnb) SCN from x$ktuxe;

        5.1.4  启用或禁用flashback查询

        使用系统改变数(SCN)或者真实时间来指定 flashback 的时间点来获取数据映象。

        方法一:SQL> select * from [TABLE] as of scn 129292;

        SQL> select * from [TABLE] as of timestamp to_timestamp('时间', ‘时间格式');

        SQL>  select  *  from  saflog  as  of  timestamp  to_timestamp('2007-12-18  08:40:00','YYYY-MM-DD HH24:MI:SS');

        方法二:启用:

        SQL> exec dbms_flashback.enable_at_system_change_number(112112);

        SQL> exec dbms_Flashback.enable_at_time('28-AUG-02 11:00:00');启用后看到的只是闪回的结果,实际上并未恢复数据。且闪回状态下不能做DML操作。可以先恢复到一个临时表中。见示例。

        禁用:SQL> execute dbms_flashback.disable();

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告
    广告