Oracle刪除表恢復

2021-06-19 05:15:58 字數 3761 閱讀 7120

恢復當天刪除了表而沒有記住表的名稱

儲存過程如下:   

create or replace procedure proc_databack (deletetime in varchar2)   

as  

--把當天已經刪除的資訊查詢出來放入游標   

cursor mycursor is(select  object_name   from recyclebin  where droptime like deletetime);   

temp_emp    varchar2(2000);   

vflash_back   varchar2(2000);   

begin  

open mycursor;   

loop   

fetch mycursor  into temp_emp;   

exit when mycursor%notfound;   

--構建恢復語句   

vflash_back:='flashback table "'||temp_emp||'"  to  before drop';   

--迴圈恢復被刪除的表,直到全部恢復完成   

execute immediate vflash_back;   

end loop;   

close mycursor;   

end;   

--呼叫儲存過程   

--比如今天是2011-12-02,那麼寫法如下:   

/*   

declare  

time varchar2(20);   

begin  

time:='2011-12-02%';   

proc_databack (time);   

end;   

*/ 1.

表查詢閃回

create table xcp as (select * from b_za_bzdzkxx);

select * from xcp;

select count(1) from xcp;--22001

select count(1) from xcp t where t.dzbh like '510521%';--7011

delete from xcp t where t.dzbh like '510521%';

select count(1) from xcp;--14990

--查詢指定時間點前

的資料select count(1) from xcp 

as of timestamp

to_timestamp('2011-12-23 10:49:30','yyyy-mm-dd hh24:mi:ss');--

22001

select * from xcp for update;--新增一條記錄

select count(1) from xcp;--14991

--恢復指定時間點的前delete資料(將刪除恢復時間點後面的資料)

alter table xcp enable row movement;--啟動的行移動功能

flashback 

table xcp 

to timestamp 

to_timestamp('2011-12-23 10:49:30,'yyyy-mm-dd hh24:mi:ss');

select count(1) from xcp;--22001

--恢復指定時間點的前delete資料,並保留恢復時間點後面的資料

create table xcp2 as (select * from xcp t where t.createdtime>to_timestamp('2011-12-23 10:49:30','yyyy-mm-dd hh24:mi:ss'));

select * from xcp2;--臨時表

alter table xcp enable row movement;--啟動的行移動功能

flashback 

table xcp 

to timestamp 

to_timestamp('2011-12-23 10:49:30,'yyyy-mm-dd hh24:mi:ss');

select count(1) from xcp;--22001

insert into xcp select * from xcp2 --將臨時表的資料再插入到源表

select count(1) from xcp;--22002

2.刪除閃回[10g+]

刪除閃回為刪除oracle 10g提供了乙個資料庫安全機制,當使用者刪除乙個表時,oracle 10g會將該錶放到**站中,**站中的物件一直會保留,直到使用者決定永久刪除它們或出現表空間的空間不足時才會被刪除。**站是乙個虛擬容器,用於儲存所有被刪除的物件。資料字典user_tables中的列dropped表示被刪除的表,查詢方法如下:

select table_name,dropped from user_tables;

--設定資料庫是否啟用**站

alert session set recyclebin = off;

--查詢**站物件

select * from recyclebin;

select * from user_recyclebin;

select * from dba_recyclebin;

drop table xcp;

select count(1) from xcp;--0

--恢復drop的表

flashback 

table xcp 

to before drop;

select count(1) from xcp;--22001 

如果不知道原表名,可以直接使用**站中的名稱進行閃回..

flashback table "bin$jixyauo4r+u3qnvfqk/kiw==$0" to before drop;

在**的同時可以修改表名

flashback table "

bin$jixyauo4r+u3qnvfqk/kiw==$0

" to before drop rename to xcp1;

--真正刪除乙個表,而不進入**站,可以在刪除表時增加purge選項

drop table xcp1 purge;

--也可以從**站永久性刪除表

purge table xcp1;

--刪除當前使用者**站

purge recyclebin

--刪除全體使用者在**站的資源

purge dba_resyclebin

3.資料庫閃口 

[10g+]

使用資料庫閃回功能,可以使資料庫回到過去某一狀態,語法如下:

sql: 

alter database flashback on;

sql: 

flashback database to scn 46963;

sql: 

flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-mm-dd hh24:mi:ss'); 

**:

Oracle 恢復刪除的表

select from recyclebin flashback table t bas agent info to before drop 先查詢,在恢復指定的表 一 表的恢復 對誤刪的表,只要沒有使用purge永久刪除選項,那麼從flash back區恢復回來希望是挺大的。一般步驟有 1 從fl...

oracle 刪除表以及恢復

1 刪除表 drop table hr.int admin emp 如果被刪除的表包含被其他表外來鍵引用的主鍵,則要刪除其他表的外來鍵 drop table hr.admin emp cascade constraints 刪除表後立即釋放空間 drop table hr.admin emp pur...

oracle 恢復已刪除的表

oracle誤刪資料得恢復辦法,視回滾段大小,只能恢復三個小時得資料.恢復到某一時間點 資料操作時間點 只適用於delete,update,insert等操作,可以恢復,對於truncate,drop等ddl操作無法恢復 drop或trancate表後只能用資料庫恢復實現 create table ...