关于在运行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. 2、ansilbe常用模块详解及inventory介绍

    Ansible ansible格式: ansible <host-pattern> [-f forks] [-m module_name] [-a args] args: 用法 key=v ...

  2. toggle 1.9 以后就被删除了

    toggle 1.9 以后就被删除了, 1.8.x  以前可用. $(function(){ $(".p_title").toggle( function(){ $(this).n ...

  3. 折腾了好久的地图缩放 ngui 各种偷懒实现

    当时找到一篇cocos2dx 地图缩放的  很遗憾我用不了  也要记录一下 免得以后用ugui可以用 转 http://blog.csdn.net/cocosnode/article/details/ ...

  4. BZOJ 2754 【SCOI2012】 喵星球上的点名

    题目链接:喵星球上的点名 首先可以发现姓和名两个串就是逗你玩的.在两个串中间插入一个\(10001\),当成一个串做就可以了. 于是我们的问题转化为了: 有\(n\)个串\(A_1,A_2,\dots ...

  5. hdu 3094 A tree game 树上sg

    A tree game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  6. 什么是 MIME TYPE?

    文章来源: http://baike.baidu.com/item/MIME https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_H ...

  7. 面试题中关于String的常见操作

    题目1: 将用户输入的一段话,每个单词的首字母大写, 每个单词之间的空格调整为只有一个,遇到数字,将数字与后一个单词用下划线 "_" 进行连接 题目2:将 i @@ am @@@ ...

  8. vim的简单使用

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...

  9. cyberduck的SSH登录

    1.通过配置SSH秘钥. 2.不点匿名(不要点匿名),如果非要填一个名字的话,你写root就行. 3.书签.

  10. XLua与CSharp交互的采坑点 : 热修复返回值为 Int 的CSharp方法

    1.假如CS的一个类中有如下逻辑: using System.Collections; using System.Collections.Generic; using UnityEngine; usi ...