このケースは、Focus のデータ処理システムに抽出された Oracle データベースに無効なデータがあった (そして引き続き入ってくる) 現実の状況で発生します。フォーカスは、無効な時間部分を含むいくつかの行で窒息して死にます。その後、Oracle DBA は適切な列から影響を受ける列に日時をコピーして、プロセスを続行できるようにします (ええ、私は知っています)。
問題のトラブルシューティングを支援したところ、Oracle で影響を受ける行で次のことがわかりました。
DUMP(START_TIME)
与えます:
'Typ=12 Len=7: 100,99,255,255,0,0,0'
その間:
TO_CHAR(START_TIME, 'YYYY/MM/DD HH24:MI:SS')
与えます:
ORA-01801: date format is too long for internal buffer
DUMP()
結果、'Typ=12 Len=7: 100,99,255,255,0,0,0'
および格納規則を見ると、列のセマンティック制限をバイパスして、0、-1、-1、-1、-1、-1、-1 または0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
バイト、符号、オーバーフローの解釈方法によっては、0xFF = 255 = -1
結果が生じる可能性があるため、これは「理にかなっています」 。0000/255/255 255:255:255
Oracle はどのような条件 (接続メカニズムなど) で、無効なデータが日時列に入るのを許可しますか?