关于ORA-开关的数据库错误,总是很恼人,而且都很不好解决。但最后发现都有解决办法。
今天我的一个进程跑了1个小时后来挂掉了,并且有如下错误信息:
ORA-21500: internal error code, arguments: [kghex: not first], [0x000000000], [], [], [], [], [], []
ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=128] [si_int=1152656480] [
ORA-01000: maximum open cursors exceeded
ORA-06512: at "EVOMS.PKG_FE_INPORTDATA", line 1110
ORA-06512: at line 1
没得办法,只好从网上找答案,但是。虽然大家都遇到过其中的一个或者多个错误,他们的解决办法都不适合我。
有些人说是oracle的问题,换台服务器就解决了。有些说数据库配制什么什么的问题,一个个那么高深,我也看不懂。
只好重新审视自己的代码,看是否有问题。因为我之前也遇到过数据库的报错,最后发现是自己的代码有问题。
最后终于找到了一处不合理的地方,我没有用m_p_conn->terminateStatement(p_stmt); 这一句来释放资源,因为我之前
没用,但代码运行都没有问题。想是不是这东西还有什么用,再查资料,发现一段很有价值的信息:
“表示已经达到一个进程打开的最大游标数。这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()和 conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。
一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭。
对于出现ORA-01000错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。实际上,代码中的隐患并没有解除。
而且,绝大部分情况下,open_cursors只需要设置一个比较小的值,就足够使用了,除非有非常特别的要求。”
虽然我的代码是用c++写的,但这意思是一样的,于是果断加上那句。
最后跑了5,6个小时,现在都还很健在。
嘻嘻,我的问题是这样解决的。
一个教训,写程序不拘小节,必遭劫难!
关于ORA-开关的数据库错误,总是很恼人,而且都很不好解决。但最后发现都有解决办法。今天我的一个进程跑了1个小时后来挂掉了,并且有如下错误信息:ORA-21500: internal error code, arguments: [kghex: not first], [0x000000000], [], [], [], [], [], []ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=128] [si_int=11
在Linux下多线程操作数据库中时不时
出现
ORA-
24550错误,导致程序崩溃退出,在网上查找资料,说在sqlnet.ora文件中增加以下几行:
DIAG_ADR_ENABLED=FALSE
DIAG_SIGHANDLER_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE
尝试着照以上修改sqlnet.ora配置文件,然后重启oracle监听服务,程序运行一段
今天写了个多线程访问数据库的程序,一直运行的好好的,突然就
出现
了下面的
问题
:
ORA-
24550: signal received: [si_signo=11] [si_errno=0] [si_code=1] [si_int=0] [si_ptr=(nil)] [si_addr=0x1]
Killed
我写了两个线程,第一个访问数据库都成功,但当第二个线程执行到数据库操作时,就突然
出现
了上面这么个玩意。
印象中以前也遇到过,但现在忘了
解决
方法了。
想了会,怎么会
出现
这情况,我又没有改程序,只是加了
1. 最近使用多线程数据库编程是遇到
ORA-
24550错误。程序直接崩溃掉了。(靠~,想插个图进来不会弄!)
查询oracle server端trace文件中没有任何错误。看来是oracle客户端的
问题
。
oracle文档中解释:
ORA-
24550: unhandled signal #%ld received. %s
*Cause:
Serious error: sig
ORA-
00600 是 Oracle 数据库遇到内部错误时的错误代码。这种错误通常是由于 Oracle 内部故障引起的,需要进行详细的诊断和分析才能确定其根本原因。但是我们可以尝试一些常见的
解决
办法
来
解决
这个
问题
。
1. 重启数据库实例
ORA-
00600 可能是由于数据库实例的某些部分
出现
了故障,重启数据库实例可能会
解决
该
问题
。
2. 执行 Oracle 提供的工具
Oracle 提供了一些工具来
解决
ORA-
00600 错误,例如
ORA-
600/
ORA-
7445/
ORA-
700 Error Look-up Tool(Metalink 文档 ID 153788.1),该工具可以帮助我们分析和
解决
这些错误。
3. 执行数据库修复工具
Oracle 还提供了一些数据库修复工具,例如 DBVERIFY 工具、UTL_REPAIR 工具等,这些工具可以帮助我们修复损坏的数据块、数据文件等。
4. 升级数据库版本
如果使用的是已知存在
ORA-
00600 错误的旧版本 Oracle 数据库,可以考虑升级到最新版本以
解决
该
问题
。
需要注意的是,
ORA-
00600 错误通常是由于 Oracle 内部故障引起的,
解决
办法
可能因情况而异,因此建议在
解决
问题
时先备份数据库,以免数据丢失。最好的
解决
办法
是联系 Oracle 客户支持寻求帮助。