Oracle12C新特性_DDL日志


Oracle12C新特性_DDL日志


---DDL日志

12C之前的版本,如果想要查询执行过的DDL信息,通常考虑三种方法:

1:logminer 2:审计 3:触发器

12C开始,DDL日志可以通过enable_ddl_logging选项实现

4:enable_ddl_logging


下面将查询DDL日志的四种方法分别进行测试:

---1:DDL日志(logminer)

---查询当前日志组

---本次案例数据库没有启动归档模式,可以直接挖掘在线日志文件

select a.group#, a.status, b.member

  from v$log a, v$logfile b

 where a.group# = b.group#

 order by 1;

---执行DDL操作

SQL> create table t001(id number);

SQL> insert into t001 values(1);

SQL> insert into t001 values(2);

SQL> insert into t001 values(3);

SQL> commit;

SQL> truncate table t001;

SQL> drop table t001;

---执行logminer

SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE

(LogFileName=>'/u01/app/oracle/oradata/CHENDB/onlinelog/o1_mf_2_g1jtwccv_.log',Options=>dbms_logmnr.new);

SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

SQL> create table logmnr_0128 as select * from v$logmnr_contents;

SQL> exec dbms_logmnr.end_logmnr; 

---查询操作日志

SQL> select timestamp, operation, seg_owner, sql_redo

  from logmnr_0128

 where sql_redo like '%t001%'

    or sql_redo like '%CHENTEST%'

 order by 2;

---2:DDL日志(审计)

SQL> show parameter audit

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

audit_file_dest                      string      /u01/app/oracle/admin/chendb/adump

audit_sys_operations                 boolean     TRUE

audit_syslog_level                   string      

audit_trail                          string      DB, EXTENDED

unified_audit_sga_queue_size         integer     1048576

unified_audit_systemlog              string  

SQL> audit table  by chentest;

SQL> create table t006(id number);

SQL> alter table t006 add(a varchar2(30) default 'a');

SQL> truncate table t006;

SQL> drop table t006;

SQL> select os_username,

       userhost,

       terminal,

       timestamp,

       owner,

       action_name,

       obj_name,

       sql_text

  from dba_audit_trail;

---3:DDL日志(触发器)

DDL触发器来自https://www.nmirage.com/database/298.html

(1)创建审计表

(2)创建ddl触发器


(3)执行SQL语句

SQL> create table t005(id number);

SQL> insert into t005 values(1);

SQL> insert into t005 values(2);

SQL> insert into t005 values(3);

SQL> commit;

SQL> alter table t005 add(t_name varchar2(30) default 'a');

SQL> truncate table t005;

SQL> drop table t005;


(4)查看审计信息

SQL> select * from Audit_DDL_OBJ;

---4 DDL日志(enable_ddl_logging)(12C,18C)

---从12C开始,可以通过enable_ddl_logging选项查询DDL日志

---查询enable_ddl_logging

SQL> select name,value,default_value from v$parameter where name='enable_ddl_logging';

NAME             VALUE DEFAULT_VALUE

enable_ddl_logging FALSE FALSE

---会话级别启用ENABLE_DDL_LOGGING

SQL> ALTER SESSION SET ENABLE_DDL_LOGGING=TRUE;

---执行DDL日志

SQL> create table t002(id number);

SQL> insert into t002 values(1);

SQL> insert into t002 values(2);

SQL> insert into t002 values(3);

SQL> commit;

SQL> truncate table t002;

SQL> drop table t002;

---DDL日志默认生成到/u01/app/oracle/diag/rdbms/chendb/chendb/log/ddl/log.xml文件

[root@oracle-server001 ddl]# pwd

/u01/app/oracle/diag/rdbms/chendb/chendb/log/ddl

[root@oracle-server001 ddl]# ls

log.xml

---查看DDL日志

[root@oracle-server001 ddl]# cat log.xml 

 msg_id='kpdbLogDDL:22974:2946163730' type='UNKNOWN' group='diag_adl'

 level='16' host_id='oracle-server001' host_addr='192.168.2.225'

 pid='99417' version='1' con_uid='2495552238'

 con_id='3' con_name='CHENPDB'>

  create table t002(id number)

 

 msg_id='kpdbLogDDL:22974:2946163730' type='UNKNOWN' group='diag_adl'

 level='16' host_id='oracle-server001' host_addr='192.168.2.225'

 pid='99417' con_uid='2495552238' con_id='3'

 con_name='CHENPDB'>

  truncate table t002

 

 msg_id='kpdbLogDDL:22974:2946163730' type='UNKNOWN' group='diag_adl'

 level='16' host_id='oracle-server001' host_addr='192.168.2.225'

 pid='99417' con_uid='2495552238' con_id='3'

 con_name='CHENPDB'>

  drop table t002

 


请使用浏览器的分享功能分享到微信等