- PR -

DB2のエクスポート時の警告(SQL3132W)に関する件

1
投稿者投稿内容
なお
常連さん
会議室デビュー日: 2004/02/17
投稿数: 29
投稿日時: 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型では発生します。)

以上、よろしくお願い致します。
コミコニ
会議室デビュー日: 2004/07/26
投稿数: 2
投稿日時: 2005-03-26 03:45
問題が起きないためにixf形式でexportしていて問題が起きるのは悲しいですね
保存される定義との関係でうまくいかないのかもしれませんね。
(バグかどうかは分かりませんが)

CHARACTERでも発生するとのことですが・・

たぶんCHARACTERでnot null では起きないんじゃないでしょうか?
(Nullや可変の位置取り情報で10byte+αなのに10byteで保存しようとしているのかも)

SQLを書き換えることで対応する事が出来るかもしれませんね

回答になってませんが・・試してみてください。

PS:サーバ上ではうまくいくんでしょうか?
  構成アシスタントの設定でOSの設定も関係有るかも
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2005-03-26 18:39
警告の出たテーブルにはDBCSが入っているのではないでしょうか?
(バグなのだと思いますが)
なお
常連さん
会議室デビュー日: 2004/02/17
投稿数: 29
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)