ORA-04068 / ORA-04065 / ORA-06508 详细说明
关于在运行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 详细说明的更多相关文章
- Oracle启动中,spfile.ora、init<SID>.ora、spfile<SID>.ora 这三个文件正确的先后顺序是什么?
Oracle启动中,spfile.ora.init<SID>.ora.spfile<SID>.ora 这三个文件正确的先后顺序是什么? 解答:启动数据库,使用startup命令 ...
- oracle--本地网络配置tnsnames.ora和监听器listener.ora
文件tnsnames.ora 是给orcl客户端使用 配置本地网络服务:(客户端) 第一种使用暴力方式直接操作: 修改:C:\app\Administrator\product\11.2.0\dbho ...
- Oracle的tnsnames.ora配置(PLSQL Developer)
首先打开tnsnames.ora的存放目录,一般为D:\app\Administrator\product\11.2.0\client_1\network\admin,就看安装具体位置了. 步骤阅读 ...
- listener.ora/sqlnet.ora/tnsnames.ora配置文件详解
oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下. 英文说明: The ...
- Oracle的sqlnet.ora与password文件试验
先看有没有sqlnet.ora [oracle@localhost ~]$ cd $ORACLE_HOME[oracle@localhost dbhome_1]$ cd network[oracle@ ...
- 转载《Oracle的tnsnames.ora配置(PLSQL Developer)》
源地址:https://www.cnblogs.com/qq3245792286/p/6212617.html. 首先打开tnsnames.ora的存放目录,一般为D:\app\Administrat ...
- [转帖]sqlnet.ora常用参数
sqlnet.ora常用参数 注﹕在修改sqlnet.ora文件之后重新启动监听﹐修改才能生效﹗﹗﹗ oracle网络设置主要包括三个文件,sqlnet.ora\ lisnter.ora\ tnsna ...
- PLSQL连接ORACLE配置字符串简介 oracle网络配置 三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora原理解释
PLSQL连接ORACLE配置字符串简介 oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora原理解释 oracle网络配置三个配置文件 lis ...
- oracle安装完成后目录中不论有没有tnsnames.ora和listener.ora文件 PLSQL都能连上的问题解决方法
今天遇到这个问题了,发现listener.ora文件和tnsnames.ora文件在Net Work文件夹下没有,正常情况下安装完oracle或者是oracle Client是会有的,但是在Net M ...
- oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
1.解决问题:TNS或者数据库不能登录. 最简单有效方法:使用oracle系统提供的工具 netca 配置(把原来的删除掉重新配置) $netca 2.然而,仍有疑问:如何指定'l ...
随机推荐
- insert into table (a,b,c) select
本文为博主原创,转载请注明出处: 在项目中,需要统计数据,从基础表中的数据进行统计,并插入到汇总 表中, (1)语句形式为:Insert into Table2(field1,field2,...) ...
- [从零开始搭网站五]http网站Tomcat配置web.xml和server.xml
点击下面连接查看从零开始搭网站全系列 从零开始搭网站 上一章我们在CentOS下搭建了Tomcat,但是还是没有跑起来...那么这一章就把最后的配置给大家放上去. 有两种方式:一种是用 rm -f 给 ...
- _itemmod_stat
制作几种基础模板,用模板快速生成装备 `comment` 备注 `entry`目标装备 entry `src_entry` 模板装备entry `stat_muilt` 属性倍率 `mindmg_mu ...
- Spotlight 监控Linux服务器的性能
Spotlight功能:详细的进程跟踪功能远程连接在线的Unix/Linux的调优指南事件日志跟踪配置警报 详细的进程跟踪功能:Spotlight对具体的Unix / Linux的进程长达24小时的历 ...
- format格式化函数
注意:列表索引设置参数,‘0’是必须的.
- OpenModelica 在特定目录下生成仿真结果文件
OMEdit的仿真结果文件存放在:C:\Users\***\AppData\Local\Temp\OpenModelica\OMEdit 可以在仿真时设置仿真结果文件名,可使用用绝对路径或相对路径 使 ...
- kotlin - 空安全
空安全设计的操作符号 操作符 作用 ? 可空操作符,声明该值可为空 ?. 安全调用操作符 b?.length 如果b非空,就返回b.length,否则返回 null !! 非空断言运算符, ...
- PyMongo官方文档翻译——VNPY
PyMongo是MongoDB数据库的python模块 VNPY默认的数据库,没有采用SQL类型的数据库,而是采用No-Sql类型的MongoDB数据库, 对于想了解VNPY内部结构的童鞋,多多少少会 ...
- 第 3 章 镜像 - 015 - 调试 Dockerfile
如何 debug Dockerfile 通过 Dockerfile 构建镜像的过程 从 base 镜像运行一个容器 执行命令对容器做修改 执行类似 docker commit 的操作,生成一个新的镜像 ...
- Linux 各种软件的安装-Jenkins和svn结合
通常情况下,修改代码,打包,上传,发布,这么个顺序发布程序. 有了Jenkins这些重复性的操作可以统统交给程序自动处理.甚至可以指定发布的时机,例如提交一次svn就自动发布,每天定时发布等. 1:安 ...