恢復Oracle資料庫誤刪除資料的語句
有很多朋友都遇到過在運算元據庫時誤刪除某些重要資料的情況,如果資料庫沒有備份而且資料有十分重要的情況下怎麼做才能找回誤刪除的資料呢?我在這裡為大家介紹幾種誤刪除資料庫中重要資料的恢復方法(不考慮全庫備份和利用歸檔日誌)
第一種資料恢復方法是利用oracle提供的閃回方法進行資料恢復,適用於delete刪除(一條記錄)方式:
首先需要知道是什麼時間進行的刪除操作,如果不能確定具體時間點則選擇儘量準確的刪除資料前的時間。然後利用
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'));
語句就可以將恢復出來的資料插入原表中(注意要保證主鍵不重複)。
另一種方法可以透過閃回整個表來恢復誤刪除的資料,但僅適用於表結構沒有發生改變且使用者有flash any table許可權的情況下,語句如下:
·alter table 表名 enable row movement
·flashback table 表名 to timestamp to_timestamp(刪除時間點',' frombyte yyyy-mm-dd hh24:mi:ss')
第二種資料恢復方法的原理是因為oracle資料庫在刪除表時會將刪除資訊存放於某虛擬“回收站”中而非直接清空,再此種狀態下資料庫標記該表的資料庫為“可以複寫”,所以在該塊未被重新使用前依然可以恢復資料。該方法多用於drop刪除。
首先需要查詢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資料庫的閃回功能可以將資料庫恢復到過去某一狀態,語法如下:
SQL>alter database flashback on
SQL>flashback database to scn SCNNO;
SQL>flashback database to timestamp to_timestamp('frombyte 2007-2-12 12:00:00','yyyy-mm-dd hh24:mi:ss');
介紹到這裡有朋友發現問題了,oracle資料庫提供了可以恢復資料的保障機制,但也不可避免的佔用了大量空間,使用drop一個表或者delete資料後空間並不能自動進行回收,如果確定需要刪除的資料又不想無謂的佔用空間該如何操作呢?我們可以使用以下兩種方式:
1、採用truncate方式進行截斷。(但不能進行資料回恢復了)
2、在drop時加上purge選項:drop table 表名 purge
該選項也可以透過刪除recyclebin區域來永久性刪除表 ,原始刪除表drop table emp cascade constraints
purge table emp;
刪除當前使用者的回收站:
purge recyclebin;
刪除全體使用者在回收站的資料:
purge dba_recyclebin
第一種資料恢復方法是利用oracle提供的閃回方法進行資料恢復,適用於delete刪除(一條記錄)方式:
首先需要知道是什麼時間進行的刪除操作,如果不能確定具體時間點則選擇儘量準確的刪除資料前的時間。然後利用
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'));
語句就可以將恢復出來的資料插入原表中(注意要保證主鍵不重複)。
另一種方法可以透過閃回整個表來恢復誤刪除的資料,但僅適用於表結構沒有發生改變且使用者有flash any table許可權的情況下,語句如下:
·alter table 表名 enable row movement
·flashback table 表名 to timestamp to_timestamp(刪除時間點',' frombyte yyyy-mm-dd hh24:mi:ss')
第二種資料恢復方法的原理是因為oracle資料庫在刪除表時會將刪除資訊存放於某虛擬“回收站”中而非直接清空,再此種狀態下資料庫標記該表的資料庫為“可以複寫”,所以在該塊未被重新使用前依然可以恢復資料。該方法多用於drop刪除。
首先需要查詢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資料庫的閃回功能可以將資料庫恢復到過去某一狀態,語法如下:
SQL>alter database flashback on
SQL>flashback database to scn SCNNO;
SQL>flashback database to timestamp to_timestamp('frombyte 2007-2-12 12:00:00','yyyy-mm-dd hh24:mi:ss');
介紹到這裡有朋友發現問題了,oracle資料庫提供了可以恢復資料的保障機制,但也不可避免的佔用了大量空間,使用drop一個表或者delete資料後空間並不能自動進行回收,如果確定需要刪除的資料又不想無謂的佔用空間該如何操作呢?我們可以使用以下兩種方式:
1、採用truncate方式進行截斷。(但不能進行資料回恢復了)
2、在drop時加上purge選項:drop table 表名 purge
該選項也可以透過刪除recyclebin區域來永久性刪除表 ,原始刪除表drop table emp cascade constraints
purge table emp;
刪除當前使用者的回收站:
purge recyclebin;
刪除全體使用者在回收站的資料:
purge dba_recyclebin
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31380569/viewspace-2154294/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- 【資料庫資料恢復】HP-UX系統ORACLE資料庫被誤刪除的資料恢復資料庫資料恢復UXOracle
- [Oracle]Oracle資料庫資料被修改或者刪除恢復資料Oracle資料庫
- Oracle恢復誤刪資料Oracle
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- Sybase SQL Anywhere(ASA)資料庫恢復,ASA資料恢復,資料誤刪除恢復工具ReadASADBSQL資料庫資料恢復
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- 【資料庫資料恢復】Oracle資料庫誤truncate table的資料恢復案例資料庫資料恢復Oracle
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- 【NetApp資料恢復案例】針對NetApp誤刪除資料的恢復APP資料恢復
- 【資料庫資料恢復】oracle資料庫誤truncate table怎麼恢復資料?資料庫資料恢復Oracle
- 【儲存資料恢復案例】Netapp誤操作刪除lun的資料恢復資料恢復APP
- 【儲存資料恢復】NetApp儲存誤刪除的資料恢復案例資料恢復APP
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- Mongodb資料庫誤刪後的恢復MongoDB資料庫
- 誤刪除資料了怎麼辦?小編交易誤刪除資料的恢復方法
- 【北亞資料恢復】輸入錯誤命令導致MySQL資料庫資料被刪除的資料恢復案例資料恢復MySql資料庫
- 【伺服器資料恢復】LINUX誤刪除、格式化的資料恢復伺服器資料恢復Linux
- 【伺服器資料恢復】NetApp儲存誤刪除的資料恢復案例伺服器資料恢復APP
- 伺服器資料恢復-LINUX誤刪除/格式化資料的資料恢復方案伺服器資料恢復Linux
- 【伺服器資料恢復】LINUX誤刪除、誤格式化怎麼恢復資料?伺服器資料恢復Linux
- 【儲存資料恢復】HP EVA儲存誤刪除VDISK的資料恢復案例資料恢復
- 【伺服器資料恢復】EMC Unity儲存誤刪除的資料恢復案例伺服器資料恢復Unity
- 【伺服器資料恢復】EMC Isilon儲存誤刪除的資料恢復案例伺服器資料恢復
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- 【伺服器資料恢復】伺服器誤刪除lun如何恢復資料?伺服器資料恢復
- 伺服器資料恢復—EMC儲存資料卷被誤刪除如何恢復資料?伺服器資料恢復
- mysql誤刪資料恢復MySql資料恢復
- 【北亞資料庫資料恢復】使用delete未加where子句刪除全表資料的Mysql資料庫資料恢復資料庫資料恢復deleteMySql
- 伺服器資料恢復—NTFS誤操作刪除/格式化的資料恢復案例伺服器資料恢復
- Mysql資料庫delete刪除後資料恢復報告MySql資料庫delete資料恢復
- 【伺服器資料恢復】伺服器誤刪除卷怎麼恢復資料伺服器資料恢復
- 【虛擬化資料恢復】KVM虛擬機器誤刪除資料恢復案例資料恢復虛擬機