Oracle 檢查表的數據變更

本知識點僅適用於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;
相關文章
相關標籤/搜索