Oracle无效的数据库对象

preview
需积分: 0 1 下载量 196 浏览量 更新于2023-04-22 收藏 416KB PDF 举报
Oracle 无效数据库对象的处理和编译 Oracle 无效的数据库对象是指那些不能正常工作或编译的对象,例如 procedure、function、view 等。这些对象可能由于某些原因而变得无效,例如数据库升级、降级、迁移等操作。 Oracle 总是会尝试自动重编译无效的 PL/SQL 对象和视图,但是可能不会成功。下面将详细介绍如何标识和修正无效的数据库对象。 标识无效的对象 ----------------- 为了标识数据库中的所有无效的对象,我们可以作为 SYSTEM 用户或其他有权限的用户执行以下查询: SQL> select owner, object_name, object_type from dba_objects where status = 'INVALID'; 这将显示出所有无效的对象的拥有者、对象名称和对象类型。 修正无效的对象 ----------------- 编译对象 为了修正无效的对象,我们可以使用 ALTER 语句来编译对象。例如: SQL> alter procedure ADD_NUMS compile; Procedure altered. 如果编译成功,就不存在问题,如果编译失败,就需要找出失败的原因。 查找编译错误的原因 -------------------- 如果编译失败,我们可以使用 SHOW ERRORS 语句来查找错误的原因: SQL> show errors 如果希望确定编译错误的原因,通常需要首先使用 DBA_DEPENDENCIES 视图: SQL> desc dba_dependencies; 这将显示出依赖关系视图的结构。 批量编译无效对象 ------------------- 如果要重新编译成百上千的的无效对象,可以运行以下命令: SQL> @?/rdbms/admin/utlrp --编译无效对象脚本 utlrp.sql $ sqlplus '/as sysdba' @?/rdbms/admin/utlrp.sql utlrp.sql 脚本可以在数据库运行的状态下执行以编译、数据库中的 invalid 对象。 Oracle 建议在对数据库进行迁移、升级、降级后都运行一遍 utlrp.sql 以编译无效对象。 实践一个修正无效对象的例子 ----------------------------- 下面是一个修正无效对象的实践例子: 创建一个新的用户和模式: SQL> grant dba to testuser identified by testuser; Grant succeeded. SQL> conn testuser/testuser Connected. 然后,创建一个表、视图和过程: SQL> create table testtab(n1 number, d1 date); Table created. SQL> insert into testtab values (1, sysdate); 1 row created. SQL> create or replace view v1 as select d1 from testtab; View created. SQL> create or replace procedure p1 as cnt number; begin select count(*) into cnt from testtab; end; / 如果这些对象变得无效,我们可以使用上述方法来修正它们。 处理无效的数据库对象是数据库管理员的重要任务。通过标识和修正无效的对象,可以确保数据库的稳定运行和安全。
身份认证 购VIP最低享 7 折!
30元优惠券