• 使用闪回查询找到误删除的数据


    在oracle10G以后出现的闪回特性,可以让我们在一些情况下方便的找回我们错误删除的数据。

    1.undo_retention参数默认900秒,很多时候我们需要调整这个参数如

    alter system set undo_retention=18000 sid='*'
    

     需要注意的是如果RAC环境中,这样写会造成其他的节点挂起,需要使用下面的办法

    alter system set undo_retention=18000 sid='RACDB1';
    alter system set undo_retention=18000 sid='RACDB2';
    

    调大这个参数会增加undo表空间的扩展,大家需要注意

    2.演示找回错误删除的记录(注意,数据库必须处于归档模式下,非归档不能使用)

    --1.创建测试用户
    create user usr1 identified by usr1 default tablespace app1;
    
    --2.创建测试表
    conn usr1/usr1
    create table test (id int,name char(10));
    
    --3.创建测试数据
    insert into test(1,'test1');
    insert into test(2,'test2');
    commit;  ---提交写入redo log file
    conn sys/oracle
    alter system switch logfile; --手工切换日志,写入归档日志,实际中如果得到条件会自动触发
    

     模式删除操作,usr1用户的

    delete from test where id=1;
    
    --这里需要手工触发归档,实际中不需要,因为其他操作可能触发
    conn sys/oracle
    alter system switch logfile;
    

     进行恢复操作

    --1.首先查询归档日志的scn号
    select name,first_change#,first_time from v$archived_log order by 3 desc
    /opt/oracle/oradata/orcl/archive1/orcl_1_7_810405035.dbf	1733071	2013-3-20 16:16:21
    /opt/oracle/oradata/orcl/archive1/orcl_1_6_810405035.dbf	1731283	2013-3-20 15:52:51
    /opt/oracle/oradata/orcl/archive1/orcl_1_5_810405035.dbf	1731279	2013-3-20 15:52:47
    
    --2.查询当前的SCN号
     select dbms_flashback.get_system_change_number from dual;  --1734414

      --3.尝试使用闪回查询
         select * from test as of scn 1733071;看看是否存在删除的数据
          select * from test as of scn &scn;输入不同的SCN号来检查数据
        发现1733071 时有数据,创建临时恢复数据表进行操作
        create table test_recov as select * from test as of scn 1733071; 
     

     其实drop table也可以找回数据的,但是我还没有试验成功,后续会补充上。

    除了上面使用闪回的方式直接找到数据外,另外还有一种办法就是使用不完全恢复,但是这种方式需要有一个测试机器,把数据恢复到测试机器上然后进行数据操作。
    具体方式就是使用logminer来获取scn号。原理是通过logmnr来获取归档日志中的信息,这里可以获取完整的信息,包括当时使用的语句,操作人信息等,而这些信息是使用v$archived_log所不能直接获取到的,后面我会专门介绍logminer的使用。

  • 相关阅读:
    HDU 5087 (线性DP+次大LIS)
    POJ 1064 (二分)
    Codeforces 176B (线性DP+字符串)
    POJ 3352 (边双连通分量)
    Codeforces 55D (数位DP+离散化+数论)
    POJ 2117 (割点+连通分量)
    POJ 1523 (割点+连通分量)
    POJ 3661 (线性DP)
    POJ 2955 (区间DP)
    LightOJ 1422 (区间DP)
  • 原文地址:https://www.cnblogs.com/tippoint/p/2971517.html
Copyright © 2020-2023  润新知