oracle database 12cよりADR(自動診断レポジトリ)に実行されたDDLだけを抽出するDDLログが追加されました。

SQL> show parameter enable_ddl_logging

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
enable_ddl_logging                   boolean     FALSE

SQL> alter system set enable_ddl_logging=true scope=both;

システムが変更されました。

SQL> show parameter enable_ddl_logging

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
enable_ddl_logging                   boolean     TRUE

DDLログを有効にするにはenable_ddl_loggingパラメータをtrueに設定します。

SQL> CREATE TABLE test1 (id NUMBER);

表が作成されました。

SQL> ALTER TABLE test1 ADD CONSTRAINT test1_pk PRIMARY KEY (id);

表が変更されました。

SQL> DROP TABLE test1 PURGE;

表が削除されました。


色々なDDLを実行してみます。

[oracle@DB01 ~]$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/log/
[oracle@DB01 log]$ ls
ddl  ddl_orcl.log  debug  imdb  test

[oracle@DB01 log]$ cat ddl_orcl.log
Mon Oct 03 00:38:46 2016
diag_adl:drop user u1
diag_adl:alter database close immediate
diag_adl:alter database dismount
diag_adl:ALTER DATABASE OPEN
diag_adl:CREATE TABLE test1 (id NUMBER)
diag_adl:ALTER TABLE test1 ADD CONSTRAINT test1_pk PRIMARY KEY (id)
diag_adl:DROP TABLE test1 PURGE


「$ORACLE_BASE/diag/rdbms/(DB名)/(インスタンス名)/log/」内にDDLログが出力されます。
例えばddl_orcl.logには実行したDDL文が記録されます。
時間は記録されていません。

[oracle@DB01 log]$ cd ddl
[oracle@DB01 ddl]$ cat log.xml
<msg time='2016-10-03T00:38:46.615+09:00' org_id='oracle' comp_id='rdbms'
 msg_id='opiexe:4415:2946163730' type='UNKNOWN' group='diag_adl'
 level='16' host_id='DB01' host_addr='172.17.9.198'
 version='1'>
 <txt>drop user u1
 </txt>
</msg>


さらにddlフォルダのlog.xmlはDDLがxml形式で記録されます。
こちらは実行時間、実行クライアント、実行DDL文が記録されます。

[oracle@DB01 ddl]$ adrci exec="set editor cat;show log -l ddl"

ADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:
*************************************************************************
Output the results to file: /tmp/utsout_10546_13996_1.ado
[oracle@DB01 ddl]$ 2016-10-03 00:38:46.615000 +09:00
drop user u1
2016-10-03 00:39:17.929000 +09:00
alter database close immediate
2016-10-03 00:39:26.789000 +09:00
alter database dismount
2016-10-03 00:41:22.680000 +09:00
ALTER DATABASE OPEN
2016-10-03 00:42:02.616000 +09:00
CREATE TABLE test1 (id NUMBER)
2016-10-03 00:42:28.966000 +09:00
ALTER TABLE test1 ADD CONSTRAINT test1_pk PRIMARY KEY (id)
2016-10-03 00:42:39.486000 +09:00
DROP TABLE test1 PURGE


またadrclコマンドからDDLログを参照することも可能です。
こちらでは実行時間とDDL文が出力されます。