要達到刪除資料,有以下幾種方式都可以:
1、delete
2、drop乙個表
3、truncate乙個表
重要的不是怎麼刪除乙個表,而是誤刪除資料後怎麼立即恢復(
不考慮全庫備份和利用歸檔
日誌)。
對於delete方法,可以利用oracle提供的閃回方法
,如果在刪除資料後還沒做大量的操作(只要保證被刪除資料的塊沒被覆寫),就可以利用閃回方式直接找回刪除的資料:
a、確定刪除資料的時間(在刪除資料之前的時間就行,
不過最好是刪除資料的時間點)
b、用以下語句找出刪除的資料:
select * from 表名 as
of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss')
c、把刪除的資料重新插入原表
:insert into 表名 (select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss'));注意要保證主鍵不重複。
以上方式也可以給where條件來。
對於delete方式的誤刪除。還可以直接使用閃回整個表的方式來恢復資料。(此種方式除要保證上面的閃回前提條件外,還要在刪除資料後表結構沒有發生改變)
表閃回要求使用者必須要有flash any table許可權,首先,必須對錶進行下以下操作:
alter table 表名 enable row movement;
執行以下語句:flashback table 表名 to timestamp to_timestamp(刪除時間點','yyyy-mm-dd hh24:mi:ss');
對於誤drop表的情況,也可以直接用閃回方法恢復資料(要保證被刪除資料的塊沒被覆寫)。
由於oracle在刪除表時,沒有直接清空表所佔的塊,oracle把這些已刪除的表的資訊放到了乙個虛擬容器「**站」中,而只是對該錶的資料塊做了可以被覆寫的標誌,所以在塊未被重新使用前還可以恢復。
可能查詢這個「**站」或者查詢user_table檢視來查詢已被刪除的表:
select table_name,dropped from user_tables
select object_name,original_name,type,droptime from user_recyclebin
在以上資訊中,表名都是被重新命名過的,欄位table_name或者object_name就是刪除後在**站中的存放表名
如果還能記住表名,則可以用下面語句直接恢復:
flashback table 原表名 to before drop
如果記不住了,也可以直接使用**站的表名進行恢復,然後再重新命名,參照以下語句:
flashback table "**站中的表名(如:bin$dsbdfd4rdfdfdfegdfsf==$0)" to before drop rename to 新錶名
oracle提供以上機制保證了安全操作,但同時也代來了另外乙個問題,就是空間占用,由於以上機制的執行,使用drop乙個表或者delete資料後,空間不會自動**,對於一些確定不使用的表,刪除時要同時**空間,可以有以下2種方式:
1、採用truncate方式進行截斷。(但不能進行資料回恢復了)
2、在drop時加上purge選項:drop table 表名 purge
該選項還有以下用途:
也可以通過刪除recyclebin區域來永久性刪除表 ,原始刪除表drop table emp cascade constraints
purge table emp;
刪除當前使用者的**站:
purge recyclebin;
刪除全體使用者在**站的資料:
purge dba_recyclebin
oracle的閃回功能除了以上基本功能外,還可以閃回整個資料庫:
使用資料庫閃回功能,可以使資料庫回到過去某一狀態, 語法如下:
sql>alter database flashback on
sql>flashback database to scn scnno;
sql>flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-mm-dd hh24:mi:ss');
oracle刪除資料後的恢復
要達到刪除資料,有以下幾種方式都可以 a 確定刪除資料的時間 在刪除資料之前的時間就行,不過最好是刪除資料的時間點 b 用以下語句找出刪除的資料 select from 表名 as of timestamp to timestamp 刪除時間點 yyyy mm dd hh24 mi ss c 把刪除...
oracle恢復已刪除資料
刪除表後,可以採用如下操作 在 user recyclebin中找到最近操作過的表名稱,然後用閃回 只能用於10g及以上版本 flash back table table name to before drop 如果是刪了或修改裡面的資料,可以先建立乙個快表將刪除修改之前狀態的資料找回到這個表中 c...
oracle恢復刪除資料(誤刪)
第一種 1.開啟flash儲存的許可權 alter table tablename enable row movement 2.把錶還原到指定時間點 flashback table tablename to timestamp to timestamp 2011 02 28 10 40 00 yyy...