暂无图片
求oracle11g环境下怎样获得因DDL操作导致依赖对象失效的日志
我来答
分享
暂无图片 匿名用户
求oracle11g环境下怎样获得因DDL操作导致依赖对象失效的日志

环境:ORACLE 11.2.0.4

背景:存储过程总是因为某些依赖对象发生了定时DDL操作(可能的操作例如:DROP相关分区表、TRUNCATE相关分区表)等操作失效,导致下一次调用触发ORACLE的自动编译,进而引起大量library cache的争用,逐个研究依赖关系并定位问题费时费力,希望通过日志精确定位问题发生的时间和原因

问题:1、ORACLE是否会记录DDL操作引起其他对象失效的过程日志?

          2、是否可以通过编写脚本实现监控?

备注:本问题不能提供相关性能报告和TRACE,敬请谅解


我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
布衣
暂无图片

问题1:Oracle 一般没有对象失效的过程日志。
问题2:可以写一个监控脚本,定时输出存储过程状态。从而达到监控的目的。
例如:

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; SQL>select object_name, object_type, status, LAST_DDL_TIME --最后一个操作时间 from user_objects where status = 'INVALID'; OBJECT_NAME OBJECT_TYPE STATUS LAST_DDL_TIME ------------------------------ ------------------- ------- ------------------- SP_DATE_DELETE_PART PROCEDURE INVALID 2022-02-12 18:22:31 SP_test PROCEDURE INVALID 2022-02-12 18:22:31
复制

通过(user_objects)定时检查数据库是对象的状态。有异常报警。

仅提供解决思路,如有帮助,请点击采纳

暂无图片 评论
暂无图片 有用 0
打赏 0
Thomas

如果针对特定SCHEMA,那可以做个DDL TRIGGER,专门针对这个SCHEMA的,写法大致如下:

for rec in (select OBJECT_TYPE,OBJECT_NAME from user_objects where status='INVALID' and object_name not like '%OGG%')
loop
--dbms_output.put_line(rec.object_name);
str:='alter '||rec.object_type||' '||rec.object_name||' compile';
dbms_output.put_line(str);
execute immediate str ;
end loop;

一旦有了DDL,会自动执行如上语句,从而重编译失效对象

暂无图片 评论
暂无图片 有用 0
打赏 0
Root__Liu

可以打开ddl监控,设置enable_ddl_logging参数为true,可以在alert日志里面看到所有的ddl操作时间和操作命令,可以通过监控alert日志告警来监控失效对象。

通过短信告警可以实现ddl操作,同时,可以监控失效对象,若ddl操作和失效对象同时告出来,基本可以说明是ddl导致的对象失效了。

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


请输入正文
提交
相关推荐
Oracle 19c的自适应游标共享特性,有改进吗?
回答 1
依旧建议关闭
Oracle数据库发生行迁移,会带来什么问题?
回答 1
已采纳
行迁移只会影响性能,不会影响应用。因为应用不知道存在行迁移,应用使用的SQL与之前没有任何不同。如果通过一个索引来读发生了行迁移的这一行,索引会指向原来的块,原来的块再指向新块。要得到具体的行数据,原
rac节点重启导致ogg抽取进程重启,目标库数据异常
回答 3
你这个可以的,我们前期用的时候找oracle咨询,也提过这种方案。我们最终的方案其实是用的crs管理ogg,远程的总觉得有点网络消耗和不确定性,crs管理ogg也算oracle官方支持的一种解决方案吧
Oracle怎样确定一年是否是闰年?
回答 5
已采纳
若要判断一年是否为闰年,可以看二月底是否为29号。withv1as (selectdate'20230312'asdfromdual)selecttrunc(d,'yyyy')asyearb
Oracle如何把某个月的数据平均分配到不同日子?
回答 1
如果总记录数是35条,该月有31天,那无论怎么分,也不可能均分,除非记录数正好是62,93等31天的倍数。那么,只能是随机分配,看上去差不多即可。不知道是不是这样的要求。SQL>selectco
ORA-27301: OS failure message: No buffer space available
回答 1
已采纳
这是由于可用于网络缓冲区预留的空间较少,当OS这内核参数配置vm.minfreekbytes较小时容易遇到ORACLE是建议加大vm.minfreekbytes或者缩小lomtu在具有高物理内存的服务
归档量计算
回答 4
selectmax(firsttime)maxfirsttime,tochar(firsttime,&39;yyyymmdd&39;)day,count(recid)countnumber,count
数据库调度程序作业有哪些安全注意事项
回答 1
已采纳
一、用户权限管理作业创建者权限:确保只有授权的用户可以创建调度程序作业。一般来说,应该将创建作业的权限限制在数据库管理员或具有高级权限的用户,以防止未经授权的用户创建恶意作业或对系统造成不良影响。例如
连接Oracle数据库报错,ORA-89817,怎么办?
回答 3
磁盘空间满了,先删监听日志文件或者归档日志文件释放空间吧。
在 postgreSQL 里实现 oracle的定时任务功能,推荐采用什么办法?
回答 2
pgCron插件