oracle追蹤誤操作DDL

season0891發表於2015-03-12
生產環境經常遇到DROP、TRUNCATE、DELETE等誤操作,
其中大部分影響較大的是DDL,11.2 設定ENABLE_DDL_LOGGING為true後,alert中會記錄DDL操作的語句,但是沒有詳細資訊:
alter system set enable_ddl_logging = TRUE    sid='*' scope=spfile;
12C中的開啟ENABLE_DDL_LOGGING後,會專門有一個日誌檔案記錄詳細的資訊。
$ORACLE_BASE/diag/rdbms/dbname/log ddl

另外可以透過v$active_session_history、dba_hist_active_sess_history歷史檢視中的SQL_OPCODE欄位定位:
SQL_OPCODE    12 為DROP TABLE  10為 DROP INDEX、85為TRUNCATE TABLE、86為TRUNCATE CLUSTER
關於SQL_OPCODE詳細參考官方文件:


下面是一個業務時間業務人員誤刪索引跟蹤的案例:
drop index的sql_opcode為10,首先檢視v$active_session_history檢視
select USER_ID, SQL_OPCODE, XID, SAMPLE_TIME,MODULE,MACHINE
from v$active_session_history
where SQL_OPCODE=10


no rows selected

檢視dba_hist_active_sess_history檢視:
col SAMPLE_TIME for a30
col MODULE for a20
col MACHINE for a20
select USER_ID, SQL_OPCODE, XID, SAMPLE_TIME,MODULE,MACHINE from dba_hist_active_sess_history where SQL_OPCODE=10



   USER_ID SQL_OPCODE XID              SAMPLE_TIME                    MODULE               MACHINE
---------- ---------- ---------------- ------------------------------ -------------------- --------------------
        38         10                  19-MAR-14 10.08.35.429 AM      PL/SQL Developer     WORKGROUP\??-???
        38         10                  19-MAR-14 10.08.25.354 AM      PL/SQL Developer     WORKGROUP\??-???


SQL> select username from dba_users where user_id=38;

USERNAME
------------------------------
ADMIN

檢視到10點鐘ADMIN使用者透過PL/SQL Developer連線到資料庫做了drop index的操作。
如果涉及的時間較久,可能需要使用logmnr。

http://www.orasql.com/blog/archives/2014/09/05/tracking_drop_op.htm

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-1457167/,如需轉載,請註明出處,否則將追究法律責任。

相關文章