Oracleで実行されたDDLをログ出力する方法です。
ENABLE_DDL_LOGGINGという設定をTRUEにすることで、実行されたDDLをOracleのログに出力することができます。
まずは、現在の設定の確認。
1 2 3 4 5 |
SQL> show parameter enable_ddl_logging NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ enable_ddl_logging boolean FALSE |
FALSEになっているので、TRUEに変更します。
1 2 3 |
SQL> alter system set enable_ddl_logging=true; システムが変更されました。 |
再度、設定を確認する。
1 2 3 4 5 |
SQL> show parameter enable_ddl_logging NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ enable_ddl_logging boolean TRUE |
TRUEになっています。この状態でなんでもいいので、DDL文を実行します。
記録されるのは、以下のDDL文。
- ALTER/CREATE/DROP/TRUNCATE CLUSTER
- ALTER/CREATE/DROP FUNCTION
- ALTER/CREATE/DROP INDEX
- ALTER/CREATE/DROP OUTLINE
- ALTER/CREATE/DROP PACKAGE
- ALTER/CREATE/DROP PACKAGE BODY
- ALTER/CREATE/DROP PROCEDURE
- ALTER/CREATE/DROP PROFILE
- ALTER/CREATE/DROP SEQUENCE
- CREATE/DROP SYNONYM
- ALTER/CREATE/DROP/RENAME/TRUNCATE TABLE
- ALTER/CREATE/DROP TRIGGER
- ALTER/CREATE/DROP TYPE
- ALTER/CREATE/DROP TYPE BODY
- DROP USER
- ALTER/CREATE/DROP VIEW
ログは以下のパスに出力されます。↓
1 |
$ORACLE_BASE/diag/rdbms/(データベース名)/(インスタンス名)/log/ |
例えば、ddl_orcl.logにはこんな感じでDDLがログ出力される。
1 2 |
diag_adl:create view testv as select * from dual diag_adl:drop view testv |
余談だが、この機能を使った理由。。。。とある製品がDBを内包しており、製品のバージョンアップに伴い、テーブル定義を変更する処理を実行していた。バージョンアップの過程でどう変更しているのか、気になって仕込みました。