如何監控數據庫的操作情況

最近數據庫中莫名其妙的丟失了一些訂單的數據,爲了找出到底是什麼原因,所以創建了oracle的一個觸發器,記錄數據庫***數據的一些情況,我相信應該有很多朋友都有這種需求,但是不知道具體如何做,這裏我跟大家分享一下。


一、建表。

create table aa as 
select a.SID,
       a.SERIAL#,
       a.SCHEMANAME   數據庫用戶名,
       a.STATUS       狀態,
       a.OSUSER       系統登陸用戶,
       a.MACHINE      連接數據庫的機器名,
       sys_context('userenv', 'ip_address')   登陸用戶的IP,
       a.TERMINAL      登陸用戶所用終端,
       a.PROGRAM       連接數據庫的程序,
       a.MODULE        功能模塊,
       a.TYPE          連接類型,
       a.SQL_ID        用戶執行的SQL_ID,
       a.LOGON_TIME    用戶登陸時間,
       B.SQL_TEXT   SQL語句,
       B.SQL_FULLTEXT    完整的sql語句,
       SYSDATE           記錄時間
  from v$session a left join v$sqlarea b on A.SQL_ID=B.SQL_ID ;


二、建觸發器

CREATE OR REPLACE TRIGGER jiankong_ordertickets
   after delete  ON ORDERTICKETS    FOR EACH ROW
BEGIN

insert into deletejiankong
select a.SID,
       a.SERIAL#,
       a.SCHEMANAME   數據庫用戶名,
       a.STATUS       狀態,
       a.OSUSER       系統登陸用戶,
       a.MACHINE      連接數據庫的機器名,
       sys_context('userenv', 'ip_address')   登陸用戶的IP,
       a.TERMINAL      登陸用戶所用終端,
       a.PROGRAM       連接數據庫的程序,
       a.MODULE        功能模塊,
       a.TYPE          連接類型,
       a.SQL_ID        用戶執行的SQL_ID,
       a.LOGON_TIME    用戶登陸時間,
       B.SQL_TEXT   SQL語句,
       B.SQL_FULLTEXT    完整的sql語句,
       SYSDATE           記錄時間
  from v$session a left join v$sqlarea b on A.SQL_ID=B.SQL_ID
  where a.TYPE='USER'
    and length(a.SQL_ID) >0
     and (B.SQL_TEXT like 'delete%ordertickets%'  OR  B.SQL_TEXT like 'DELETE%ordertickets%'  or B.SQL_TEXT like 'delete%ORDERTICKETS%'   OR   B.SQL_TEXT like 'DELETE%ORDERTICKETS%'  );  --注意:這個關鍵字的大小寫一定要注意,大小寫不一樣是不會起作用的。

END;
/


這樣就可以,簡單的記錄下什麼東西在偷偷的刪數據了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章