本知識點僅適用於Oracle 9i以上的版本。linux
查看錶的數據變更狀況請使用SQL語句:select * from user_tab_modifications;sql
user_tab_modifications表的字段以下,從這個表中可以輕鬆找到表中作的修改,刪除,增長記錄的狀況spa
注意以及使用方法:code
一、但這張表不是實時更新的,默認狀況15分鐘更新一次,因此你更新一張表,可能在 user_tab_modifications裏不能馬上體現出來。ci
二、想要實時查看也有辦法實現,那就是在執行select * from user_tab_modifications以前先執行exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;這個存儲過程目的就是馬上刷新異動信息的get
三、當執行上面的存儲過程出錯時候,錯誤以下:string
ERROR at line 1:it
ORA-20000: Insufficient privilegesio
ORA-06512: at "SYS.DBMS_STATS", line 2148table
ORA-06512: at "SYS.DBMS_STATS", line 14135
ORA-06512: at line 1
哈哈錯誤很明顯,沒有權限,那麼提權!
四、爲用戶提權,首先用管理員帳號登錄,授予某個帳戶執行DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO的權限。
grant analyze any to epplm(這裏是你的用戶名)
五、OK提權成功,那麼返回到原帳號(epplm),再執行exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO,OK沒問題
六、此時再執行select * from user_tab_modifications,記錄出現了。
七、FLUSH_DATABASE_MONITORING_INFO存儲過程以後,全部以前的操做都將被提交!
八、對於Oracle10i以及以上的版本,DML操做,均可以在該表中查到,由於這個功能默認是開啓的,若是沒有開啓,能夠經過這個方法開啓:alter table t monitoring;
存儲過程:
create or replace procedure Pro_Analyze_And_TableModify is |
2 |
begin |
3 |
dbms_output.put_line( '開始執行,過程很長,請等待' ); |
4 |
DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO; --馬上刷新 |
5 |
insert into TableModifications select * from user_tab_modifications; --兩個表結構同樣 |
6 |
Pro_AnalyzeTables; --執行分析表(調用上一篇的存儲過程) |
7 |
dbms_output.put_line( '執行成功' ); |
8 |
end Pro_Analyze_And_TableModify; |