Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да върна промените в моята база данни след ангажимент?

Можете да го направите с помощта на ретроспекция функция.

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;

Да видим пример:

За да върнете таблицата към стария 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>

Сега таблицата ми е в старо състояние и редът е обратно




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Име на SQL колона, същото като име на променлива PL/SQL - Как може да се направи това в оператор select?

  2. Върната стойност на oci_parse

  3. Как да видите съдържанието на Check Constraint на Oracle

  4. Oracle .NET грешка - Грешен брой или тип аргументи

  5. Външни таблици на Oracle