本篇文章給大家帶來了關于oracle的相關知識,其中主要介紹了關于誤刪oracle數據庫中的數據,在不考慮全庫備份和利用歸檔日志情況,怎樣快速恢復數據的相關問題,下面一起來看一下,希望對大家有幫助。
推薦教程:《oracle》
誤刪oracle數據庫中的數據,在不考慮全庫備份和利用歸檔日志情況,怎樣快速恢復數據呢?
下面介紹3種方法。
1. 利用oracle提供的閃回方法進行數據恢復,適用于delete刪除方式
首先獲取刪除數據的時間點:
select * from v$sql where sql_text like '%table_name%' ; 1
根據結果中的sql_text內容,找到delete執行語句對應的刪除時間點,執行下面語句查詢出刪除的數據。
select * from table_name as of timestamp to_timestamp(‘刪除時間點’,‘yyyy-mm-dd hh24:mi:ss’) where (刪除時的條件) 12
檢查數據無誤后,執行下面操作,將數據插回原表中。注意主鍵不重復
insert into table_name select * from from table_name as of timestamp to_timestamp(‘刪除時間點’,‘yyyy-mm-dd hh24:mi:ss’) where (刪除時的條件) 123
2. 利用oracle虛擬回收站功能
原理是因為oracle數據庫在刪除表時會將刪除信息存放于某虛擬回收站中而非直接清空,在此種狀態下數據庫標記該表的數據庫為可以復寫,所以在該塊未被重新使用前依然可以恢復數據。該方法多用于drop刪除。
首先查詢user_table視圖,找到被刪除的表:
select table_name,dropped from user_tables; select object_name,original_name,type,droptime from user_recyclebin; 12
注意此時的,object_name和original_name就是回收站存放的表名和原來刪除的表名,如果表名沒有被重新命名,可以通過下面語句進行恢復:
flashback table original_name to before drop; 1
如果不知道源表名,或者需要重新命名新的表名存放數據,則可以通過回收站中的object_name進行恢復,命令如下:
flashback table object_name to before drop new_table_name; 1
3. 用oracle數據庫的閃回功能可以將數據庫恢復到過去某一狀態
注意,此時是整庫恢復,具體語法如下:
SQL>alter database flashback on SQL>flashback database to scn SCNNO; SQL>flashback database to timestamp to_timestamp(‘frombyte 2021-09-02 23:59:59’,‘yyyy-mm-dd hh24:mi:ss’); 123
4. 徹底刪除數據
如果確定需要刪除的數據又不想無謂的占用空間,我們可以使用以下3種方式:
- 采用truncate方式進行截斷。(不能進行數據回恢復)
- 在drop時加上purge選項:drop table table_name purge
- 通過刪除recyclebin區域來永久性刪除表 ,drop table table_name cascade constraints purge table table_name;
5. 關于清空回收站
-
刪除當前用戶回收站
purge recyclebin;
-
刪除全體用戶在回收站的數據
purge dba_recyclebin;
推薦教程:《oracle》
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦