oracle 查询ddl记录,Oracle记录用户DDL操作脚本

Oracle记录用户DDL操作脚本

--当前普通用户创建 issgzt

create table TAB_DDL

(

LOGIN_USER        VARCHAR2(60),

AUDSID            NUMBER,

MACHINE            VARCHAR2(60),

IPADDRESS          VARCHAR2(20),

SCHEMA_USER        VARCHAR2(60),

SCHEMA_OBJECT      VARCHAR2(60),

DDL_TIME          DATE,

DDL_SQL            VARCHAR2(4000),

MODULE            VARCHAR2(100),

SCHEMA_OBJECT_TYPE VARCHAR2(60)

)

;

--sys用户创建,监视用户对Oracle进行DDL操作

CREATE OR REPLACE TRIGGER SYS.tr_issgzt_ddl

AFTER ddl ON database

DECLARE

sql_text  ora_name_list_t;

state_sql issgzt.TAB_DDL.ddl_sql%TYPE;

v_program issgzt.TAB_DDL.module%TYPE;

error1 exception;

BEGIN

IF SUBSTR(SYS_CONTEXT('USERENV', 'SESSION_USER'), 1, 1) = 'T' AND

SYS_CONTEXT('USERENV', 'SESSION_USER') NOT IN ('username') AND

lower(state_sql) not like 'alter user t%' THEN

raise error1;

end if;

FOR i IN 1 .. nvl(ora_sql_txt(sql_text), 2) LOOP

begin

state_sql := state_sql || sql_text(i);

Exception

when others then

null;

end;

END LOOP;

select nvl(s.program, s.MODULE)

into v_program

from v$session s

where s.SID = (select distinct sid from v$mystat);

INSERT INTO issgzt.TAB_DDL

(login_user,

audsid,

machine,

ipaddress,

schema_user,

schema_object,

SCHEMA_OBJECT_TYPE,

ddl_time,

ddl_sql,

module)

VALUES

(ora_login_user,

userenv('SESSIONID'),

SYS_CONTEXT('USERENV', 'TERMINAL'),

sys_context('userenv', 'ip_address'),

ora_dict_obj_owner,

ora_dict_obj_name,

ora_dict_obj_type,

SYSDATE,

substr(state_sql, 1, 3000),

v_program);

EXCEPTION

WHEN error1 THEN

raise_application_error(num => -20000,

msg => ' ERROR');

END tr_trace_ddl;

/

相关阅读:

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值