sql >> Database >  >> RDS >> Oracle

Hoe kan ik mijn DB-wijzigingen terugdraaien na een vastlegging?

Je zou het kunnen doen met Flashback functie.

1.Flashback door SCN

SELECT column_list
FROM table_name
AS OF SCN scn_number;

2.Flashback door TIMESTAMP

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

Om current_scn en systimestamp te krijgen, vraagt ​​u:

SELECT current_scn, SYSTIMESTAMP
FROM v$database;

Laten we een voorbeeld bekijken:

Gebruik FLASHBACK TABLE..TO SCN om de tabel terug te flashen naar de oude scn. clausule.

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>

Ik heb vier rijen in de tabel .

SQL> ALTER TABLE string_ex ENABLE ROW MOVEMENT;

Table altered.

SQL>

Rijbeweging is vereist.

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

Ik heb nu een rij verwijderd en de wijzigingen doorgevoerd.

SQL> FLASHBACK TABLE string_ex TO SCN 13818123201277;

Flashback complete.

Flashback is voltooid

SQL> SELECT * FROM string_ex;

SL_PS_CODE
---------------
AR14ASM0002
AR14SFT0018
AR14SFT0019
AR14SFT0062

SQL>

Ik heb mijn tafel nu in de oude staat en de rij is terug




  1. Geef een kolom alleen weer als deze niet null is

  2. Wat betekent Tabel niet optimaliseren, in plaats daarvan opnieuw maken + analyseren?

  3. Wanneer of waarom een ​​SET DEFINE OFF gebruiken in Oracle Database?

  4. Oracle SQL-afwijking:COUNT(*) versus werkelijke resultatenset