亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

DBA:在生產環境中創建監控表DML的觸發器

2024-07-21 02:44:05
字體:
來源:轉載
供稿:網友

在生產環境中,總是可能出現這樣的情況:某張或者某些表的數據被莫名其妙的修改了,但是很難定位出是哪個用戶、哪個過程修改的。這是一個很讓DBA頭痛的事情(往往DBA對于整個代碼邏輯并不是非常了解)。要定位出“問題”語句,有幾種方法可以選擇:log miner;細節粒度審計;觸發器。Log miner要求要有歸檔日志(這個并非所有系統都可以做),而且需要有相當的磁盤空間,好處就是可以離線做;細節粒度升級能夠根據條件記錄下表的DML操作(9i及之前只能記錄SELECT語句),比較復雜的FGA需要較高權限的用戶來實現;觸發器比較靈活,能夠按照比較復雜的條件來記錄需要的信息。下面介紹觸發器如何實現。


要建立這樣的觸發器,需要利用到幾張系統視圖:v$session, v$sql, v$cursor,(10g, 9.2.0.1中可以,9.2.0.5, 9.2.0.之前存在bug)


SQL> connect "/ as sysdba"

grant select on SYS.V_$SQL to demo;

grant select on SYS.V_$SQL_BIND_DATA to demo;

grant select on SYS.V_$SQL_CURSOR to demo;

grant select on SYS.V_$SESSION to demo;

grant create trigger to demo;


CREATE TABLE trig_sql(lt DATE, sid NUMBER, SERIAL# NUMBER,

USERNAME VARCHAR2(30), OSUSER VARCHAR2(64),

MACHINE VARCHAR2(32), TERMINAL VARCHAR2(16),

PROGRAM VARCHAR2(64), sqlText VARCHAR2(2000),

status VARCHAR2(30));

 

方法1:


create or replace trigger ttt_trig


after insert or update on pga_ttt


DECLARE


PRAGMA AUTONOMOUS_TRANSACTION;


begin


INSERT INTO trig_sql

select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,

s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,

'NONE'

from v$sql q, v$session s

where s.audsid=(select userenv('SESSIONID') from dual)

and s.prev_sql_addr=q.address

AND s.PREV_HASH_VALUE = q.hash_value;

COMMIT;

end;

 

方法2:


create or replace trigger ttt_trig

after insert or update on pga_ttt

DECLARE

PRAGMA AUTONOMOUS_TRANSACTION;

begin

for cr in (select s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,

s.MACHINE, s.TERMINAL, s.PROGRAM,

q.sql_text line, c.status stat

from v$sql q, v$sql_cursor c, v$session s

where s.audsid=(select userenv('SESSIONID') from dual)

and s.prev_sql_addr=q.address

AND c.STATUS = 'CURFETCH')

loop

INSERT INTO trig_sql VALUES(SYSDATE, cr.sid, cr.SERIAL#,

cr.USERNAME, cr.OSUSER, cr.MACHINE,

cr.TERMINAL, cr.PROGRAM, cr.line,

cr.stat);

end loop;


COMMIT;

end;

 

第一種方法是通過前一SQL的地址(pre_sql_addr)和HASH(prev_hash_value)值來定位出發trigger的語句的,不能用sql_address和hash_value來定位,否則獲取到是觸發器里面向日志表插入記錄數據的語句本身了。


第二個方法是通過通過地址加游標的方法,按照視圖各個字段的解釋,應該是可以通過v$sql_cursor.parent_handle來定位的。但是通過測試發現,只有當前一條語句和查找前一條語句的語句在一個PLSQL塊中的時候才有效,


SQL> set serveroutput on

SQL> declare

2 v_date date;

3 v_sql varchar2(2000);

4 begin

5 select sysdate into v_date from dual;

6

7 select q.sql_text into v_sql

8 from v$sql q, v$sql_cursor c, v$session s

9 where s.audsid=(select userenv('SESSIONID') from dual)

10 and s.prev_sql_addr=q.address and q.address=c.parent_handle;

11

12 dbms_output.put_line(v_sql);

13 end;

14 /

SELECT SYSDATE FROM DUAL


PL/SQL procedure successfully completed.

因為觸發器本身是一個PLSQL塊,所以總是無法獲得正確語句,最后只有通過cursor的狀態來獲取。下面簡單了解一下CURSOR各個狀態的含義:


·CURNULL:游標已經存在,但沒有任何SQL語句在使用它(即cache在每個session內存中的游標)


·CURSYNTAX:解析SQL語句過程的一個游標狀態,說明調用游標的SQL語句語法正確,但是沒有解析完成。


·CURPARSE:調用游標的語句解析完畢


·CURBOUND:游標使用了幫定變量,并定義好了幫定變量


·CURFETCH:游標執行完畢,并fetch了數據


·CURROW:游標正指向某一行


·ERROR:游標錯誤,一般是有BUG了。


當一條INSERT或者UPDATE語句執行以后才會觸發觸發器,所以這時候的游標狀態是CURFETCH,我們這就通過狀態為CURFETCH來定位。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产一区二区电影| 日韩精品福利在线| 久久久在线免费观看| 91精品在线观| 国产日韩av在线播放| 国产精品成人一区| 91久久嫩草影院一区二区| 日韩在线观看免费网站| 日本欧美一级片| 欧美一区二区三区精品电影| 日韩三级影视基地| 久久综合五月天| 在线亚洲欧美视频| 久久久久日韩精品久久久男男| 久久伊人精品视频| 日韩中文在线观看| 精品亚洲精品福利线在观看| 日韩精品视频三区| 亚洲石原莉奈一区二区在线观看| 国产精品久久色| 久久久久久久网站| 91精品国产高清自在线看超| 欧美电影免费观看大全| 青青青国产精品一区二区| 国产福利精品在线| 一区二区欧美日韩视频| 日韩精品视频免费在线观看| 欧美激情一二区| 亚洲第一天堂无码专区| 免费av一区二区| 91精品国产91久久久久久久久| 一区二区三区国产在线观看| 国产精品丝袜久久久久久不卡| 国外成人性视频| 九九热99久久久国产盗摄| 精品一区二区三区四区| 97国产精品免费视频| 91久久精品国产91久久性色| 久久综合伊人77777尤物| 国产欧美精品一区二区三区介绍| 精品无人国产偷自产在线| 欧美精品日韩www.p站| 欧美孕妇与黑人孕交| 欧美电影第一页| 欧美多人乱p欧美4p久久| 久久av中文字幕| 国色天香2019中文字幕在线观看| 亚洲一区二区三区毛片| 丁香五六月婷婷久久激情| 国产精品激情av电影在线观看| 国产精品男人爽免费视频1| 97久久精品国产| 久久人人爽人人爽人人片亚洲| 欧美性生活大片免费观看网址| 日本aⅴ大伊香蕉精品视频| 欧美日韩ab片| 亚洲成人激情在线观看| 欧美黑人巨大xxx极品| 久久影视电视剧免费网站清宫辞电视| 日本国产一区二区三区| 日韩在线中文字幕| 日韩中文字幕视频在线观看| 成人免费在线视频网站| 亚洲第一综合天堂另类专| 精品国产区一区二区三区在线观看| 91在线网站视频| 日韩综合视频在线观看| 亚洲亚裔videos黑人hd| 亚洲一区二区久久久久久| 奇门遁甲1982国语版免费观看高清| 日韩免费在线视频| 亚洲精品免费一区二区三区| 亚洲国产精品成人av| 欧美日韩一区二区在线播放| 欧美性xxxxxxx| 国产精品自产拍在线观看| 欧美一级片一区| 国产欧美精品一区二区三区介绍| 黄色一区二区在线观看| 中文字幕精品网| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲第一网站免费视频| 精品无人国产偷自产在线| 欧美日韩综合视频| 色综合五月天导航| 久久午夜a级毛片| 91色视频在线观看| 欧美日韩第一页| 久久久精品电影| 国产精品久久久久久亚洲调教| 2021国产精品视频| 在线午夜精品自拍| 日韩一区二区欧美| 久久精品电影一区二区| 97精品国产97久久久久久春色| 色久欧美在线视频观看| 91九色精品视频| 97视频免费在线观看| 亚洲国产精品久久精品怡红院| 影音先锋欧美精品| 中文字幕av一区二区三区谷原希美| 在线观看久久久久久| 国产亚洲精品美女久久久久| 欧美视频国产精品| 欧美日韩中文字幕日韩欧美| 国产成人97精品免费看片| 久久精品国产亚洲一区二区| 91九色国产视频| 美乳少妇欧美精品| 久久精品免费播放| 91丨九色丨国产在线| 成人精品在线观看| 亚洲理论片在线观看| 亚洲欧美中文字幕在线一区| 精品久久久久久中文字幕一区奶水| 欧美性猛交xxxx久久久| 国产一区二区三区免费视频| www高清在线视频日韩欧美| 国产a∨精品一区二区三区不卡| 日韩精品一二三四区| 欧美成人合集magnet| 国产精品美女在线| 亚洲欧美在线磁力| 亚洲欧美日韩一区二区三区在线| 欧美裸体视频网站| 97欧美精品一区二区三区| 亚洲欧美日韩视频一区| 日韩在线观看网站| 亚洲成人激情在线观看| 国产精品视频免费在线| 亚洲自拍在线观看| 精品久久久久人成| www日韩欧美| 亚洲偷熟乱区亚洲香蕉av| 欧美日韩国产精品一区二区不卡中文| 久久手机免费视频| 亚洲精品国偷自产在线99热| 久久精品国产69国产精品亚洲| 美女视频久久黄| 亚洲精品久久久久久下一站| 国产主播精品在线| 欧美在线一级视频| 2021国产精品视频| 久久免费观看视频| 亚洲精品综合久久中文字幕| 91亚洲精品一区二区| 久久久久久尹人网香蕉| 国产精品999999| 91精品国产高清久久久久久91| 亚洲精品美女久久| 国产一区二区日韩精品欧美精品| 成人av.网址在线网站| 国产成人精品久久久| 在线成人激情视频| 91麻豆国产精品| 日韩中文字幕在线精品| 久久久电影免费观看完整版| 欧美高清视频在线| 久久久国产影院| 欧美老女人xx| 欧洲成人免费视频| 久久亚洲国产成人| 91在线精品播放| 热99久久精品|