Oracle中无效数据库对象的处理方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle中无效数据库对象的处理方法
Oracle总是会尝试自动重编译无效的PL/SQL对象和视图,但是可能不会成功。虽然Oracle可能建议手动地进行编译,不过我们并非必须进行这个操作。通常无效对象的产生是由于数据库迁移,针对无效对象,我们可以采取重编译和索引重建。
1.1、标识无效的对象
为了标识数据库中的所有无效的对象,我们可以作为SYSTEM用户或其他有权限的用户做如下查询。
SQL> select owner, object_name, object_type
from dba_objects
where status = 'INVALID';
1.2、修正无效的对象
编译对象
SQL> alter procedure ADD_NUMS compile;
Procedure altered.
如果编译成功,就不存在问题,如果编译失败,就需要找出失败的原因。
SQL> show errors
如果希望确定编译错误的原因,通常需要首先使用DBA_DEPENDENCIES视图。
SQL> desc dba_dependencies;
Name Null? Type
----------------------------------------- -------- ---------------
OWNER NOT NULL VARCHAR2(30)
NAME NOT NULL VARCHAR2(30)
TYPE VARCHAR2(17)
REFERENCED_OWNER VARCHAR2(30)
REFERENCED_NAME VARCHAR2(64)
REFERENCED_TYPE VARCHAR2(17)
REFERENCED_LINK_NAME VARCHAR2(128)
DEPENDENCY_TYPE VARCHAR2(4)
如果要重新编译成百上千的的无效对象,可以运行下面命令。
SQL> @?/rdbms/admin/utlrp
--编译无效对象脚本utlrp.sql
$ sqlplus '/as sysdba' @?/rdbms/admin/utlrp.sql
utlrp.sql脚本可以在数据库运行的状态下执行以编译、数据库中的invalid对象.
oracle建议在对数据库进行迁移、升级、降级后都运行一遍utlrp.sql以编译无效对象
编辑于联动北方技术论坛