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 ...
随机推荐
- 【NOI 2009】诗人小G
Problem Description 小 \(G\) 是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用 ...
- Python 爬虫入门3种方法
Python 2.0 url = "http://www.baidu.com" print '第一种方法' response1 = urllib2.urlopen(url) pri ...
- JS实现 进度条 不用控件
demo1 <html> <head> <title>进度条</title> <style type="text/css"&g ...
- PostgreSQL 扩展开发基础教程
搭建基础结构 安装扩展 sudo apt-get install postgresql-contribcreatedb stupsql stucreate extension pg_buffercac ...
- newborn, infant, toddler以及baby的区别
1.An infant (from the Latin word infans, meaning "unable to speak" or "speechless&quo ...
- Java中类似C#中Task.wait()的类CountDownLatch
当主线程开辟多个子线程,而又需要这些子线程都执行完成后再执行主线程后续的操作,在C#中可以通过Task的wait方法来实现,然而在Java中也有类型的类CountDownLatch,具体用法如下: p ...
- Mysql数据库如何自动备份
Mysql数据库如何自动备份 一.总结 一句话总结:用navicat配合windows的批处理即可 navicat windows批处理 二.Mysql数据库自动备份 参考:Mysql数据库自动备份 ...
- Linux 各种软件的安装-ElasticSearch
安装elasticSearch之前先将一个问题: 重启服务器后发现 ssh上不去了,后来采用另外一种方式登录进去发现 sshd服务没启动. 解决过程:先查看sshd的状态 service sshd s ...
- appium自动化测试 环境搭建
最 近接手的项目是移动端自动化测试 ,需要用的appium ,头一回使用, 项目特点:1)数据有时效性,需要在短时间内验证大量数据, 2) 人工去一个一个核对发现不了太多BUG. 环境搭建:参考虫师的 ...
- android -------- 颜色的半透明效果配置
最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AA ...