本知識點僅適用於Oracle 9i以上的版本。
查看錶的數據變動情況請使用SQL語句:select * from user_tab_modifications;
user_tab_modifications表的字段如下,從這個表中能夠輕鬆找到表中做的修改,刪除,增加記錄的情況
注意以及使用方法:
1、但這張表不是實時更新的,默認情況15分鐘更新一次,所以你更新一張表,可能在 user_tab_modifications裏不能立刻體現出來。
2、想要實時查看也有辦法實現,那就是在執行select * from user_tab_modifications之前先執行exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;這個存儲過程目的就是立刻刷新異動信息的
3、當執行上面的存儲過程出錯時候,錯誤如下:
ERROR at line 1:
ORA-20000: Insufficient privileges
ORA-06512: at "SYS.DBMS_STATS", line 2148
ORA-06512: at "SYS.DBMS_STATS", line 14135
ORA-06512: at line 1
哈哈錯誤很明顯,沒有權限,那麼提權!
4、爲用戶提權,首先用管理員賬號登陸,授予某個賬戶執行DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO的權限。
grant analyze any to epplm(這裏是你的用戶名)
5、OK提權成功,那麼返回到原賬號(epplm),再執行exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO,OK沒問題
6、此時再執行select * from user_tab_modifications,記錄出現了。
7、FLUSH_DATABASE_MONITORING_INFO存儲過程之後,所有之前的操作都將被提交!
8、對於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; |