Oracle无效的数据库对象
需积分: 0 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;
/
如果这些对象变得无效,我们可以使用上述方法来修正它们。
处理无效的数据库对象是数据库管理员的重要任务。通过标识和修正无效的对象,可以确保数据库的稳定运行和安全。


CodeGolang
- 粉丝: 182
最新资源
- 深度学习面试问题及对应《深度学习》中文版页码汇总
- TouchSocket-C#资源
- Ingenious 工作流引擎-PHP资源
- AirPower-Transformer-JavaScript资源
- com-计算机二级资源
- 毕业设计-毕业设计资源
- 人工智能ChatGPT-5:新一代语言模型的技术革新与广泛应用:性能飞跃、多模态能力及社会影响综述
- olympic_predict-美赛资源
- 2025年c语言代码-蓝桥杯资源
- assembly_learning-汇编语言资源
- 深度学习之图像分类数据集:动植物图像分类数据集(10分类)
- 小熊猫C++-C++资源
- eova-Java资源
- CnOCR-Python资源
- swift-Swift资源
- matlab学习-Matlab资源