查询进行DDL操作的session

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xxzhaobb/article/details/87781624

RDBMS 11.2.0.4 & RDBMS 12.2.0.1 

在实际的业务中,会碰到一些表结构被修改的情况,需要查询是那些用户,或者那些session,或者那些应用更改了表结构。

在11g和12c里面,有个参数可以记录ddl的操作,该参数是enable_ddl_logging.

在11g中,ddl操作记录是记录在alert log里面的,在12c,有单独的log目录记录ddl操作。

-- 修改ddl操作为记录日志,并进行ddl操作

SQL> show parameter ddl

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout		     integer	 0
enable_ddl_logging		     boolean	 FALSE
SQL> alter system set enable_ddl_logging = true;

System altered.

SQL> create table t (id number,name varchar2(10));

Table created.

SQL> alter table t modify name varchar2(12);

Table altered.

SQL> alter table t modify name varchar2(14);

Table altered.

-- 查看alert log记录,11g是记录在alert log中的,12c 有单独的目录记录ddl语句

Thread 1 advanced to log sequence 10032 (LGWR switch)
  Current log# 3 seq# 10032 mem# 0: /u01/app/oracle/oradata/ATRS/redo03.log
Wed Feb 20 01:14:34 2019
Thread 1 advanced to log sequence 10033 (LGWR switch)
  Current log# 1 seq# 10033 mem# 0: /u01/app/oracle/oradata/ATRS/redo01.log
Wed Feb 20 01:21:34 2019
Thread 1 advanced to log sequence 10034 (LGWR switch)
  Current log# 2 seq# 10034 mem# 0: /u01/app/oracle/oradata/ATRS/redo02.log
Wed Feb 20 01:26:47 2019
create table t (id number,name varchar2(10))
Wed Feb 20 01:28:17 2019
alter table t modify name varchar2(12)
Thread 1 advanced to log sequence 10038 (LGWR switch)
  Current log# 3 seq# 10038 mem# 0: /u01/app/oracle/oradata/ATRS/redo03.log
Wed Feb 20 01:58:11 2019
alter table t modify name varchar2(14)
Wed Feb 20 01:59:20 2019
[oracle@test log]$ pwd
/u01/app/oracle/diag/rdbms/test/test/log
[oracle@test log]$ ls
ddl  ddl_test.log  debug  debug.log  hcs  imdb  test
[oracle@test log]$ tail -f ddl_test.log
2019-02-20T09:30:12.255162+08:00
diag_adl:truncate table wri$_adv_addm_pdbs
2019-02-20T10:00:33.614687+08:00
diag_adl:truncate table wri$_adv_addm_pdbs
2019-02-20T10:30:51.079143+08:00
diag_adl:truncate table wri$_adv_addm_pdbs
2019-02-20T10:55:40.398740+08:00
diag_adl:create table tttt(id number)
2019-02-20T10:55:48.776416+08:00
diag_adl:drop table tttt purge

--记录到了 ddl操作,接下来需要看看是那些session,应用程序进行了该ddl操作。可以通过logMiner进行。

LogMiner可以在SQLPLUS里面进行,也可以在toad里面进行。这里在toad里面进行。

下面是LogMiner的结果

可以看到是session 139 。

进一步查询,这里通过v$session查询,或者通过v$active_session_history来查询。

再进一步的验证查询,可以通过V$SQLTEXT,V$SQL,dba_hist_sqltext来验证 。

end 

猜你喜欢

转载自blog.csdn.net/xxzhaobb/article/details/87781624