次のコードでスケジュールされた SAS ジョブを実行すると、ORA-00600 が表示されます。
BEGIN
MERGE INTO MA_CDM.CI_CONTACT_HISTORY ch USING
(
SELECT
VC.CONTACT_ID,
CASE CNTRL_GRP_FLG
WHEN 1
THEN '_20'
WHEN 0
THEN '_03'
END AS STATUS
FROM
(
SELECT DISTINCT
COMMUNICATION_SK
FROM
SAS_USER.resp_mp_1781661608
)
MPC
INNER JOIN
(
SELECT
CONTACT_ID,
COMMUNICATION_SK,
CNTRL_GRP_FLG
FROM
MA_CDM.V_CONTACT
WHERE
STATUS_CD = 'New'
)
VC
ON
(
MPC.COMMUNICATION_SK = VC.COMMUNICATION_SK
)
)
t ON
(
ch.CONTACT_ID = t.CONTACT_ID
)
WHEN MATCHED THEN
UPDATE
SET
ch.UPDATE_DATE = sysdate,
ch.CONTACT_HISTORY_STATUS_CD = t.STATUS;
MERGE INTO MA_CDM.CI_CONTACT_HISTORY ch USING
(
SELECT DISTINCT
vc.CONTACT_ID,
st.CONTACT_HISTORY_STATUS_CD AS STATUS
FROM
SAS_USER.resp_mp_1781661608 mpc
INNER JOIN MA_CDM.V_CONTACT vc
ON
(
mpc.communication_sk = vc.communication_sk
AND mpc.CLIENT_OW_ID = vc.CLIENT_OW_ID
)
INNER JOIN MA_CDM.CI_CONTACT_HISTORY_STATUS st
ON
trim(UPPER(mpc.EVENT_TYPE)) = trim(UPPER(st.CONTACT_HISTORY_STATUS_DESC))
)
t ON
(
ch.CONTACT_ID = t.CONTACT_ID
)
WHEN MATCHED THEN
UPDATE
SET
ch.UPDATE_DATE = sysdate,
ch.CONTACT_HISTORY_STATUS_CD = t.STATUS;
INSERT
INTO
MA_CDM.CI_RESPONSE_HISTORY rh
(
CELL_PACKAGE_SK ,
TREATMENT_SK ,
TREATMENT_HASH_VAL ,
RESPONSE_SK ,
CLIENT_OW_ID ,
RESPONSE_DTTM ,
RESPONSE_CHANNEL_CD ,
INFERRED_RESPONSE_FLG ,
RESPONSE_VALUE_AMT ,
RESPONSE_DT ,
RESPONSE_TRACKING_CD ,
PROCESSED_DTTM ,
COMMENTS ,
EXPORTED_FLG
)
SELECT
ch.CELL_PACKAGE_SK ,
ch.TREATMENT_SK ,
ch.TREATMENT_HASH_VAL ,
chr.RESPONSE_SK ,
r.CLIENT_OW_ID ,
r.EVENT_DATE ,
chr.RESPONSE_CHANNEL_CD ,
'N' ,
NULL ,
TRUNC(r.EVENT_DATE) ,
ch.RESPONSE_TRACKING_CD ,
sysdate ,
r.EVENT_COMMENT ,
0
FROM
SAS_USER.resp_mp_1781661608 r
INNER JOIN MA_CDM.V_CONTACT ch
ON
(
r.communication_sk = ch.communication_sk
AND r.CLIENT_OW_ID = ch.CLIENT_OW_ID
)
LEFT JOIN MA_CDM.CI_RESPONSE_CHANNEL_RESPONSE chr
ON
(
ch.CHANNEL_CD = chr.RESPONSE_CHANNEL_CD
AND UPPER(chr.RESPONSE_CHANNEL_RESPONSE_CD) = upper(r.EVENT_TYPE)
)
WHERE
upper(trim(r.EVENT_TYPE)) IN ('OPENED', 'CLICKED', 'SHARED',
'CLICKED_PARTNER', 'RATED', 'ACCEPTED', 'DECLINED');
COMMIT;
END;
このブロックを手動で実行すると、エラーは発生しません。
Alert.log:
<msg time='2016-06-01T02:00:16.643+03:00' org_id='oracle' comp_id='rdbms'
msg_id='3550398128' type='INCIDENT_ERROR' group='Generic Internal Error'
level='1' host_id='DB-prod-01' host_addr='127.0.0.1'
prob_key='ORA 600 [kkmupsViewDestFro_4]' upstream_comp='' downstream_comp='SQL_Semantic'
ecid='' errid='61939' detail_path='/data1/app/oracle/diag/rdbms/sasorcl/sasorcl/trace/sasorcl_ora_1311.trc'>
<txt>Errors in file /data1/app/oracle/diag/rdbms/sasorcl/sasorcl/trace/sasorcl_ora_1311.trc (incident=61939):
ORA-00600: internal error code: [kkmupsViewDestFro_4], [24106], [24125], [], [], [], [], [], [], [], [], []
</txt>
</msg>
トレース ファイルのエラー:
========== FRAME [33] (opipls()+11038 -> opiosq0()) ==========
defined by frame pointers 0x7fff8ca41210 and 0x7fff8ca40b20
CALL TYPE: call ERROR SIGNALED: no COMPONENT: (null)
DB のバージョンは 11.2.0.1.0 です。このエラーは、ソース テーブルが空であるために表示される可能性があります (SAS_USER.resp_mp_1781661608)。しかし、手動で実行したときにこのコードがエラーなしで機能する理由がわかりません。