Oracle Troubleshoot : ORA-00600: internal error code, arguments: [qeshQBNextBuffer.1], [], [], [],

Oracle Troubleshoot : ORA-00600: internal error code, arguments: [qeshQBNextBuffer.1], [], [], [],

สวัสดีครับห่างหายกันไปนานเพราะติดภาระกิจเยอะ วันนี้มีปัญหาสดใหม่ที่ประสบมาฝาก แต่อาจเป็นปัญหาที่ไม่ค่อยเกิดขึ้นบ่อยนักและสามารถแก้ไขได้ มาดูรายละเอียดกันครับ

Cause :
ปัญหานี้เป็น Bug ที่เกิดขึ้นใน Oracle Enterprise Edition : 10.2.0.3.0 และเกิดขึ้นได้กับเครื่องทุก Platform
เป็นปัญหาที่เกิดขึ้นเมื่อมีการเรียกใช้ “HASH GROUP BY..” (แต่ไม่ได้เกิดทุกครั้งที่เรียกใช้ เป็นเพียงบางครั้งที่ไปโดน
bug พอดี) โดย HASH GROUP BY นี้จะถูกเรียกใช้เมื่อเรามีการรัน “SELECT … FROM … GROUP BY…” Statement

Solution :
1. แก้แบบชั่วคราว โดยเรียกใช้ alter session

 
alter session set “_gby_hash_aggregation_enabled”=false

 

2. หรือระบุ Hint ไม่เรียกใช้ Hash ใน SELECT Statement ดังนี้

 SELECT /*+ no_use_hash_aggregation */ ….FROM …WHER …GROUP BY …
 

Case Study :

ตัวอย่างที่ผมเจอคือ ต้องการสร้างตารางใหม่ที่มีการกรองความซ้ำซ้อนของข้อมูล โดยเรียกใช้ GROUP BY ดังนี้

 CREATE TABLE C_FINAL_NO_DUP
AS
SELECT  CODE,
MIN(SEND_DATE) BEGIN_DATE,
MAX(SEND_DATE) END_DATE,
SUM(AMOUNT) AMOUNT,

FROM C_DAILY_LOG
WHERE TRUNC(SEND_DATE) = TRUNC(SYSDATE)
GROUP BY
CODE, …;

 

ปรากฎว่าขึ้น Error แบบนี้

 Elapsed: 00:00:00.09
FROM C_DAILY_LOG
                     *
ERROR at line 20:

ORA-00600: internal error code, arguments: [qeshQBNextBuffer.1], [], [], [],
[], [], [], []
 
 


 

คราวนี้จึงทำการใส่ Hint จะได้หน้าตาดังนี้แล้วลองเรียกใหม่ก็สามารถสั่งทำงานได้ครับ

 CREATE TABLE C_FINAL_NO_DUPAS
 SELECT  /*+ no_use_hash_aggregation */
CODE,

MIN(SEND_DATE) BEGIN_DATE,

MAX(SEND_DATE) END_DATE,

SUM(AMOUNT) AMOUNT,

FROM C_DAILY_LOG

WHERE TRUNC(SEND_DATE) = TRUNC(SYSDATE)

GROUP BY

CODE ;

 

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *