|
恢復(fù)當(dāng)天刪除了表而沒(méi)有記住表的名稱
存儲(chǔ)過(guò)程如下:
create or replace procedure proc_databack (deletetime in varchar2) as --把當(dāng)天已經(jīng)刪除的信息查詢出來(lái)放入游標(biāo) 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; --構(gòu)建恢復(fù)語(yǔ)句 vflash_back:='flashback table "'||temp_emp||'" to before drop'; --循環(huán)恢復(fù)被刪除的表,直到全部恢復(fù)完成 execute immediate vflash_back; end loop; close mycursor; end; --調(diào)用存儲(chǔ)過(guò)程 --比如今天是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 --查找指定時(shí)間點(diǎn)前的數(shù)據(jù) 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 --恢復(fù)指定時(shí)間點(diǎn)的前delete數(shù)據(jù)(將刪除恢復(fù)時(shí)間點(diǎn)后面的數(shù)據(jù)) alter table xcp enable row movement;--啟動(dòng)的行移動(dòng)功能 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 --恢復(fù)指定時(shí)間點(diǎn)的前delete數(shù)據(jù),并保留恢復(fù)時(shí)間點(diǎn)后面的數(shù)據(jù) 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;--臨時(shí)表 alter table xcp enable row movement;--啟動(dòng)的行移動(dòng)功能 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 --將臨時(shí)表的數(shù)據(jù)再插入到源表 select count(1) from xcp;--22002 2.刪除閃回[10g+] 刪除閃回為刪除oracle 10G提供了一個(gè)數(shù)據(jù)庫(kù)安全機(jī)制,當(dāng)用戶刪除一個(gè)表時(shí),oracle 10G會(huì)將該表放到回收站中,回收站中的對(duì)象一直會(huì)保留,直到用戶決定永久刪除它們或出現(xiàn)表空間的空間不足時(shí)才會(huì)被刪除?;厥照臼且粋€(gè)虛擬容器,用于存儲(chǔ)所有被刪除的對(duì)象。數(shù)據(jù)字典user_tables中的列dropped表示被刪除的表,查詢方法如下: select table_name,dropped from user_tables; --設(shè)置數(shù)據(jù)庫(kù)是否啟用回收站 alert session set recyclebin = off; --查詢回收站對(duì)象 select * from recyclebin;
select * from user_recyclebin;
select * from dba_recyclebin; drop table xcp; select count(1) from xcp;--0 --恢復(fù)drop的表 flashback table xcp to before drop; select count(1) from xcp;--22001 如果不知道原表名,可以直接使用回收站中的名稱進(jìn)行閃回.. flashback table "BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop; 在回收的同時(shí)可以修改表名flashback table "
BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop rename to xcp1; --真正刪除一個(gè)表,而不進(jìn)入回收站,可以在刪除表時(shí)增加purge選項(xiàng) drop table xcp1 purge; --也可以從回收站永久性刪除表 purge table xcp1; --刪除當(dāng)前用戶回收站 purge recyclebin --刪除全體用戶在回收站的資源 purge dba_resyclebin 3.數(shù)據(jù)庫(kù)閃口 [10g+] 使用數(shù)據(jù)庫(kù)閃回功能,可以使數(shù)據(jù)庫(kù)回到過(guò)去某一狀態(tài),語(yǔ)法如下: 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'); |
|
|