您的位置:首页 > 数据库 > Oracle

oracle编译无效对象

2012-11-15 22:36 681 查看
查询无效对象SQL: SELECT COUNT (*) FROM user_objects WHERE object_type IN ('PROCEDURE','FUNCTION','TRIGGER','VIEW','PACKAGE') AND status = 'INVALID'; 很多时候,由于数据库的变更或迁移,会导致数据库中的对象失效。比如EXP/IMP操作后,由于对象之间可能存在复杂的倚赖关系,所以手工编译通常无法顺利通过。Oracle提供一个脚本用于按照顺序/依赖关系重新编译失效对象。 这个脚本是: $ORACLE_HOME/rdbms/admin/utlrp.sql 其中会调用: $ORACLE_HOME/rdbms/admin/utlrcmp.sql $Oracle_Home = Oracle的安装根目录 (d:\oracle\ora92) 这是一个通用脚本,可以在任意时候运行以重新编译数据库失效对象。通常我们会在Oracle的升级指导中看到这个脚本,Oracle强烈推荐在migration/upgrade/downgrade之后,通过运行此脚本编译失效对象。但是注意,Oracle提醒,此脚本需要用SQLPLUS以SYSDBA身份运行,并且当时数据库中最好不要有活动事物或DDL操作,否则极容易导致死锁的出现(这是很容易理解的)。如果仔细阅读一下utlrcmp.sql脚本,大家就会知道Oracle的操作方式。 执行命令如下: SQL> conn sys/change_on_install@orcl as sysdba 已连接。 SQL> @d:\oracle\ora92\rdbms\admin\utlrp.sql; PL/SQL 过程已成功完成。 表已创建。 表已创建。 表已创建。 索引已创建。 表已创建。 表已创建。 视图已建立。 视图已建立。 程序包已创建。 没有错误。 程序包主体已创建。 没有错误。 PL/SQL 过程已成功完成。 PL/SQL 过程已成功完成。 而在一般情况下,我们一般使用PLSQL Developer工具中的‘compile Invalid Objects’来查找失效对象,然后再编译;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: