ORA-01555で始まる行とそれに関連するSQLステートメントのアラートログの内容をキャプチャする必要があります。
ファイルの内容は以下のとおりです。
Sat Oct 21 12:11:40 2017
Thread 1 advanced to log sequence 143 (LGWR switch)
Current log# 5 seq# 143 mem# 0:
Sat Oct 21 12:12:22 2017
Thread 1 cannot allocate new log, sequence 144
Private strand flush not complete
Current log# 5 seq# 143 mem# 0:
Sat Oct 21 12:12:22 2017
ORA-01555 caused by SQL statement below (SQL ID: 1sfgms7z66zrs, SCN: 0x0401.1e45bbc4):
Sat Oct 21 12:11:48 2017
CREATE INDEX AAD_SAA_ADB_RESULTS_AUD_GTI1 ON AAD_PS_SAA_ADB_RESULTS_AUD_GT (
rpt_date
)
Sat Oct 21 12:20:56 2017
Thread 1 advanced to log sequence 153 (LGWR switch)
Current log# 6 seq# 153 mem# 0:
+REDO_VOL1/DSS1STG/ONLINELOG/group_6.262.957710915
Current log# 6 seq# 153 mem# 1:
+REDO_VOL1/DSS1STG/ONLINELOG/group_6.263.957710917
Sat Oct 21 12:21:11 2017
ORA-01555 caused by SQL statement below (SQL ID: 9ad5awvfvsfd9, Query
Duration=6444 sec, SCN: 0x0401.1e53de65):
Sat Oct 21 12:21:11 2017
SELECT a.EMPLID, a.TEST_ID, a.TEST_COMPONENT, a.SCORE
FROM
ODS_PSE.PS_STDNT_TEST_COMP a,
DSS_RDS.IR_STU_TST_SCR_SAT_VLD_DT_ST b
where
a.TEST_COMPONENT in ('VE','MA')
AND a.EMPLID = b.PRSN_UNIV_ID
AND ROUND(a.SCORE) = a.SCORE
AND a.TEST_ID = b.STU_TST_CD
AND a.TEST_DT = b.TEST_DT
AND a.LS_DATA_SOURCE = b.LS_DATA_SOURCE
UNION
SELECT a.EMPLID, a.TEST_ID, a.TEST_COMPONENT, a.SCORE
FROM
ODS_PSE.PS_STDNT_TEST_COMP a,
DSS_RDS.IR_STU_TST_SCR_SAT_VLD_DT_ST b
where
a.TEST_COMPONENT in ('ERWS','MSS','MT','RT','WLT')
AND a.EMPLID = b.PRSN_UNIV_ID
AND (
(ROUND(a.SCORE) = a.SCORE and a.TEST_COMPONENT in
('ERWS','MSS','RT','WLT'))
or (a.SCORE BETWEEN 10 AND 40 and a.TEST_COMPONENT in ('MT'))
)
AND a.TEST_ID = b.STU_TST_CD
AND a.TEST_DT = b.TEST_DT
AND a.LS_DATA_SOURCE = b.LS_DATA_SOURCE
Sat Oct 21 13:05:01 2017
Thread 1 advanced to log sequence 173 (LGWR switch)
Current log# 5 seq# 173 mem# 0: +REDO_VOL1/DSS1STG/ONLINELOG/group_5.257.957710909
Current log# 5 seq# 173 mem# 1: +REDO_VOL1/DSS1STG/ONLINELOG/group_5.256.957710911
キャプチャしたいコンテンツは次のとおりです。
ORA-01555 caused by SQL statement below (SQL ID: 1sfgms7z66zrs, SCN: 0x0401.1e45bbc4):
Sat Oct 21 12:11:48 2017
CREATE INDEX AAD_SAA_ADB_RESULTS_AUD_GTI1 ON AAD_PS_SAA_ADB_RESULTS_AUD_GT (
rpt_date
)
ORA-01555 caused by SQL statement below (SQL ID: 9ad5awvfvsfd9, Query
Duration=6444 sec, SCN: 0x0401.1e53de65):
Sat Oct 21 12:21:11 2017
SELECT a.EMPLID, a.TEST_ID, a.TEST_COMPONENT, a.SCORE
FROM
ODS_PSE.PS_STDNT_TEST_COMP a,
DSS_RDS.IR_STU_TST_SCR_SAT_VLD_DT_ST b
where
a.TEST_COMPONENT in ('VE','MA')
AND a.EMPLID = b.PRSN_UNIV_ID
AND ROUND(a.SCORE) = a.SCORE
AND a.TEST_ID = b.STU_TST_CD
AND a.TEST_DT = b.TEST_DT
AND a.LS_DATA_SOURCE = b.LS_DATA_SOURCE
UNION
SELECT a.EMPLID, a.TEST_ID, a.TEST_COMPONENT, a.SCORE
FROM
ODS_PSE.PS_STDNT_TEST_COMP a,
DSS_RDS.IR_STU_TST_SCR_SAT_VLD_DT_ST b
where
a.TEST_COMPONENT in ('ERWS','MSS','MT','RT','WLT')
AND a.EMPLID = b.PRSN_UNIV_ID
AND (
(ROUND(a.SCORE) = a.SCORE and a.TEST_COMPONENT in
('ERWS','MSS','RT','WLT'))
or (a.SCORE BETWEEN 10 AND 40 and a.TEST_COMPONENT in ('MT'))
)
AND a.TEST_ID = b.STU_TST_CD
AND a.TEST_DT = b.TEST_DT
AND a.LS_DATA_SOURCE = b.LS_DATA_SOURCE
これが私が使用しているgrepですが、結果からわかるように、ORA-01555の各行とそのSQLステートメント全体のコンテンツをキャプチャしていません。私のネガティブな先読みがうまく機能していない理由がわかりません:
grep -Pzo 'ORA-01555.*\n(^.*[0-9]{2}:[0-9]{2}:[0-9]{2}.*)\n.*(?!.*[0-9]{2}:[0-9]{2}.*\n).+' alert.log
ORA-01555 caused by SQL statement below (SQL ID: 1sfgms7z66zrs, SCN: 0x0401.1e45bbc4):
Sat Oct 21 12:11:48 2017
CREATE INDEX AAD_SAA_ADB_RESULTS_AUD_GTI1 ON AAD_PS_SAA_ADB_RESULTS_AUD_GT (
ORA-01555 caused by SQL statement below (SQL ID: 9ad5awvfvsfd9, Query Duration=6444 sec, SCN: 0x0401.1e53de65):
Sat Oct 21 12:21:11 2017
SELECT a.EMPLID, a.TEST_ID, a.TEST_COMPONENT, a.SCORE
このsedコマンドを試すことができます。
sed -E '/ORA-01555/!d;:A;N;/\n[A-Za-z]{3} [A-Za-z]{3} [0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4}$/!bA;:B;N;/\n[A-Za-z]{3} [A-Za-z]{3} [0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4}$/!bB;s/(.*)\n.*/\1/' infile
行にORA-01555が含まれている場合->パターンスペースに保持します。
日付ではないのに、パターンスペースで次の行を取ります。
パターンスペースに最初のデートを保管してください。
日付ではない間、次の行を続けてください。
日付であるパターンスペースの最後の行を削除します。
パターンスペースを印刷し、最初に戻って、ORA-01555の新しい行を見つけます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加