oracle使用小記 刪除恢復

2021-10-10 06:55:42 字數 3459 閱讀 9492

//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...