暂无图片
触发器记录历史DDL语句
我来答
分享
Thomas
2022-08-08
触发器记录历史DDL语句

如题,ORACLE, 想搞个触发器,把所有DDL记录下来。请给个思路,谢谢。

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
哇哈哈

创建oracle ddl触发器记录所有ddl操作

---- 存储DDL语句的表
create table sys.my_audit_ddl
(
opertime timestamp PRIMARY KEY,
ip varchar2(20),
hostname varchar2(30),
operation varchar2(30),
object_type varchar2(30),
object_name varchar2(30),
sql_stmt clob,
db_schema varchar2(30)
);

---- 捕获DDL语句的触发器
CREATE OR REPLACE TRIGGER sys.trg_my_audit_ddl
after ddl ON DATABASE
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
n NUMBER;
stmt clob := NULL;
sql_text ora_name_list_t;
BEGIN
n := ora_sql_txt(sql_text);
FOR i IN 1 .. n LOOP
stmt := stmt || sql_text(i);
END LOOP;

INSERT INTO sys.my_audit_ddl
(opertime, ip, hostname, operation, object_type, object_name, sql_stmt,db_schema)
VALUES
(systimestamp,
sys_context('userenv', 'ip_address'),
sys_context('userenv', 'terminal'),
ora_sysevent,
ora_dict_obj_type,
ora_dict_obj_name,
stmt,
user
);

COMMIT;
END;
/

-- drop procedure test_proc;
CREATE OR REPLACE PROCEDURE test_proc AS
BEGIN
dbms_output.put_line('这是一个测试中文DDL过程');
END;
/

CREATE OR REPLACE PROCEDURE test_proc AS
BEGIN
dbms_output.put_line('这是一个测试中文DDL过程');
END;
/

-----查看结果----
select * from sys.my_audit_ddl;

暂无图片 评论
暂无图片 有用 2
打赏 0
暂无图片
吾喾
暂无图片 评论
暂无图片 有用 0
打赏 0
PiscesCanon

alter system set enable_ddl_logging=true scope=both sid='*';

这个参数设置为true可以把ddl操作记录到警告日志中。


如下:



此时警告日志:


暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
数据文件坏块无法修复
回答 2
谢谢大神,这个方法确实好。
如何在数据库中设置 undo retention 参数?
回答 3
使用SHOWPARAMETERundoretention命令可以查看当前数据库中undoretention参数的设置。例如:SQL>SHOWPARAMETERundoretention;这将显示
oracle 19c rac的alert日志显示统计信息任务报错?怪了。
回答 3
已采纳
问题找到,原来用户自己加了全局不可编辑触发器,禁止了drop和truncate操作。把触发器SYSTEM.TRGDDLDENYTRUNCATE禁用后恢复正常。
oracle 报错:ORA-12518:TNS:监听程序无法分发客户机连接,怎么解决?
回答 1
已采纳
1、首先判断是否由于监听配置不正确的原因导致?2、是否因为数据库服务器处于共享服务器模式,是否会因为DISPATCHERS的数量太少,导致在高峰期的时候无法及时的分配客户机连接呢?3、判断是否PROC
11g rac安装,check这一步报错是什么原因呢
回答 3
两个节点查看fdiskl磁盘数量是否正常,multipathll是否正常、lslrt/dev/ocr,查看权限,进行对比
等保问题整改
回答 4
谢谢楼上二位专家的建议!我整理一下重新提问!
Oracle分区表能自动按月扩展吗?
回答 2
已采纳
按年:PARTITIONBYRANGE(CREATETIME)INTERVAL(numtoyminterval(1,'year'))按月:PARTITIONBYRANGE(CREATETIME)INT
open_cursors和session_cached_cursor参数设置多少相对合适
回答 2
已采纳
看看这个https://developer.aliyun.com/article/445969
哪位大佬有数据库压力测试方案?
回答 1
可以参考https://www.modb.pro/db/70849
快速purge dba_recyclebin
回答 7
问题已关闭:问题已经得到解决