某次在客户Oracle数据库执行一条建表语句时,报出ORA-600错误。
报错代码如下:
ORA-00600: 内部错误代码, 参数: [rwoirw: check ret val], [], [], [], [], [], [], [], [], [], [], []
相关的建表语句如下:
在报错发生后,在数据库alert日志中查看到如下信息:
Errors in file /u01/app/oracle/diag/rdbms/odsdb/odsdb1/trace/odsdb1_p091_52616.trc (incident=664809):
ORA-00600: 内部错误代码, 参数: [rwoirw: check ret val], [], [], [], [], [], [], [], [], [], [], []
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
经过mos比对与mos id(14275161)报错信息一致,并且对应的数据库版本一致。通过对该报错信息分析,确认为此创建语句触发ora-600报错,经过确定有两种方法可以解决此问题:
1.alter session set "_pred_move_around"=FALSE;
这个参数是可以在系统层面实施的,但这个参数的实施对系统层面有影响,会导致个别语句的执行计划改变,性能变差,毕竟这是一个优化功能,所以从安全角度来讲,建议只在会话层面设置
2.建议打Oracle官方给出的针对此bug的补丁,补丁号为(14275161)此方法可以有效避免触发此类bug,不影响其他语句的执行计划。
由以上信息分析,此次故障为创建表的语句触发Oracle的报错ora-600,经过评估建议打Oracle官方给出的补丁,可以解决此类问题,不对数据库产生其他影响。