【问题标题】:Roll back Update or delete data Through Flashback query回滚 通过闪回查询更新或删除数据
【发布时间】:2014-10-28 11:41:25
【问题描述】:

我已经做了一些更改并提交了,但我想通过闪回查询回滚这些更改。

你能帮我怎么做吗?

我使用的是 Oracle 11g 版本。

从下表中我删除了数据..现在我想恢复这些记录..

客户, 地址, 员工, 对齐

非常感谢您的帮助。

苏尼莎。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    有两件事,

    1.SCN闪回

    SELECT column_list
    FROM table_name
    AS OF SCN scn_number;
    

    2.按TIMESTAMP闪回

    SELECT column_list
    FROM table_name
    AS OF TIMESTAMP TO_TIMESTAMP('the timestamp value');
    

    要获取 current_scn 和 systimestamp,查询:

    SELECT current_scn, SYSTIMESTAMP
    FROM v$database;
    

    更新 OP 要求的示例。

    要将表闪回到旧的 scn,请使用 FLASHBACK TABLE..TO SCN 子句。

    SQL> DROP TABLE string_ex PURGE;
    
    Table dropped.
    
    SQL> CREATE TABLE string_ex (sl_ps_code VARCHAR2(20) );
    
    Table created.
    
    SQL> INSERT INTO string_ex (sl_ps_code) VALUES ('AR14ASM0002');
    
    1 row created.
    
    SQL> INSERT INTO string_ex (sl_ps_code) VALUES ('AR14SFT0018');
    
    1 row created.
    
    SQL> INSERT INTO string_ex (sl_ps_code) VALUES ('AR14SFT0019');
    
    1 row created.
    
    SQL> INSERT INTO string_ex (sl_ps_code) VALUES ('AR14SFT0062');
    
    1 row created.
    
    SQL> COMMIT;
    
    Commit complete.
    
    SQL> SELECT current_scn, SYSTIMESTAMP FROM v$database;
    
             CURRENT_SCN SYSTIMESTAMP
    -------------------- --------------------------------------------
          13818123201277 29-OCT-14 03.02.17.419000 PM +05:30
    
    SQL> SELECT current_scn, SYSTIMESTAMP FROM v$database;
    
             CURRENT_SCN SYSTIMESTAMP
    -------------------- --------------------------------------------
          13818123201280 29-OCT-14 03.02.22.785000 PM +05:30
    
    SQL> SELECT current_scn, SYSTIMESTAMP FROM v$database;
    
             CURRENT_SCN SYSTIMESTAMP
    -------------------- --------------------------------------------
          13818123201282 29-OCT-14 03.02.26.781000 PM +05:30
    
    SQL> SELECT * FROM string_ex;
    
    SL_PS_CODE
    ---------------
    AR14ASM0002
    AR14SFT0018
    AR14SFT0019
    AR14SFT0062
    
    SQL>
    

    表格中有四行

    SQL> ALTER TABLE string_ex ENABLE ROW MOVEMENT;
    
    Table altered.
    
    SQL>
    

    需要行移动。

    SQL> DELETE FROM string_ex WHERE ROWNUM =1;
    
    1 row deleted.
    
    SQL>
    SQL> COMMIT;
    
    Commit complete.
    
    SQL>
    SQL> SELECT * FROM string_ex;
    
    SL_PS_CODE
    ---------------
    AR14SFT0018
    AR14SFT0019
    AR14SFT0062
    

    我现在删除了一行并提交了更改。

    SQL> FLASHBACK TABLE string_ex TO SCN 13818123201277;
    
    Flashback complete.
    

    闪回完成

    SQL> SELECT * FROM string_ex;
    
    SL_PS_CODE
    ---------------
    AR14ASM0002
    AR14SFT0018
    AR14SFT0019
    AR14SFT0062
    
    SQL>
    

    我的表现在恢复到旧状态,并且行又回来了

    【讨论】:

    • 但这只会给出计数..以及如何恢复这些更改..非常感谢您的帮助
    • 我已经更新了我的答案。 FLASHBACK TABLE..TO SCN 是您需要的子句。查看答案。
    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多