Ora-600 [17059]

前一段时间碰到的问题.

环境:

DB:Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi

OS SunOS 5.10 Generic_127111-11 sun4u sparc SUNW,Netra-T12

具体的错误:

ORA-00600: internal error code, arguments: [17059], [0x4468DA9C8], [], [], [], [], [], []

处理:

alert 文件里找到相应的trace文件, trace文件的内容:

LIBRARY OBJECT HANDLE: handle=48af69c08 mtx=48af69d38(0) cdp=237

name=把错误时执行的SQL

hash=5a6bb2113c18cd8df5bb3c573f18f594 timestamp=02-14-2009 17:20:24

namespace=CRSR flags=RON/KGHP/TIM/OBS/PN0/DBN/[10410040]

kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch#=13 hpc=0230 hlc=0230

lwt=48af69cb0[48af69cb0,48af69cb0] ltm=48af69cc0[48af69cc0,48af69cc0]

pwt=48af69c78[48af69c78,48af69c78] ptm=48af69c88[48af69c88,48af69c88]

ref=48af69ce0[48af69ce0,48af69ce0] lnd=48af69cf8[48af69cf8,48af69cf8]

LOCK OWNERS:

lock user session count mode flags

-------- -------- -------- ----- ---- ------------------------

4853f7498 44d7742f0 44d7742f0 28 N [00]

4851e9170 48c75ffd8 48c75ffd8 4 N [00]

4858bd740 48c762938 48c762938 9 N [00]

LIBRARY OBJECT: object=4468da9c8

type=CRSR flags=EXS[0001] pflags=[0000] status=VALD load=0

CHILDREN: size=32768

child# table reference handle

------ -------- --------- --------

0 446a07ac8 446a07738 405a31f18

1 446a07ac8 449e543b8 405a31d98

2 446a07ac8 4477d37a8 3d4835f18

3 446a07ac8 4491e8ef8 3d4835d98

…….

5787 3cd3b0a48 3cd994b68 48a7a9fd0

5788 3cd3b0a

*** DUMP FILE SIZE IS LIMITED TO 5242880 BYTES ***

trace 文件塞满了. 根据文件metalink 138554.1, 查了一相应sqlversion_count=8988, 这个基本上就确定child cursor过多造成的, 顺便查一下整个数据库version_count>1000的情况,返回的几条记录:

SQL> select sql_id,version_count,parse_calls,executions,loads,invalidations from v$sqlarea where version_count>1000;

6zbp51skh49f2 3916 32 32 64 0

gbftwawzjjxcn 8988 1057 1045 8227 0

2qx781fxmpz4t 1084 136 136 2600 5944

8jns7knftkk4m 13575 2876 2873 12809 0

4fjsujmk4m5s1 2449 24 24 37 0

295hw2vhbmsbv 13043 3479 3466 12278 0

上万呀, 为什么会有这么多的版本?查一下参数cursor_sharing=similar

在文档364845.1里给出了cursor_sharing不能共享的情况:

1- Literal SQL is not shared in PL/SQL block. Have details about it in Note.285447.1

2- Oracle does not share cursors if literals are used in non equality predicates (eg >, <, >=, <=, LIKE).

3- Oracle does not share cursor neither, if literals are used in equality predicates with histograms on the column.

查一下,刚才出问题的那条SQL,确有非等到值操作。把cursor_sharing改回到EXACT, 第二天查看整个数据库的最高版本在30以下。

Cursor_sharing设置成force,similar,还是时不时的碰到一些问题。

[@more@]

请使用浏览器的分享功能分享到微信等