DDL Logging aktiveren - Jedes DDL in der Datenbank nachvollziehen
11g/12c Enterprise Edition + Lifecycle Management Pack
Aufgabe: Jedes DDL Statment in der DB soll vollständig aufgezeichnet werden.
Lizenzbedingungen beachten!
Steht eine EE Edition + das „Database Lifecycle Management Pack“ zur Verfügung kann das Thema sehr einfach gelößt werden.
Bzgl. Lizenz siehe hier ⇒ https://docs.oracle.com/en/database/oracle/oracle-database/12.2/dblic/Licensing-Information.html#GUID-68A4128C-4F52-4441-8BC0-A66F5B3EEC35
... Licensed Parameters: The init.ora parameter ENABLE_DDL_LOGGING is licensed as part of the Database Lifecycle Management Pack when set to TRUE. When set to TRUE, the database reports schema changes in real time into the database alert log under the message group schema_ddl. The default setting is FALSE. ...
falls das nicht der Fall ist hilft nur eine Trigger Lösung auf Basis des DDL Event Triggers der Datenbank , siehe ⇒ http://psoug.org/reference/ddl_trigger.html
Aktivieren
-- ENABLE_DDL_LOGGING enables or disables the writing of a subset of data definition language (DDL) -- statements to a DDL log. ALTER SYSTEM SET enable_ddl_logging=TRUE SHOW parameter enable_ddl NAME TYPE VALUE ------------------------------------ --------------------------------- --------- enable_ddl_logging BOOLEAN TRUE
Überwachung
DDL Test:
sqlplus gpi/gpi CREATE TABLE t4 (id NUMBER, text varchar2(255));
Übersicht über die Datei ddl_<SID>.log unter $DIAG_HOME\rdbms\<DBNAME>\<SID>\log:
2018-02-06T14:36:47.217048+01:00 diag_adl:create table t4 (id number, text varchar2(255))
Für mehr Details siehe ddl/log.xml unter $DIAG_HOME\rdbms\<DBNAME>\<SID>\log\ddl:
<msg time='2018-02-06T14:38:42.061+01:00' org_id='oracle' comp_id='rdbms' msg_id='opiexe:4695:2946163730' type='UNKNOWN' group='diag_adl' level='16' host_id='SATURN' host_addr='fe80::210c:58ee:5e96:d499%13' pid='21344'> <txt>CREATE TABLE t5 (id NUMBER, text varchar2(255)) </txt> </msg>