Oracle中无效数据库对象的处理方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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以编译无效对象

编辑于联动北方技术论坛

相关文档
最新文档