oracle追踪误操作DDL

生产环境经常遇到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详细参考官方文档:
http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2088.htm#i1414383

下面是一个业务时间业务人员误删索引跟踪的案例:
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
请使用浏览器的分享功能分享到微信等