2014-12-05 3 views
4

Я сделал обновление БД без использования предложения where и совершил операцию без какой-либо резервной копии. Все строки в таблице обновляются. Есть ли способ отменить изменения?Как откат моих изменений БД после фиксации?

DB - это Oracle SQL. Пожалуйста помоги.

+0

Вы не можете откатить, что уже совершил – Richa

+0

попробуйте использовать ретроспективный кадр https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_9012.htm – Exhausted

+0

Почему у вас есть теги «sql-server» и «oracle» Gether. Мой ответ специфичен для базы данных Oracle. –

ответ

19

Вы можете сделать это, используя Flashback особенность.

1.Flashback по SCN

SELECT column_list 
FROM table_name 
AS OF SCN scn_number; 

2.Flashback по 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; 

Давайте посмотрим exampl e:

Чтобы воспроизвести стол со старым 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. 

Flashback завершена

SQL> SELECT * FROM string_ex; 

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

SQL> 

теперь у меня есть свой стол в старом состоянии и ряду назад