Oracle查看表操作歷史記錄并恢復數據的方法
一、查找表操作記錄
1.首先查找表操作的歷史記錄
select * from v$sqlarea a where a.SQL_TEXT like '%表名%';
2.從上面的記錄中找到update語句對應的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操作記錄,然后找到用戶名和主機
select * from sys.v_$session l,sys.v_$sql s where s.SQL_ID='cq53826tk4u3c' and l.USERNAME is not null;二、恢復數據
//1.根據時間恢復
//示例:
select * from t_noentryquery;
delete from t_noentryquery where fid=7369;
//查詢當前電腦時間:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;
//查詢刪除之前數據:
select * from t_noentryquery as of timestamp to_timestamp('2018-04-12 09:12:11','yyyy-mm-dd hh24:mi:ss');
//恢復數據:
flashback table t_noentryquery to timestamp to_timestamp('2018-04-12 09:12:11','yyyy-mm-dd hh24:mi:ss');
//注意:若出現報錯:ORA-08189:未啟用行移動功能,不能閃回表;
//則:
alter table t_noentryquery enable row movement; //開啟行移動功能
alter table t_noentryquery disable row movement; //關閉行移動功能附:oracle查詢表最近更改的數據
查看一張最近被更改的記錄,可以查回滾段,下面是一個例子:
create table test(id number,name varchar2(10),gender varchar2(5)); insert into test values(1,'宋春風','男'); 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可以查詢最近更改的數據。
SELECT * FROM TEST VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE WHERE VERSIONS_STARTTIME IS NOT NULL ORDER BY VERSIONS_STARTTIME DESC;
修改幾條數據和接下來的查詢做對比。
UPDATE TEST SET GENDER='女' WHERE NAME='孫書禎'; UPDATE TEST SET GENDER='女' WHERE NAME='史波'; commit;
再次查詢,被修改的數據就可以看到被修改和修改前的數據。
總結:VERSIONS_STARTTIME是數據被修改的起始時間,VERSIONS_ENDTIME是數據被修改后新數據的有效時間,也就是VERSIONS_STARTTIME和VERSIONS_ENDTIME時間段內,這條數據再沒被修改過,如果VERSIONS_ENDTIME為空,就說明這條記錄從VERSIONS_STARTTIME時間起再沒被修改過。VERSIONS_OPERATION是修改狀態(tài),I代表INSERT,U代表UPDATE,D代表DELETE。此時
如果想回滾INSERT的數據,只需要DELETE反向操作即可,如果想回滾UPDATE操作,將數據反向UPDATE回去即可。
注:此SQL只能查詢到回滾段內的信息,超出回滾段范圍這個SQL就無能為力了,需要借助LOGMGR工具挖掘日志了。
總結
到此這篇關于Oracle查看表操作歷史記錄并恢復數據的文章就介紹到這了,更多相關Oracle查看表操作歷史記錄內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Oracle中分組查詢group by用法規(guī)則詳解
這篇文章主要介紹了Oracle中分組查詢group by用法規(guī)則詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07
oracle中使用in和not?in查詢效率總結和優(yōu)化建議
oracle的sql語句中的in和not in是自動將字段為null的去掉了,下面這篇文章主要介紹了oracle中使用in和not?in查詢效率總結和優(yōu)化建議的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-11-11
Linux系統(tǒng)下導出ORACLE數據庫出現Exporting questionable statistics.錯誤 處理
Linux系統(tǒng)下導出ORACLE數據庫出現Exporting questionable statistics.錯誤 處理...2007-03-03
如何使用Navicat Premium連接Oracle數據庫
這篇文章主要介紹了如何使用Navicat Premium連接Oracle數據庫,需要的朋友可以參考下2023-01-01

