• [terry笔记]Flashback


    flashback 闪回,主要功能有两个:闪回查询(flashback query)、闪回恢复(flashback table/database)

    开启闪回flashback功能(归档下才可开启数据库闪回)

    select name,flashback_on from v$database; /*查看flashback是否开启*/
    show parameter db_recovery; /*查看闪回恢复区及大小是否设置*/
    alter system set db_recovery_file_dest_size='2G'; /*先设置闪回恢复区的大小*/
    alter system set db_recovery_file_dest='c:u01fast_recovery_area'; /*再设置闪回恢复区路径*/
    alter system set db_flashback_retention_target = 1440/*设置数据库回退的时间,默认1440分钟为一天时间*/
    alter database flashback on/*开启flashback功能*/

    闪回查询需要设置undo_management=auto(默认即可)
    闪回表需要recycle bin
    闪回数据库需要flashback area

    一、flashback query闪回查询
    1.as of timestamp

    select * from t as of timestamp sysdate-20/1440; /*按时间查询,此查询是查询20分钟前的*/ 

    2.as of scn

    select * from t as of scn 1234567;

    当前scn:

    select dbms_flashback.get_system_change_number from dual;
    select current_scn from v$database;

    其实在oracle内部as of timestamp/scn 最后都是转换为scn进行闪回查询。
    可以通过timestamp_to_scn与scn_to_timestamp进行转换

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

    闪回查询需要保证表的结构没有做过ddl

    二、flashback table闪回表
    如果删除的表含有索引、触发器、约束、物化试图等,需要在恢复表后恢复其完整性。

    flashback table xx.xxx to before drop rename to xxx; /*按照删除闪回不用开启行迁移*/
    
    alter table xxx enable row movement; /*因为闪回表需要改变rowid,所以需要行迁移*/
    select row_movement from user_tables where table_name = 'XXX';
    /*根据scn/timestamp闪回,需要注意其触发器会失效,可以加上选项enable triggers*/
    flashback table xxx to scn 1234567;
    flashback table xxx to timestamp sysdate-x/1440;

    此功能需要开启回收站:

    show parameter recyclebin
    
    select object_name,original_name,type from recyclebin; /*查询回收站中都有哪些对象*/
    SQL> drop table t;
    表已删除。
    
    SQL> select object_name,original_name,type from recyclebin;
    
    OBJECT_NAME                    ORIGINAL_NAME                    TYPE
    ------------------------------ -------------------------------- -------------------------
    BIN$OiJJIiwuTaCJqY+UV8eTWQ==$0 T                                TABLE
    
    SQL> flashback table t to before drop;
    flashback table "BIN$OiJJIiwuTaCJqY+UV8eTWQ==$0" to before drop;
    闪回完成。

    三、flashback database闪回数据库
    闪回数据库无法恢复被删除的数据文件,控制文件不可以被重建,不支持shrink后的恢复。
    需要设置db_recovery_file_dest(_size),并且会在这里面产生flashback logs,需要开启force logging

    select flashback_on,force_logging from v$database;
    alter database flashback on;
    alter database force logging;
    show parameter db_flashback_retention_target /*希望能恢复到多长时间以内,默认1440分钟*/
    SQL> select current_scn from v$database;
    
    CURRENT_SCN
    -----------
        1592391
    
    SQL> drop table t purge;
    表已删除。
    
    SQL> shutdown immediate
    ORA-01031: 权限不足
    SQL> conn / as sysdba
    已连接。
    SQL> shutdown immediate
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    
    SQL> startup mount;
    ORACLE 例程已经启动。
    Total System Global Area  535662592 bytes
    Fixed Size                  1385840 bytes
    Variable Size             352324240 bytes
    Database Buffers          176160768 bytes
    Redo Buffers                5791744 bytes
    数据库装载完毕。
    
    SQL> flashback database to scn 1592391;
    闪回完成。
    
    SQL> alter database open resetlogs;
    数据库已更改。
    /*open resetlogs会丢失flashback的时间点到目前的数据,可以用read only的方式打开数据库,用逻辑导出误操作的表,再执行recover database重新应用redo,将数据库恢复到flashback database之前状态,然后逻辑导入。*/
    alter database open read only;
  • 相关阅读:
    .NET Core 2.0 获取完整的URL
    浅谈实际分辨率与逻辑分辨率实现像素与尺寸的准确转换
    mysql查询当月数据
    Win7无法将图标(Chrome谷歌浏览器更新后无法锁定也适用)锁定到任务栏解决办法
    powerdesigner低版本打开高版本方式为只读导致无法保存PD只读read-only-mode
    Discuz论坛UCenter无法登录问题修复方法完美解决无限刷新问题
    mob免费短信验证码安卓SDK调用方法
    ANDROID_HOME is not set and "android" command not in your PATH解决
    C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序
    C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
  • 原文地址:https://www.cnblogs.com/kkterry/p/3312110.html
Copyright © 2020-2023  润新知