//oracle誤刪
select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin;
flashback table 『bin$kc/ow/onsdyepme1f5hj8g==$0』 to before drop (rename to ac_event_goal)
flashback table ac_event_goal to before drop (rename to ac_event_goal_t) //閃回原表(重新命名新錶名)
一、delete 資料 誤刪除
1、 刪除資料之後表結構沒有變化
直接使用表閃回,表閃回要求使用者必須要有flash any table許可權
先確定刪除資料的時間(在刪除資料之前的時間就行,不過最好要具體到刪除資料的時間點)
alter table 表名 enable row movement //開啟行移動功能
flashback table 表名 to timestamp to_timestamp(『刪除時間點』,『yyyy-mm-dd hh24:mi:ss』)
//恢復資料到刪除時間點之前的狀態
alter table 表名 disable row movement //關閉行移動功能(一定不能忘記)
2、 刪除資料之後表結構發生了變化
select * from 表名 as of timestamp to_timestamp(『刪除時間點』,『yyyy-mm-dd hh24:mi:ss』)
//找出被刪除的資料
insert into 表名 (select * from 表名 as of timestamp to_timestamp(『刪除時間點』,『yyyy-mm-dd hh24:mi:ss』)); //把刪除的資料重新插回原表,但注意主鍵不要重複
二 、drop命令 刪除表
由於oracle在刪除表時,沒有直接清空表所佔的塊,oracle把這些已刪除的表的資訊放到了乙個虛擬容器「**站」中,而只是對該錶的資料塊做了可以被覆寫的標誌,所以在塊未被重新使用前還可以恢復。
檢視**站中的表
select object_name,original_name,partition_name,type,ts_name,createtime,droptimefrom recyclebin;
可以看到被刪除的表在**站被命名為』bin$0z+2ccjdsjqkx1nsp/re7w==$0』
flashback table 原表名 to before drop (rename to 新錶名) //閃回原表(重新命名新錶名)
或者flashback table 「**站中的表名(如:bin$0z+2ccjdsjqkx1nsp/re7w==$0)」 to before drop (rename to 新錶名) //使用者可能會經常多次建立和刪除同乙個表就需要找到**站的表名閃回相應的表版本
但是用這種方法只是把我們的表給找回來了,我們的索引和約束都沒有回來。所以我們一定要重新建立索引和約束。如果
oracle 閃回功能還可以閃回整個資料庫,使資料庫回到過去某一狀態。
alter database flashback on
flashback database to scn scnno; //使用scn號閃回或者使用時間戳閃回
flashback database to timestamp to_timestamp(『2007-10-25 12:00:00』,『yyyy-mm-dd hh24:mi:ss』);
如果想要不經過**站直接刪除並釋放所佔空間
drop table 表名 purge //此命令相當於truncate+drop 操作,一般不建議這麼做。
手工清除**站中的物件。
prug table 表空間.表名 //清除具體的物件
prug tablespace 表空間 //清除指定的表空間物件
purge tablespace 表空間 user 使用者名稱 //刪除表空間指定使用者下的所有對像
purge recyclebin //刪除**站
purge dba_recyclebin //刪除全體使用者在**站的資料
oracle空間利用原則
使用現有的表空間的未使用空間
如果沒有了空閒空間,則檢查**站,對於**站的物件按照先進先出的原則,對於最先刪除的物件,oracle在空間不足之時會最先從**站刪除以滿足新分配空間的需求
如果**站也沒有物件可以清理,則檢查表空間是否自擴充套件,如果自擴充套件則擴充套件表空間,然後分配新空間
4.如果表空間非自擴充套件,或者已經不能自擴充套件(到達最大限制),則直接報表空間不足錯誤,程式終止
另外還需要注意一種情況,對像所在的表空間要有足夠的空間,不然就算drop掉經過recyclebin由於空間不足oracle會自動刪除的哦(切記)!
三、truncate刪除資料
1、使用閃回特性
因為truncate不是dml語句,是ddl語句,不能使用閃回查詢的方式恢復表資料,這裡介紹一種通過flashback database(閃回整個資料庫)的方式恢復資料的方法。
在11g下,可以在mount和open模式來執行該命令
select status from v$instance; 檢視資料庫模式
alter database open; //或者是mount
alter database flashback on
flashback database to timestamp to_timestamp(『2007-10-25 12:00:00』,『yyyy-mm-dd hh24:mi:ss』);
在執行完flashback database 命令之後,可以使用多種方式修復資料庫:
1). 直接alter database open resetlogs 開啟資料庫,指定scn 或者timestamp 時間點之後產生的資料統統丟失。
2). 先執行alter database open read only 命令以read-only 模式開啟資料庫,檢視恢復後的資料是否滿足要求,如果滿足要求,則通過resetlogs開啟資料庫,否則,重新執行flashback 操作。
3). 先執行alter database open read only 命令以read-only 模式開啟資料庫,然後立刻通過邏輯匯出的方式將誤操作涉及表的資料匯出,再執行recover database 命令以重新應用資料庫產生的redo,將資料庫修復到flashback database 操作前的狀態,然後再通過邏輯匯入的方式,將之前誤操作的表重新匯入,這樣的話對現有資料的影響最小,不會有資料丟失。
這裡演示第二種方法
alter database open read only;
檢視資料是否符合要求不符合繼續flashback database to timestamp to_timestamp
如果符合
startup mount force;
alter database open resetlog;
oracle 刪除恢復
寫道 同事找回時操作的資料庫為oracle 10g 之前刪除方式為delete 不曉得trancate好使不 scn 系統改變號 它的英文全拼為 system change number 它是資料庫中非常重要的乙個資料結構。scn提供了oracle的內部時鐘機制,可被看作邏輯時鐘,這對於恢復操作是至...
Oracle刪除表恢復
恢復當天刪除了表而沒有記住表的名稱 儲存過程如下 create or replace procedure proc databack deletetime in varchar2 as 把當天已經刪除的資訊查詢出來放入游標 cursor mycursor is select object name ...
oracle資料刪除恢復
分為兩種方法 scn和時間戳兩種方法恢復。一 通過scn恢復刪除且已提交的資料 1 獲得當前資料庫的scn號 select current scn from v database 切換到sys使用者或system使用者查詢 查詢到的scn號為 1499223 2 查詢當前scn號之前的scn sel...