关于在运行ORACLE 包发生ORA-04068 / ORA-04065 / ORA-06508 代码异常的原因只有一个,那就是包含了全局变量/常量的包,在会话保留期间被执行了编译。

对于此类错误,我翻看了大量其他博主的博客,有以下内容可供各位参考:

http://jasonvogel.blogspot.co.uk/2008/03/how-to-deal-with-frustrating-ora-04068.html

http://www.itpub.net/thread-1019858-1-1.html

http://dbj2ee.blogspot.co.uk/2007/10/dealing-with-oracle-plsql-error-ora.html

http://blog.csdn.net/ningxuezhu/article/details/8880545

http://blog.csdn.net/fm0517/article/details/4866361

http://www.sosdb.com/tech/oracle_rac/45bbs2.htm

http://zheng19851.iteye.com/blog/2001904

http://www.bijishequ.com/detail/88954

http://www.cnblogs.com/zhangxsh/p/3494303.html


大致得到的结论如下:

.全局变量不要和相关的函数、存储过程定义在一个包里面,而是单独定义,单独定义的目的是减少被重新编译的概率。
.不要使用全局变量,如果要使用,则参考1.

这是对于系统设计之初的情况,在设计的时候已经考虑到这三种情况了,可以优雅的处理。

但是对于已经在使用的程序,如果不能很确定的梳理出Package依赖关系,那么这将是一场灾难。

不过可以用这两位的方法作为参考(个人没有使用过更改系统设置和Spring环绕通知的方法,持保留意见。)


http://blog.csdn.net/ningxuezhu/article/details/8880545

3。如果你的项目中用到了Spring框架,那你一定会知道Spring的环绕通知,所谓环绕通知,就是在方法执行前和执行后都会调用这个通知,在这个通知里,你可以改变传入方法的参数,也可以修改方法的返回值,当然还有前置通知和后置通知,不懂的朋友自己去查资料吧,我的打算是给需要调用包的方法都加上环绕通知,然后在方法执行完判断是否出现了4068异常,如果出现了此异常,就再去执行一次,这样就不会出现查不到数据的情况了,而且源代码不需要改动,只要加配置文件和一个类就Ok,如果没有用到spring那就自己想办法吧,可以在执行的时候判断是否出现4068异常,然后再重新查询,反正思路大致就是这样,网上还有一种做法,我觉得也还不错,就是将callableStatement,PreparedStatement,Statement这些类中的执行数据库操作的方法重写,然后判断有没有出现4068异常,如果出现,再执行一次,这要求你在有可能出现4068异常的地方执行数据库操作都使用自己重写过的类,如果项目庞大并且已经成型,你会晕的,如果在项目搭建的时候就考虑到4068异常,这也未尝不是一个好方法。

(其中提到的重写执行数据库操作的方法可以参考http://www.cnblogs.com/huanghongbo/p/8371230.html)


http://www.sosdb.com/tech/oracle_rac/45bbs2.htm

解决方法如下:
alter system set event '10046 trace name context off';
alter system set timed_statistics=false;

如果remote_dependencies的值是timestamp,也就是系统对远程对象的合法性检查时用的方法是时间戳法
alter system set remote_dependencies_mode
利用以上SQL将系统参数改变后,又根据数据库的当前情况调整了一些有可能 引发这个情况的系统参数后,系统报告ora-4068等错误的频率大大降低,从以前的一天几千次改变成一天出现不到10次
当然,以上是在不改变应用程序的情况下进行的,如果可以修改应用程序的话,问题的解决会顺利很多,这样的错误一般是因为应用程序编写的不太严谨而造成的。
该系统是由国家公安部统一下发的,该系统采用了大量的ORACLE包与存储过程,而且包跟过程全部都是以加密方式在数据库利保存。也就是根本不可能从应用程序方面来解决这个问题。
系统的WEBSPHERE端,所有业务逻辑全部是在JAVA包中,也是编译过的,所以针对该系统无法分析其源代码来解决这个错误,只能是针对ORACLE与WEBSPHERE服务器来解决。
通过解决这个问题也积累了大量的针对oracle 4068 4065经典错误解决方法的经验,在此做一记录,以更好的为更多出现这个错误的系统取得有效的帮助。

ORA-04068 / ORA-04065 / ORA-06508 详细说明的更多相关文章

  1. Oracle启动中,spfile.ora、init<SID>.ora、spfile<SID>.ora 这三个文件正确的先后顺序是什么?

    Oracle启动中,spfile.ora.init<SID>.ora.spfile<SID>.ora 这三个文件正确的先后顺序是什么? 解答:启动数据库,使用startup命令 ...

  2. oracle--本地网络配置tnsnames.ora和监听器listener.ora

    文件tnsnames.ora 是给orcl客户端使用 配置本地网络服务:(客户端) 第一种使用暴力方式直接操作: 修改:C:\app\Administrator\product\11.2.0\dbho ...

  3. Oracle的tnsnames.ora配置(PLSQL Developer)

    首先打开tnsnames.ora的存放目录,一般为D:\app\Administrator\product\11.2.0\client_1\network\admin,就看安装具体位置了. 步骤阅读 ...

  4. listener.ora/sqlnet.ora/tnsnames.ora配置文件详解

    oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下. 英文说明: The ...

  5. Oracle的sqlnet.ora与password文件试验

    先看有没有sqlnet.ora [oracle@localhost ~]$ cd $ORACLE_HOME[oracle@localhost dbhome_1]$ cd network[oracle@ ...

  6. 转载《Oracle的tnsnames.ora配置(PLSQL Developer)》

    源地址:https://www.cnblogs.com/qq3245792286/p/6212617.html. 首先打开tnsnames.ora的存放目录,一般为D:\app\Administrat ...

  7. [转帖]sqlnet.ora常用参数

    sqlnet.ora常用参数 注﹕在修改sqlnet.ora文件之后重新启动监听﹐修改才能生效﹗﹗﹗ oracle网络设置主要包括三个文件,sqlnet.ora\ lisnter.ora\ tnsna ...

  8. PLSQL连接ORACLE配置字符串简介 oracle网络配置 三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora原理解释

    PLSQL连接ORACLE配置字符串简介 oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora原理解释 oracle网络配置三个配置文件 lis ...

  9. oracle安装完成后目录中不论有没有tnsnames.ora和listener.ora文件 PLSQL都能连上的问题解决方法

    今天遇到这个问题了,发现listener.ora文件和tnsnames.ora文件在Net Work文件夹下没有,正常情况下安装完oracle或者是oracle Client是会有的,但是在Net M ...

  10. oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子

    1.解决问题:TNS或者数据库不能登录.      最简单有效方法:使用oracle系统提供的工具 netca 配置(把原来的删除掉重新配置)     $netca  2.然而,仍有疑问:如何指定'l ...

随机推荐

  1. 洛谷P1803 凌乱的yyy dp

    我要日更嘤嘤嘤>_< 原题戳>>https://www.luogu.org/problem/show?pid=1803<<(其实是戳不动的,复制粘贴吧) 题目背景 ...

  2. C++类模板和模板类

    C++ 中有一个重要特性,那就是模板类型.类似于Objective-C中的泛型.C++通过类模板来实现泛型支持. 1 基础的类模板 类模板,可以定义相同的操作,拥有不同数据类型的成员属性. 通常使用t ...

  3. fee photo

    别样网 pexels Gratisography picjumbo lifeofpix foodiesfeed    

  4. 踩坑记录:spring boot的POST请求数据注入不了的问题

    概述: 今天在使用spring boot框架的时候,踩了一个坑,是关于control层request body依赖注入的问题的,内容如下: 进过: 由于目前公司采用的系统架构,要求把springboo ...

  5. 如何将exe注册为windows服务,直接从后台运行

    方法一:使用windows自带的命令sc 使用sc create 方法创建. 如:注册服务 sc create ResharperServices binpath= D:\ResharperServi ...

  6. js_计时器之setInterval

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. php 建站 多域名配置 自定义重定向

    1. 申请一个域名 , 当多个域名使用. 比如 申请一个顶级域名为 .com 后缀的一级域名 :mine.com, 一般允许绑定四五个二级域名,比如 www.mine.com  . mine.mine ...

  8. 浅谈Java简单实现的生产者与消费者问题

    一.面对生产者和消费者的问题,首先我们得明白几点: 生产者:生产数据:消费者:消费数据.消费者在没有数据可供消费的情况下,不能消费:生产者在原数据没有被消费掉的情况下,不能生产新数据.假设,数据空间只 ...

  9. Unity --- MeshRenderer之网格合并

    创建如图所示的对象结构,parent为空对象,然后将下面的代码挂载到parent对象上运行即可. using UnityEngine; using System.Collections; public ...

  10. 最简单的解决Chrome浏览器主页被hao123、360和2345篡改的方法是什么

    最简单的解决Chrome浏览器主页被hao123.360和2345篡改的方法是什么 一.总结 一句话总结:打开chrome的安装目录,将chrome.exe改成chrome1.exe即可,然后发送一个 ...