oracle閃回恢復(fù)數(shù)據(jù)主要方法(閃回查詢,閃回表,閃回庫,回收站恢復(fù))
概要
1、閃回查詢通常只能恢復(fù)幾小時內(nèi)的數(shù)據(jù),因為Undo表空間的大小和保留策略限制了舊數(shù)據(jù)版本的保留時間。
2、在進行閃回操作之前,建議備份當(dāng)前數(shù)據(jù)庫或相關(guān)數(shù)據(jù),以防止意外情況導(dǎo)致數(shù)據(jù)丟失。
3、閃回功能不依賴于日志,可以在線恢復(fù),無需關(guān)閉數(shù)據(jù)庫,操作簡單且恢復(fù)速度快1
閃回查詢恢復(fù)數(shù)據(jù)的主要方法包括:
基于時間的閃回查詢:
使用SELECT * FROM 表名 AS OF TIMESTAMP(時間點)語句,可以查詢并恢復(fù)在指定時間點之前的數(shù)據(jù)狀態(tài)。
例如,要查詢10分鐘前的數(shù)據(jù),可以使用SELECT * FROM 表名 AS OF TIMESTAMP(SYSDATE-10/1440)。
1、基于時間區(qū)間來恢復(fù):恢復(fù)前5分鐘數(shù)據(jù),前20分鐘數(shù)據(jù)等
未更新前:4
delete update insert更新后:2
根據(jù)更新后的時間來確定數(shù)據(jù)要恢復(fù)的時間,比如恢復(fù)5分鐘前的數(shù)據(jù)、20分鐘前的等等時間段;
查詢3分鐘前的數(shù)據(jù):
語法:
SELECT * FROM 表名 AS OF TIMESTAMP(SYSDATE-3/1440)?;
此時查詢到的數(shù)據(jù)為更新發(fā)生后,前3分鐘的數(shù)據(jù),相當(dāng)于原來的數(shù)據(jù),未改變的數(shù)據(jù)。
實際工作中可以根據(jù)具體時間來恢復(fù),此時數(shù)據(jù)已經(jīng)查到了原來的舊數(shù)據(jù),創(chuàng)建新表拷貝閃回查詢的數(shù)據(jù):
閃回查詢前10分鐘的數(shù)據(jù)并拷貝到新表test_old中:
SQL> create table test_old as select * from test1 as of timestamp(sysdate-10/1440); 表已創(chuàng)建。 SQL> select * from test_old; NO NAME ---------- ---------- 1 aa 2 bb 3 cc 4 dd
閃回查詢的數(shù)據(jù)已經(jīng)拷貝到新表test_old中,然后將原來的表test1表刪除,將test_old表名修改未test1,整個閃回查詢恢復(fù)數(shù)據(jù)流程到此恢復(fù)完成結(jié)束。
2、基于具體的時間來恢復(fù):20250107 17:15:43 、20250106 17:15:43
未更新前數(shù)據(jù):
未更新前數(shù)據(jù)庫系統(tǒng)時間:
此時的時間為表未發(fā)生任何變化的系統(tǒng)時間節(jié)點,后期根據(jù)這個時間節(jié)點來恢復(fù)數(shù)據(jù),
更新表數(shù)據(jù):delete update insert
delete test_old where no='2'--刪除表中數(shù)據(jù)
表中操作已經(jīng)完成,查詢更新后的系統(tǒng)時間:
select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual -- 更新表后的時間20250107 17:17:33
當(dāng)表中完成更新,得知更新前的系統(tǒng)時間和更新后的系統(tǒng),就可以根據(jù)具體時間來恢復(fù)數(shù)據(jù):
比如恢復(fù)到更新數(shù)據(jù)前系統(tǒng)的具體時間,上面第一次獲取的時間:
select * from test_old as of timestamp to_date('20250107 17:59:28','yyyymmdd hh24:mi:ss') --恢復(fù)具體時間的數(shù)據(jù)
此時可以看到更新后,根據(jù)未更新前的系統(tǒng)時間來恢復(fù)了被更新的數(shù)據(jù),創(chuàng)建新表拷貝恢復(fù)的數(shù)據(jù),更新為原來的表,整個恢復(fù)流程完成,后期頻繁的去更新只要知道具體的時間一定時間內(nèi)都能正?;謴?fù)到為操作前的狀態(tài)。
更新中:…
基于scn閃回查詢恢復(fù)數(shù)據(jù)
1、獲取未操作前的scn值:
select dbms_flashback.get_system_change_number from dual --獲取當(dāng)前的scn 27511490
此時scn值未任何操作時候的scn。
2、對表進行delete update insert(更新);
delete test_old where no=5;
更新成功,
3.獲取更新后的 scn:
此時更新操作前和操作后的值都獲取到了,可以更新scn數(shù)值區(qū)間進行閃回查詢:27511490- 27512132,
4、根據(jù)scn閃回查詢:
語法: select * from test_old as of scn 數(shù)值;select * from test_old as of scn 27511490–根據(jù)scn的區(qū)間來一步一進行閃回查詢 27511490- 27512132,之間取值
此時根據(jù)更新前的scn閃回查詢返回到了,未操作前的狀態(tài),然后新建立表拷貝閃回查詢的數(shù)據(jù)進行恢復(fù)即可:
create table test2_old as select * from test_old as of scn 27511490;
此時將scn閃回查詢的數(shù)據(jù)已經(jīng)恢復(fù)到新表中,可以對新表對象進行任何操作。
注意:
1、如果只有操作后的scn可以根據(jù)scn數(shù)據(jù)值大小一個一個去測試,知道閃回查詢
2、如果有操作前后區(qū)間的scn值,可以根據(jù)區(qū)間去一一測試,直到閃回查詢
···**閃回查詢只要查看過去具體時間點的數(shù)據(jù)變化**···
閃回表
如果表結(jié)構(gòu)沒有發(fā)生改變,并且用戶有flash any table權(quán)限,可以使用ALTER TABLE 表名 ENABLE ROW MOVEMENT和FLASHBACK TABLE 表名 TO TIMESTAMP(時間點)語句來將整個表閃回到指定的時間點45。
閃回數(shù)據(jù)庫:
閃回數(shù)據(jù)庫功能允許將整個數(shù)據(jù)庫回滾到過去某個時間點,但這通常用于更嚴重的災(zāi)難恢復(fù)場景,并且需要配置恢復(fù)區(qū)(Flash Recovery Area)2。
利用“回收站”恢復(fù)被DROP的表:
當(dāng)使用DROP命令刪除表時,Oracle并不會立即清空表所占用的空間,而是將表的信息放到一個虛擬的“回收站”中。在塊未被重新使用之前,可以通過查詢user_tables視圖或user_recyclebin來找到被刪除的表,并進行恢復(fù)
總結(jié)
到此這篇關(guān)于oracle閃回恢復(fù)數(shù)據(jù)的文章就介紹到這了,更多相關(guān)oracle閃回恢復(fù)數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Maven中央倉庫正式成為Oracle官方JDBC驅(qū)動程序組件分發(fā)中心(推薦)
這篇文章主要介紹了Maven中央倉庫正式成為Oracle官方JDBC驅(qū)動程序組件分發(fā)中心,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07解讀Oracle中代替like進行模糊查詢的方法instr(更高效)
這篇文章主要介紹了解讀Oracle中代替like進行模糊查詢的方法instr(更高效),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11關(guān)于Oracle多表連接,提高效率,性能優(yōu)化操作
這篇文章主要介紹了關(guān)于Oracle多表連接,提高效率,性能優(yōu)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10oracle中存儲函數(shù)與存儲過程的區(qū)別介紹
這篇文章主要介紹了oracle中存儲函數(shù)與存儲過程的區(qū)別介紹,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-10-10Oracle通過LogMiner實現(xiàn)數(shù)據(jù)同步遷移
這篇文章主要介紹了Oracle通過LogMiner實現(xiàn)數(shù)據(jù)同步遷移的方法,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07