sql >> Databasteknik >  >> RDS >> Oracle

Återställ en genomförd transaktion

Du kan inte återställa det som redan har begåtts. Vad du kan göra, i den här speciella situationen, som ett av de snabbaste alternativen, är att skicka en flashback-fråga mot en tabell som du har tagit bort rad(er) från och infoga dem tillbaka. Här är ett enkelt exempel:

Obs :Framgången för den här åtgärden beror på värdet (standard 900 sekunder) för undo_retention parameter - tidsperiod (kan reduceras automatiskt) under vilken information om ångra bevaras i ångra tabellutrymmet.

/* our test table */
create table test_tb(
   col number
);
/* populate test table with some sample data */
insert into test_tb(col)
   select level
     from dual
  connect by level <= 2;

select * from test_tb;

COL
----------
         1
         2
/* delete everything from the test table */    
delete from test_tb;

select * from test_tb;

no rows selected

Infoga borttagna rader bakåt:

/* flashback query to see contents of the test table 
  as of specific point in time in the past */ 
select *                                   /* specify past time */
  from test_tb as of timestamp timestamp '2013-11-08 10:54:00'

COL
----------
         1
         2
/* insert deleted rows */
insert into test_tb
   select *                                 /* specify past time */  
    from test_tb as of timestamp timestamp '2013-11-08 10:54:00'
   minus
   select *
     from test_tb


 select *
   from test_tb;

  COL
  ----------
          1
          2


  1. Finns/finns inte:'välj 1' kontra 'välj fält'

  2. Skapa en relation i SQL Server 2017

  3. Hur kan jag ändra en primärnyckelbegränsning med SQL-syntax?

  4. skickar tabell- och kolumnnamn dynamiskt med bindningsvariabler