使用Trigger審計(jì)一張表的DML操作-創(chuàng)新互聯(lián)

最近ogg的災(zāi)備端復(fù)制進(jìn)程中的一張表老是報(bào)錯(cuò)ORA-04031,但是又查不到原因,于是想用審計(jì)的方法來(lái)看到底這張表是被誰(shuí)做了DML操作,把數(shù)據(jù)搞沒(méi)了。本來(lái)想用數(shù)據(jù)庫(kù)自帶的審計(jì)功能參考:http://hbxztc.blog.51cto.com/1587495/1870181

創(chuàng)新互聯(lián)建站專業(yè)成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營(yíng)銷、軟文營(yíng)銷等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計(jì)制作為您帶來(lái)效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。

但是需要重啟數(shù)據(jù)庫(kù),就放棄了,上網(wǎng)查資料看到有人用觸發(fā)器來(lái)實(shí)現(xiàn)這個(gè)功能,于是自己也做了嘗試。

平臺(tái)11.2.0.4

sys@ORCL>select * from v$version; BANNER ------------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production PL/SQL Release 11.2.0.4.0 - Production CORE    11.2.0.4.0      Production TNS for Linux: Version 11.2.0.4.0 - Production NLSRTL Version 11.2.0.4.0 - Production

創(chuàng)建測(cè)試表Orders

zx@ORCL>create table ORDERS   2  (   3    order_id   NUMBER,   4    order_name VARCHAR2(10)   5  ); Table created.

創(chuàng)建用于記錄DML操作記錄的表

zx@ORCL>create table AUDIT_ORDERS   2  (   3    orderid_new NUMBER(38),     4    orderid_old NUMBER(38),   5    username    VARCHAR2(30),   6    opt_date    DATE,   7    opt_type    VARCHAR2(10),   8    terminal    VARCHAR2(50),   9    session_id  NUMBER(10),  10    hostname    VARCHAR2(50)  11  ); Table created.

創(chuàng)建觸發(fā)器

zx@ORCL>CREATE OR REPLACE TRIGGER TRI_AUDIT_ORDERS   2    BEFORE INSERT OR UPDATE OR DELETE ON ORDERS   3    FOR EACH ROW   4  BEGIN   5    IF INSERTING THEN   6      INSERT INTO AUDIT_ORDERS   7      VALUES   8        (:NEW.ORDER_ID,   9         :OLD.ORDER_ID,  10         USER,  11         SYSDATE,                           --記錄操作的時(shí)間  12         'INSERT',  13         SYS_CONTEXT('USERENV', 'TERMINAL'),--記錄操作來(lái)源的終端信息  14         USERENV('SID'),                    --記錄操作的SID  15         SYS_CONTEXT('USERENV', 'HOST'));   --記錄操作的主機(jī)名  16    ELSIF UPDATING THEN  17      INSERT INTO AUDIT_ORDERS  18      VALUES  19        (:NEW.ORDER_ID,  20         :OLD.ORDER_ID,  21         USER,  22         SYSDATE,  23         'UPDATE',  24         SYS_CONTEXT('USERENV', 'TERMINAL'),  25         USERENV('SID'),  26         SYS_CONTEXT('USERENV', 'HOST'));  27    ELSIF DELETING THEN  28      INSERT INTO AUDIT_ORDERS  29      VALUES  30        (:NEW.ORDER_ID,  31         :OLD.ORDER_ID,  32         USER,  33         SYSDATE,  34         'DELETE',  35         SYS_CONTEXT('USERENV', 'TERMINAL'),  36         USERENV('SID'),  37         SYS_CONTEXT('USERENV', 'HOST'));  38    END IF;  39  END;  40  / Trigger created.

測(cè)試數(shù)據(jù)

--linux的sqlplus插入 zx@ORCL>insert into orders values(1,'zx'); 1 row created. zx@ORCL>commit; Commit complete. --windows的sqlplus插入 SQL> insert into orders values(2,'wl'); 已創(chuàng)建 1 行。 SQL> commit; 提交完成。 --plsql插入 INSERT INTO orders VALUES(3,'yhz'); COMMIT; --使用sys用戶插入 zx@ORCL>conn / as sysdba Connected. sys@ORCL>insert into zx.orders values(4,'wj'); 1 row created. sys@ORCL>commit; Commit complete. --更新數(shù)據(jù) zx@ORCL>update orders set order_id=10 where order_id=1; 1 row updated. zx@ORCL>commit; Commit complete. --刪除數(shù)據(jù) zx@ORCL>delete from orders where order_id<3; 1 row deleted. zx@ORCL>commit; Commit complete.

查看記錄表中的記錄

--測(cè)試表記錄 zx@ORCL>select * from orders;   ORDER_ID ORDER_NAME ---------- ------------------------------          3 yhz         10 zx          4 wj --審計(jì)表記錄 SQL> col username for a10 SQL> col hostname for a20 SQL> alter session set nls_date_format='yyyymmdd hh34:mi:ss'; 會(huì)話已更改。 SQL> set linesize 200 SQL> select * from audit_orders; ORDERID_NEW ORDERID_OLD USERNAME   OPT_DATE      OPT_TYPE   TERMINAL    SESSION_ID HOSTNAME ----------- ----------- ---------- ----------------- -------------------- ---------------------------------------- ---------- --------------------   3 ZX    20170104 21:32:46 INSERT   VICTOR-PC    10 WORKGROUP\VICTOR-PC   1 ZX    20170104 21:30:32 INSERT   pts/0     24 rhel6   2 ZX    20170104 21:31:47 INSERT   VICTOR-PC   146 WORKGROUP\VICTOR-PC   4 SYS    20170104 21:33:52 INSERT   pts/0     24 rhel6  10       1 ZX    20170104 21:37:26 UPDATE   pts/0     24 rhel6       2 ZX    20170104 21:37:50 DELETE   pts/0     24 rhel6 已選擇 6 行。

審計(jì)表記錄了所有的DML操作,可以用于審計(jì)哪些用戶對(duì)表做了哪些操作。

參考:

http://www.cnblogs.com/wanglibo/articles/2121098.html

http://www.cnblogs.com/huyong/archive/2011/04/27/2030466.html

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:使用Trigger審計(jì)一張表的DML操作-創(chuàng)新互聯(lián)
分享URL:http://muchs.cn/article16/idsgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、定制開(kāi)發(fā)企業(yè)建站、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)公司網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)