- - PR -
DB2のエクスポート時の警告(SQL3132W)に関する件
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2005-03-17 21:50
いつも御世話になっております。なおと申します。
DB2 Ver8.1サーバ(OSはWindows2000 Server)上に作成した、 共通のインスタンス「DB2」に作成した2つの異なるデータベース「DB1」,「DB2」に、 以下のテーブル「TEST」を作成しました。 列名 タイプスキーマ タイプ名 長さ 位取り Null −−−−−−−−−−−−−−−−−−−−−−−−−− A SYSIBM VARCHAR 10 0 いいえ B SYSIBM DATE 4 0 はい C SYSIBM CHARACTER 10 0 はい ※.項目「A」は主キーです。 この2テーブルに対し、以下のエクスポート文 @ db2 =>CONNECT TO DB1 USER username USING password db2 =>EXPORT TO C:\TEST_DB1.exp OF IXF MESSAGES C:\TEST_DB1.log ¥ SELECT * FROM username.TEST db2 =>DISCONNECT DB1 A db2 =>CONNECT TO DB2 USER username USING password db2 =>EXPORT TO C:\TEST_DB2.exp OF IXF MESSAGES C:\TEST_DB2.log ¥ SELECT * FROM username.TEST db2 =>DISCONNECT DB2 をDB2クライアントから実行したところ、以下の様な結果になりました。 (DB2クライアントが入っている端末は異なる2台のWindows2000端末です。) 1) DB2クライアントVer7で@を実行 →成功 2) DB2クライアントVer7でAを実行 →成功 3) DB2クライアントVer8で@を実行 →成功 4) DB2クライアントVer8でAを実行 →ログに警告が出力。 「成功」というのは、以下のメッセージ > SQL3104N エクスポート・ユーティリティーが、ファイル "C:\TEST_DB1.exp" > へのデータのエクスポートを開始しています。 > > SQL3105N エクスポート・ユーティリティーが、"0" > 行のエクスポートを終了しました。 がログに出力していた時であり、 また、「警告」というのは、以下のメッセージ > SQL3104N エクスポート・ユーティリティーが、ファイル "C:\TEST_DB2.exp" > へのデータのエクスポートを開始しています。 > > SQL3132W 列 "A" の文字データがサイズ "10" に切り捨てられます。 > > SQL3132W 列 "C" の文字データがサイズ "10" に切り捨てられます。 > > SQL3105N エクスポート・ユーティリティーが、"0" > 行のエクスポートを完了しました。 が出力していた時です。 「SQL3132W」を調べると、 「文字データ列に、エクスポートできるデフォルトの最大文字列より長い定義サイズがあり、 各値は、指定されたサイズに切り捨てられます。 」 とありましたが、データベースの構成で、「エクスポートできるデフォルトの最大文字列」 という内容に関わる項目がどの部分になるのか、分かりませんでした。 どのパラメータを修正すれば、警告が出力されなくなるのでしょうか? (警告が出力する為、シェルやバッチファイルからエクスポート文を記述したSQLファイルを キックした場合、常に「正常終了では無い」と判断されます。 また、この現象は、DATE型やDECIMAL型の項目では発生せず、 CHARACTER型やVARCHAR型やLOB型では発生します。) 以上、よろしくお願い致します。 |
|
投稿日時: 2005-03-26 03:45
問題が起きないためにixf形式でexportしていて問題が起きるのは悲しいですね
保存される定義との関係でうまくいかないのかもしれませんね。 (バグかどうかは分かりませんが) CHARACTERでも発生するとのことですが・・ たぶんCHARACTERでnot null では起きないんじゃないでしょうか? (Nullや可変の位置取り情報で10byte+αなのに10byteで保存しようとしているのかも) SQLを書き換えることで対応する事が出来るかもしれませんね 回答になってませんが・・試してみてください。 PS:サーバ上ではうまくいくんでしょうか? 構成アシスタントの設定でOSの設定も関係有るかも |
|
投稿日時: 2005-03-26 18:39
警告の出たテーブルにはDBCSが入っているのではないでしょうか?
(バグなのだと思いますが) |
|
投稿日時: 2005-04-04 11:52
返信ありがとうございます。
色々調査していると、どうも「DB2CODEPAGE」という値が影響しているようです。 まず、DB2サーバ側のデータベース「DB1」と「DB2」に対して、 db2 get db cfg for (DB名) を実行すると、以下の差がある事が判明しました。 データベース・コード・ページ ・DB1:1208 ・DB2:943 データベース・コード・セット ・DB1:UTF-8 ・DB2:IBM-943 また、DB2クライアント側にもデータベースコードページをセット出来る事を知り、 「サーバ側:データベースコードページ:943、データベースコードセット:IBM-943」 で、かつ 「クライアント側:データベースコードページ:943でない」 場合のみ、エクスポート自体は行われるが警告が発生する、という事が分かりました。 サーバ側がUTF-8で、クライアント側がIBM-943の場合には警告を発しない理由は分かりませんが、 とりあえず、IXF形式でのエクスポートだから言語コードに関して何も意識しなくていいわけでなく、 基本的にクライアントとサーバのデータベースコードページをあわせておけば問題ない、と思います。 |
1
