ORA-00600:[32695]、[hash aggregation can't be done]エラー解決
開発過程において、要求されたフィールドが多く、且つgroup by統計を経なければならないため、プログラムのスケジュールが一定期間後にエラーが発生した場合、ORA-00600:[32695]、[hash aggregation can't be done]は、オンラインの解決方法を参照して、プログラムを記憶した上で使用する方法を解決し、現在転載してください。
以下は原文です
それともあのhash group byアルゴリズムの問題ですか?ログファイルには以下の記録があります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
1.方法1これはシステムの権限が必要で、この方式を提案しません。
alter session set“_gbyuhash gagations”=false;
2.この方式が可能であれば、プログラムにこれを追加します。
hintで解決できます
以下は原文です
それともあのhash group byアルゴリズムの問題ですか?ログファイルには以下の記録があります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
***
ACTION
NAME
:(SQL - ) 2010-09-03 14:27:54.594
*** MODULE
NAME
:(PL/SQL Developer) 2010-09-03 14:27:54.594
*** SERVICE
NAME
:(HQYDB1) 2010-09-03 14:27:54.594
*** SESSION ID:(3205.17923) 2010-09-03 14:27:54.594
*** 2010-09-03 14:27:54.594
ksedmp: internal
or
fatal error
ORA-00600: internal error code, arguments: [32695], [hash aggregation can
't be done], [], [], [], [], [], []
Current SQL statement for this session:
create table zou_201008_cell_id as
select /* g_all_cdr02,60 */
calling_num mobile_number,
lac,
lpad(cell_id,5,'
0
') cell_id,
count(*) c,
sum(call_duration) call_duration,
sum(decode(record_type,'
00
',1,0)*call_duration) moc_call_duration,
sum(decode(record_type,'
01
',1,0)*call_duration) mtc_call_duarion
from g_all_cdr02
where substr(calling_num,1,7) in (select mobile_prefix from zou_mobile_prefix)
group by
calling_num ,
lac,
lpad(cell_id,5,'
0')
----- Call Stack Trace -----
calling call entry argument
values
in
hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedst+001c bl ksedst1 100000000 ? 11055A9A0 ?
ksedmp+0290 bl ksedst 104A54870 ?
ksfdmp+0018 bl 03F30204
kgeriv+0108 bl _ptrgl
kgesiv+0080 bl kgeriv 1050BE654 ? 1050BE604 ?
0000027E5 ? 080000000 ?
07FFFFFFF ?
ksesic1+0060 bl kgesiv 43300000FFFF5310 ?
4530000000000000 ?
000000071 ? 000000001 ?
000000000 ?
qeshPartitionBuildH bl 01F9CA24
D+04bc
qeshGBYOpenScan2+02 bl qeshPartitionBuildH 0000027E5 ? 1105C06C0 ?
34 D
qeshGBYOpenScan+001 bl qeshGBYOpenScan2 FFFFFFFFFFF5740 ? 11055A938 ?
8 000000000 ? 000000010 ?
qerghFetch+05e8 bl qeshGBYOpenScan 000001000 ?
rwsfcd+0054 bl _ptrgl
qerltFetch+036c bl 03F2EB1C
ctcdrv+4160 bl 01F9C898
opiexe+2884 bl ctcdrv 100000001 ? 100000001 ?
110467F30 ?
opiosq0+19f0 bl opiexe FFFFFFFFFFF8B50 ?
2824422142420820 ?
FFFFFFFFFFF8C10 ?
kpooprx+0168 bl opiosq0 300000000 ? 000000000 ?
000000000 ? A4000000000000 ?
kpoal8+0400 bl kpooprx FFFFFFFFFFFB464 ?
FFFFFFFFFFFB068 ?
1BF000001BF ? 100000001 ?
000000000 ? A40000000000A4 ?
000000000 ? 1103878F8 ?
opiodr+0ae0 bl _ptrgl
ttcpip+1020 bl _ptrgl
opitsk+1124 bl 01F9F2A0
opiino+0990 bl opitsk 000000000 ? 000000000 ?
opiodr+0ae0 bl _ptrgl
opidrv+0484 bl 01F9E0E8
sou2o+0090 bl opidrv 3C02DC1BBC ? 44065F000 ?
FFFFFFFFFFFF3A0 ?
opimai_real+01bc bl 01F9B9F4
main+0098 bl opimai_real 000000000 ? 000000000 ?
__start+0098 bl main 000000000 ? 000000000 ?
--------------------- Binary Stack Dump ---------------------
今回は、アプリケーションの人が、alter sessionの役割領域を知らないので、PL/SQL Developerツールの異なるウィンドウ(つまり、同じセッションではない)で実行されました。およびgroup by動作に関するSQLは、unpublished bug:6471770をトリガする。私達は比較的に簡単にworkoundでこのBugを避けます。1.方法1これはシステムの権限が必要で、この方式を提案しません。
/* _gby_hash_aggregation_enabled */
alter system set「_gbyuhash uggggaregational bled」=false;alter session set“_gbyuhash gagations”=false;
2.この方式が可能であれば、プログラムにこれを追加します。
hintで解決できます
/* NO_USE_HASH_AGGREGATION hint */
select
/*+ NO_USE_HASH_AGGREGATION */ ....