koko的oracle杂货铺

 

一个小技巧


在生产环境里,很多情况下需要更新一些频繁访问的procedure,package,function等数据库对象。如果这些对象的访问频繁到一定程度的时候,在做create or replace的时候就会遇到很大的麻烦,经常会导致数据库出现大量的latch,严重的时候会导致数据库瘫痪。但是采用下面的方法就不会有这种麻烦:

假设现在有一访问非常频繁的procedure:prc_tst

1.利用prc_tst建立和prc_tst一模一样的prc_tst1和prc_tst2

2.drop procedure prc_tst;

3.create public synonym prc_tst for prc_tst1;

4.需要做更新的时候,更新prc_tst2,然后create or replace synonym prc_tst for prc_tst2;

5.视情况决定更新prc_tst1,需要回滚则不更新,不需要回滚就更新。

6.下次再做更新的时候,更新prc_tst1.

 

在我们的环境中,原来更新此类对象的时候是需要在数据库端做操作对应用有影响的,现在就非常简单了。





 
 
 
 
评论:

不错的小技巧,很简单,也很实用

发表于 白鳝 在 2008年12月09日, 05:52 下午 CST #

不错的小技巧,很简单,也很实用

发表于 白鳝 在 2008年12月09日, 05:52 下午 CST #

不错的小技巧,很简单,也很实用

发表于 白鳝 在 2008年12月09日, 05:53 下午 CST #

不错的小技巧,很简单,也很实用

发表于 baishan2 在 2008年12月09日, 05:53 下午 CST #

还请老白讲讲这里面的原理 比如之前是什么latch 竞争是发生在什么位置 改变方法后属于什么latch 竞争是发生在什么位置 等等 多谢了

发表于 koko 在 2008年12月10日, 02:30 下午 CST #

procedure失效.library cache竞争.

发表于 zwfha 在 2008年12月11日, 10:20 上午 CST #

发表一条评论:
  • HTML语法: 启用
 

Valid XHTML or CSS?

[This is a Roller site]
Theme by koko.
 
© koko