li
  当前位置:主页 > 性能优化 > 文章内容
li
新建对象也可能导致存储过程的失效
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:6  

以前一直认为修改、删除对象和回收权限才会导致存储过程的状态变为INVALID,这两天在读TOM的书时突然想到,新建对象也可能导致存储过程的状态发生变化。


测试的例子很简单:

SQL> CREATE OR REPLACE PROCEDURE P_TEST AS
2 BEGIN
3 FOR I IN (SELECT * FROM DUAL) LOOP
4 NULL;
5 END LOOP;
6 END;
7 /

过程已创建。

SQL> COL OBJECT_NAME FORMAT A30
SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'P_TEST';

OBJECT_NAME STATUS
------------------------------ -------
P_TEST VALID

SQL> CREATE SYNONYM DUAL FOR T;

同义词已创建。

SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'P_TEST';

OBJECT_NAME STATUS
------------------------------ -------
P_TEST INVALID

导致过程状态变为INVALID的原因是Oracle判断对象的顺序:Oracle首先寻找当前用户下的对象,然后才是PUBLIC同义词。因此,当前用户新建了一个与过程中使用的PUBLIC同义词同名的对象,导致了Oracle过程访问的对象发生了变化,于是过程的状态变成了INVALID。

因此,建立对象时也应当小心,应当尽量避免创建与PUBLIC同义词同名的对象。




  上一篇: 将IP地址转化为数值   下一篇: 新增对象对调用者权限存储过程的...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·将IP地址转化为数值
·UTL_FILE包的简单例子
·计算个人所得税的函数
·一个处理操作系统文件属性的小函...
·自定义聚集函数访问远端对象(三...
·自定义聚集函数访问远端对象(二...
·自定义聚集函数访问远端对象(一...
·RETURNING语句几个小问题
·过程执行报错ORA-4068
·10g的MAX、MIN的bug
·新增对象对调用者权限存储过程的...
·调用者权限过程的权限问题
·调用者权限存储过程的权限特点
·VIEWS是关键字吗
·数值超过NUMBER最大表示范围的问...
·数值超过NUMBER最大表示范围的问...
·数值超过NUMBER最大表示范围的问...
·数值超过NUMBER最大表示范围的问...
·数值超过NUMBER最大表示范围的问...
·ORA-28595错误
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接