大侠们好:
我在oracle里写了一个后台的package,结果前两天自己invalid掉了,但当时没有发现这个问题,结果造成前台查询时,有关调用这个包的sql均很慢,很长时间都不响应!
我想知道的那位大侠提供一个追踪过程的思路,即从前台出问题时起,可以追踪到是因为package invalid 了,造成前台的查询很慢!
谢谢!
我在oracle里写了一个后台的package,结果前两天自己invalid掉了,但当时没有发现这个问题,结果造成前台查询时,有关调用这个包的sql均很慢,很长时间都不响应!
我想知道的那位大侠提供一个追踪过程的思路,即从前台出问题时起,可以追踪到是因为package invalid 了,造成前台的查询很慢!
谢谢!
建议从这里读取,最简单。
除非自动重新编译不通过,则会出现问题。
2、当然,最好不要依赖自动重新编译,在多用户并发环境中,可能会造成因对象
锁定等并发问题。
3、可以编写一个程序编译无效对象,并通过JOB定时调用,并可发送告警邮件。
简单思路:
1)通过视图dba_objects取得无效对象。
2)使用alter <对象类型> <名称> compile;语句进行编译。
注意,如果有依赖关系对象级联失效,需要通过dba_dependencies视图取得最底层失效对象先进行编译,
然后才能编译上层对象。
3)使用utl_smtp中的方法发送邮件。
4)另外,oracle还提供了包dbms_utility.compile_schema来编译整个schema(用户)下的无效对象,
省去了1)2)步的麻烦。
如何查看那些对象被锁定了,然后再看一下这个锁定的对象正大被那些session请求呢?