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