概述

在日常数据库维护过程中,我们会发现数据库中一些对象(包Package、存储过程Procedure、函数Function、视图View、同义词.....)会失效,呈现无效状态(INVALID)。有时候需要定期检查数据库中存在哪些失效对象,对于存在异常的对象需要重新编译,有些自动失效的对象,一般会在下次调用的时候,会被重新编译,所以这些不需要人工干预。那么为什么对象突然会失效呢?又如何快速、高效的编译失效对象呢?哪些失效的对象不需要我们去重新编译呢?


一、数据库对象失效原因

数据库对象失效的原因很多,这里大致归纳了一些常见的原因:

1、当被引用对象的结构变更时,都会使得相关的依赖对象转变为INVALID状态。

数据库中的对象(存储过程,函数,包,视图,触发器),它们往往需要直接或者间接的引用其它对象,对象的依赖包括直接和间接二种,其中直接依赖是指存储对象直接依赖于被引用对象,而间接依赖是指对象间接依赖于被引用对象

要查看被引用的对象,可以通过下面SQL查看

select * from dba_dependencies where name='&objectname';select * from all_dependencies where name='&objectname';select * from user_dependencies where name='&objectname';

其实不管视图,像存储过程,函数、包等,如果代码本身没有什么错误,只是引用的对象发生了变化。也会失效。但并不影响调用,因为ORACLE在调用时会自动重新编译的,如果其它对象变化后导致编译有错误。这时调用时重新编译后也是错误并处于失效状态,所以调用会出错。

2、发布SQL脚本时(包、存储过程、函数等),没有充分测试,编译时出错,这时对象变为无效。

3、数据库升级、迁移时,出现大量无效对象。

4、 诸如此类各种情况:例如,Oracle 会自动维护分区索引,对于全局索引,如果在对分区表操作时,没有指定update index,则会导致全局索引失效,需要重建。


二、查看失效对象

1、统计失效的对象:

select owner, object_type, status, count(*) from dba_objects where status='INVALID' group by owner, object_type, status order by owner, object_type;

2、查看具体失效对象

col owner for a20;col object_name for a32;col object_type for a16col status for a8select owner, object_name, object_type, status from dba_objects where status='INVALID' order by 1, 2,3;

三、解决对策

1、使用ALTER *** COMPLIE语句手工进行编译,这个适用于少数、个别对象失效

alter package . compile;alter package . compile body;alter view . compile;alter trigger  compile;

2、执行@$ORACLE_HOME/rdbms/admin/utlrp.sql脚本编译数据库失效对象。

许多情况下,由于数据库的升级或迁移,会导致数据库中的对象失效。由于对象之间可能存在复杂的依赖关系,所以手工编译通常无法顺利通过。通常我们会在Oracle的升级指导中看到这个脚本,Oracle强烈推荐在迁移或者升级后,通过运行此脚本编译失效对象。但是此脚本需要用SQLPLUS以SYSDBA身份运行,并且当时数据库中最好不要有活动事物或DDL操作,否则极容易导致死锁的出现。

3、自动编译(慎用,可以手动就手动吧)

ORACLE提供了自动编译的接口dbms_utility.compile_schema(user,false); 调用这个过程就会编译所有失效的过程、函数、触发器、包

exec dbms_utility.compile_schema( 'SCOTT' )

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

oracle vm发现无效设置_Oracle数据库编译失效对象相关命令总结大全,值得收藏相关推荐

  1. oracle用户和mysql用户_oracle数据库解锁和锁定用户命令

    转:http://database.51cto.com/art/200910/158576.htm 在DBA的日常工作中,经常遇到为Oracle用户解锁的操作:这篇文章给出在命令行下进行Oracle用 ...

  2. 内核编译及模块相关命令使用

    本文讲解了怎样进行内核编译及模块相关命令的使用方法. 一 Linux内核相关信息 #查看Linux系统 [root@serv01 ~]# uname Linux #查看所有信息 [root@serv0 ...

  3. oracle 加载数据戽_oracle数据库数据导入导出步骤(入门)

    oracle数据库数据导入导出步骤(入门) 说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp ...

  4. impdp oracle 只导入表结构_oracle数据库怎么导入dmp,只导入数据不导入表结构?...

    使用方法: Exp parameter_name=value or Exp parameter_name=(value1,value2--) 只要输入参数help=y就可以看到所有帮助. EXP常用选 ...

  5. Oracle VM VirtualBox Ubuntu设置共享文件夹

    一.原因 一.为什么需要共享文件夹 在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了. 二 ...

  6. Oracle数据库用户失效对象,Oracle数据库对象失效解决

    项目中开发使用了VPD,数据库用户B的对象的创建依赖于数据用户A,由于用户A的对象进行DDL.迁移或dump等操作,造成了用户B的对象INVALID.应用系统的数据源使用了用户B,因此造成应用系统出错 ...

  7. oracle编译失效对象命令,Oracle 重新编译失效对象的几种方法(转载)

    手工重编译 查看失效对象 COLUMN object_name FORMAT A30 SELECT owner, object_type, object_name, status FROM dba_o ...

  8. html图片怎么设置热区不大小,店铺装修技巧之图片尺寸大全!收藏必备!随时可查看!...

    原标题:店铺装修技巧之图片尺寸大全!收藏必备!随时可查看! 在店铺装修过程中,对于不同的不同位置的图片尺寸要求不同,当图片过大,会自动被裁剪掉,而图片过小,则会周围留下空白,这样的用户体验是极其不好的 ...

  9. oracle mysql事物隔离级别_Oracle数据库事物隔离级别

    事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度. 两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题: 1.幻想读:事务T1读取一条指定where条件的语句,返回结果集.此 ...

最新文章

  1. 多线程 python tcp 图片_Python第四周之网络编程TCP (服务器/客户端; 线程下载图片;线程版服务器和客户端(单人、多人)) UDP...
  2. OTSU算法(也称最大类间差法,有时也称之为大津算法)
  3. 简单易学的机器学习算法——神经网络之BP神经网络
  4. git 工程工作目录下的git相关文件解释
  5. 原生js实现京东商城楼梯效果
  6. OpenCV vs Dlib 人脸检测比较分析
  7. GDI+_VB6_ARGB
  8. AS3 CookBook学习整理(二)
  9. 2100 没有反弹shell_反弹shell | ncbash
  10. vue: 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统上`禁止运行脚本`。(powershell运行策略设置)
  11. AD 常见绿色报错的消除
  12. matlab光学原理仿真应用衍射,基于Matlab的光学衍射实验仿真
  13. python爬虫爬取拉勾网招聘信息
  14. (c语言)字符串的大小写字母转化函数
  15. 基于FPGA的数字交通红绿灯Verilog开发Modelsim仿真
  16. js 将小数转为科学记数法
  17. 智能识别收货地址 javascript
  18. php中尊敬的某某某先生代码,auth.class.php
  19. 计算机游戏测试,性能强劲又不张扬:IT之家游戏测试电脑推荐
  20. PHP代码审计DVWA[CSP Bypass]

热门文章

  1. ps efgrep mysql 命令_mysql常用管理命令
  2. mysql 数据类型怎么用,myMySQL数据库怎么更改表中某字段的数据类型? MySQL数据库使用教程...
  3. flog和flag_FLAG:写作,英语和持续学习
  4. 全国计算机四六级报名时间2015,2015年英语四六级口语考试报名时间:10月25日起...
  5. python 网络编程 异步io_异步IO实现 小例(程序+驱动程序)
  6. 爬虫2-web请求与http协议
  7. 2022大厂面试必问要点总结
  8. lab 2 EIGRP Default Route
  9. 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息...
  10. Hibernate merge和update的区别