sql >> データベース >  >> RDS >> Oracle

コミット後にDBの変更をロールバックするにはどうすればよいですか?

    フラッシュバック 機能。

    1.SCNによるフラッシュバック

    SELECT column_list
    FROM table_name
    AS OF SCN scn_number;
    

    2。タイムスタンプによるフラッシュバック

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

    current_scnとsystimestampを取得するには、クエリ:

    SELECT current_scn, SYSTIMESTAMP
    FROM v$database;
    

    例を見てみましょう:

    テーブルを古い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>
    

    テーブルに4つの行があります

    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>
    

    テーブルが古い状態になり、行が戻ってきました




    1. HerokuPostgreSQLデータベースに接続する際の認証エラー

    2. PHP内からの.sqlファイルのロード

    3. トリガーで挿入値を変更

    4. SQL 改行が機能しない