Oracle查看表操作歷史記錄并恢復(fù)數(shù)據(jù)的方法
一、查找表操作記錄
1.首先查找表操作的歷史記錄 select * from v$sqlarea a where a.SQL_TEXT like '%表名%'; 2.從上面的記錄中找到update語句對應(yīng)的sql_id select * from v$sqltext a,v$sqlarea b where a.SQL_ID=b.SQL_ID and b.SQL_ID in('cq53826tk4u3c','afftnrfhu5utk') order by b.LAST_ACTIVE_TIME desc; 3.從上面的記錄中找到最新的sql操作記錄,然后找到用戶名和主機(jī) select * from sys.v_$session l,sys.v_$sql s where s.SQL_ID='cq53826tk4u3c' and l.USERNAME is not null;
二、恢復(fù)數(shù)據(jù)
//1.根據(jù)時(shí)間恢復(fù) //示例: select * from t_noentryquery; delete from t_noentryquery where fid=7369; //查詢當(dāng)前電腦時(shí)間: select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual; //查詢刪除之前數(shù)據(jù): select * from t_noentryquery as of timestamp to_timestamp('2018-04-12 09:12:11','yyyy-mm-dd hh24:mi:ss'); //恢復(fù)數(shù)據(jù): flashback table t_noentryquery to timestamp to_timestamp('2018-04-12 09:12:11','yyyy-mm-dd hh24:mi:ss'); //注意:若出現(xiàn)報(bào)錯(cuò):ORA-08189:未啟用行移動(dòng)功能,不能閃回表; //則: alter table t_noentryquery enable row movement; //開啟行移動(dòng)功能 alter table t_noentryquery disable row movement; //關(guān)閉行移動(dòng)功能
附:oracle查詢表最近更改的數(shù)據(jù)
查看一張最近被更改的記錄,可以查回滾段,下面是一個(gè)例子:
create table test(id number,name varchar2(10),gender varchar2(5)); insert into test values(1,'宋春風(fēng)','男'); insert into test values(2,'葉民','男'); insert into test values(3,'白冰','男'); insert into test values(4,'方巍森','男'); insert into test values(5,'孫書禎','男'); insert into test values(6,'史波','男'); commit;
利用下面的SQL可以查詢最近更改的數(shù)據(jù)。
SELECT * FROM TEST VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE WHERE VERSIONS_STARTTIME IS NOT NULL ORDER BY VERSIONS_STARTTIME DESC;
修改幾條數(shù)據(jù)和接下來的查詢做對比。
UPDATE TEST SET GENDER='女' WHERE NAME='孫書禎'; UPDATE TEST SET GENDER='女' WHERE NAME='史波'; commit;
再次查詢,被修改的數(shù)據(jù)就可以看到被修改和修改前的數(shù)據(jù)。
總結(jié):VERSIONS_STARTTIME是數(shù)據(jù)被修改的起始時(shí)間,VERSIONS_ENDTIME是數(shù)據(jù)被修改后新數(shù)據(jù)的有效時(shí)間,也就是VERSIONS_STARTTIME和VERSIONS_ENDTIME時(shí)間段內(nèi),這條數(shù)據(jù)再?zèng)]被修改過,如果VERSIONS_ENDTIME為空,就說明這條記錄從VERSIONS_STARTTIME時(shí)間起再?zèng)]被修改過。VERSIONS_OPERATION是修改狀態(tài),I代表INSERT,U代表UPDATE,D代表DELETE。此時(shí)
如果想回滾INSERT的數(shù)據(jù),只需要DELETE反向操作即可,如果想回滾UPDATE操作,將數(shù)據(jù)反向UPDATE回去即可。
注:此SQL只能查詢到回滾段內(nèi)的信息,超出回滾段范圍這個(gè)SQL就無能為力了,需要借助LOGMGR工具挖掘日志了。
總結(jié)
到此這篇關(guān)于Oracle查看表操作歷史記錄并恢復(fù)數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Oracle查看表操作歷史記錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
win7 64位操作系統(tǒng)中Oracle 11g + plsql安裝教程詳解(圖解)
這篇文章主要介紹了win7 64位操作系統(tǒng)中Oracle 11g + plsql安裝教程詳解(圖解),詳細(xì)的介紹了Oracle 11g 安裝的步驟,有興趣的可以了解一下。2017-04-04Oralce中VARCHAR2()與NVARCHAR2()的區(qū)別介紹
這篇文章主要給大家詳細(xì)介紹了關(guān)于Oralce中VARCHAR2()與NVARCHAR2()的區(qū)別,文中先通過翻譯官方的介紹進(jìn)行區(qū)別總結(jié),然后由一個(gè)實(shí)戰(zhàn)示例代碼進(jìn)行演示,相信對大家的理解會(huì)很有幫助,有需要的朋友們下面來跟著小編一起看看吧。2016-12-12oracle11g客戶端連接12c服務(wù)器ORA-01017錯(cuò)誤問題解決
這篇文章主要介紹了oracle11g客戶端連接12c服務(wù)器ORA-01017錯(cuò)誤,本文給大家分享完美解決方法,對oracle 12c錯(cuò)誤ORA-01017問題解決方法感興趣的朋友跟隨小編一起看看吧2023-06-06詳解Oracle在out參數(shù)中訪問光標(biāo)
這篇文章主要介紹了詳解Oracle在out參數(shù)中訪問光標(biāo)的相關(guān)資料,這里提供實(shí)例代碼幫助大家學(xué)習(xí)理解這部分內(nèi)容,希望能幫助到大家,需要的朋友可以參考下2017-08-08oracle 索引的相關(guān)介紹(創(chuàng)建、簡介、技巧、怎樣查看) .
索引是通過一組排序后的索引鍵來取代默認(rèn)的全表掃描檢索方式,從而提高檢索效率2014-06-06