web-dev-qa-db-ja.com

DB2 LOAD data into table-エラーメッセージの解釈

ファイルからテーブルにデータをロードするときにいくつかの制約の問題が発生しました

**
SQL3109N  The utility is beginning to load data from file
"xag".
SQL3500W  The utility is beginning the "LOAD" phase at time "07/30/2012
23:33:53.199615".
SQL3519W  Begin Load Consistency Point. Input record count = "0".
SQL3520W  Load Consistency Point was successful.
SQL3116W  The field value in row "F12-33856" and column "9" is missing, but
the target column is not nullable.
SQL3185W  The previous error occurred while processing data from row
"F12-33856" of the input file.
SQL3227W  Record token "F12-33856" refers to user record number "440439".**

db2 LOAD client from data  of del MESSAGES msg replace INTO TABLE_L ;

このメッセージは、行440439に制約の問題があることを示していると思いましたが、そうではないようです。誰かがメッセージを読む方法を知っていますか?

2
zinking

IBMによると SQL3227W 状態:

「レコードトークンtoken1は、ユーザーレコード番号token2を参照しています。説明

テーブルのLOAD、IMPORT、またはEXPORT中にエラーまたは警告が発生しました。問題が発生した時点でCPUの並列処理は1より大きく、SQLレコードが書き込まれ、特別な一意のトークンでユーザーレコードを識別しました。このメッセージは、一意のレコードトークンをソースユーザーデータのレコード番号にマップするのに役立ちます。 ユーザーの応答

適切なアクションについては、返された元のSQLメッセージを参照してください。」

したがって、これは前のエラーに戻ることを示します。そして次のもの SQL3185W は言う:

"入力ファイルの行row-numberからのデータの処理中に前のエラーが発生しました。説明

このメッセージは、メッセージファイルにリストされた前のメッセージ(SQL3306など)のエラーが発生した行を識別します。 ユーザーの応答

アクションは必要ありません。」

だから...頭にそれを釘付けにして、私たちは本当にこれらのメッセージの前に何が来るかを見る必要があります。質問に投稿できる出力のログはありますか?その場合、結果の解釈を支援することができます。

そうは言っても、厄介な「SQL」メッセージの意味を見つけるのに最も役立つので、私が行ったようにインフォメーションセンターをざっと見てみることを強くお勧めします。私が見つけたリンクは9.5のものでした。使用しているDB2のバージョンに切り替えるだけで、最も正確な情報を入手できます。ほぼすべての目的でインフォメーションセンターを使用しています。

編集:更新すると非常に役立ちます。ここにエラーがあります:

SQL3116W  The field value in row "F12-33856" and column "9" is missing, but
the target column is not nullable.
SQL3185W  The previous error occurred while processing data from row
"F12-33856" of the input file.
SQL3227W  Record token "F12-33856" refers to user record number "440439".**

つまり、テーブルの「列9」にnullが書き込まれ、その列にnullでない制約があるようです。ここでの秘訣は、問題があったレコードを見つけることです。これは、2つのトークンでマークされています。 (F12-33856および440439)。私は最初に440439から始めると思います。それが主キーになる可能性があるように私には思えます。ただの推測です。ただし、少なくとも、問題がnull以外のフィールドのnull値であることがわかります。

1
Chris Aldrich

エラーメッセージは基本的にこれを言います:440439行の場合、9番目の列の区切り文字の間に何もありません。したがって、NULLと見なされますが、テーブルでは9番目の列にNULL値を使用できません。そのため、行440439はテーブルにロード(挿入)されていません。

0
Ramazan Polat

私はDB2を初めて使用しますが、一連のトラブルシューティングと成功の後、いくつかの支援を提供できます。

ファイルをエクスポートするときは、ファイルが適切に区切られていることを確認してください。

たとえば、次の表では

CREATE TABLE ADMIN.TEST
    (C1     VARCHAR(30)  ,
     C2     TIMESTAMP    , 
     C3     DECIMAL(7,2) ,
     C4     CHAR(1))
     ORGANIZE BY COLUMN;

ファイルは次のように区切られている必要があります。

"Liszt"
"Hummel",,187.43, H
"Grieg", 2006-05-23-15.55.53.209971, 66.34, G
"Satie", 2006-05-22-19.34.14.947681, 818.23, I

Aginityなどの一部のエクスポートツールは、1つのフィールドで2つのフィールドをツリーフィールドに結合します。したがって、システムにより大きなフィールドとして読み取られます。お役に立てれば。

0
Steven