Question & Answer
Question
英語環境のターミナルから、シフト JIS (IBM-943) のデータベースに接続すると SQL0332N で接続できません。
接続するにはどうすればよいでしょうか。
Cause
Db2 アプリケーションとデータベースは互換性のあるコード・ページでのみ接続可能です。
たとえば、シフト JIS (IBM-943) と互換性があるコード・ページは、以下のページのグループ D-1 と N-1 にリストされています。
また、Unix/Linux で Db2 アプリケーションはデフォルトで LC_CTYPE をもとにコード・ページを決定します。
たとえば、AIX で LANG=Ja_JP (LC_CTYPE=Ja_JP) であれば、アプリケーション・コード・ページは 943 になります。
たとえば、AIX で LANG=Ja_JP (LC_CTYPE=Ja_JP) であれば、アプリケーション・コード・ページは 943 になります。
表 35. 日本、テリトリー ID: JP
コード・ページ グループ コード・セット ロケール オペレーティング・システム
-------------- -------- -------------- -------- --------------------------
943 D-1 IBM-943 Ja_JP AIX
ここで LANG=C (LC_CTYPE=C) を設定すると、アプリケーション・コード・ページは 819 (グループ S-1) になり、データベースの 943 (グループ D-1) と互換性がないために、接続要求は SQL0332N で失敗します。
このとき、サーバーの db2diag.log には以下のようなログが記録されます。
このとき、サーバーの db2diag.log には以下のようなログが記録されます。
2019-01-31-01.55.45.569842-300 I20997A660 LEVEL: Severe
PID : 24183112 TID : 60882 PROC : db2sysc
INSTANCE: db2inst1 NODE : 000 DB : DB943
APPHDL : 0-2759 APPID: *LOCAL.db2inst1.190131065655
AUTHID : APPUSER1 HOSTNAME: db2srv1
EDUID : 60882 EDUNAME: db2agent (DB943)
FUNCTION: DB2 UDB, base sys utilities, sqeApplication::SetupCodePageInfo, probe:200
RETCODE : ZRC=0x800F005B=-2146500517=SQLO_NOTABLE "No conversion table exists"
DIA8102C Conversion table not loaded. Source code page "819", Target
code page "897", method "", handle "".
2019-01-31-01.55.45.570588-300 I21658A543 LEVEL: Severe
PID : 24183112 TID : 60882 PROC : db2sysc
INSTANCE: db2inst1 NODE : 000 DB : DB943
APPHDL : 0-2759 APPID: *LOCAL.db2inst1.190131065655
AUTHID : APPUSER1 HOSTNAME: db2srv1
EDUID : 60882 EDUNAME: db2agent (DB943)
FUNCTION: DB2 UDB, base sys utilities, sqeApplication::AppStartUsing, probe:20
DATA #1 : Hexdump, 4 bytes
0x0700000068FFC484 : FFFF FEB4 ....
2019-01-31-01.55.46.324848-300 E23284A832 LEVEL: Error
PID : 24183112 TID : 60882 PROC : db2sysc
INSTANCE: db2inst1 NODE : 000 DB : DB943
APPHDL : 0-2759 APPID: *LOCAL.db2inst1.190131065655
AUTHID : APPUSER1 HOSTNAME: db2srv1
EDUID : 60882 EDUNAME: db2agent (idle)
FUNCTION: DB2 UDB, DRDA Application Server, sqljsPostProcessingConnectAttach, probe:649
MESSAGE : DIA5000C A DRDA AS token "RECOVERABLE" was detected. The diagnostic
data returned is (SRVDGN): "FUNCTION ID = 0013 , PROBE POINT = 0649 ,
TRACE POINT = 0150 , SUBCODE1 = FFFFFFFF8005006D, SUBCODE2 =
FFFFFFFFFFFFFEB4, SUBCODE3 = 0000000000000000, ERROR MSG = SQLAM:
CONNECT failed. CCSID specified on ACCRDB not supported".
Answer
Db2 のアプリケーション・コード・ページは DB2CODEPAGE 変数で上書きできます。
このため、アプリケーションが参照する DB2CODEPAGE 環境変数を、データベースと互換性のあるコード・ページに設定することで接続できるようになります。
このため、アプリケーションが参照する DB2CODEPAGE 環境変数を、データベースと互換性のあるコード・ページに設定することで接続できるようになります。
ただし、DB2CODEPAGE 環境変数を OS のターミナルと互換性のないものに設定すると、ターミナル上で文字化けが発生します。たとえば、ターミナルがシフト JIS にもかかわらず、DB2CODEPAGE を 954 (EUC-JP) に設定すると、接続はできますが出力結果は文字化けします。
設定例
- コード・セットがシフト JIS (IBM-943) のデータベースを作成します。
$ db2 create db db943 using codeset IBM-943 territory JP DB20000I The CREATE DATABASE command completed successfully.
- LANG を C に設定してデータベースに接続すると SQL0332N で失敗します。
$ export LANG=C $ db2 terminate $ db2 connect to db943 SQL0332N Character conversion from the source code page "819" to the target code page "UNKNOWN" is not supported. SQLSTATE=57017
- DB2CODEPAGE に互換性のあるコード・ページを設定すると、terminate で CLP を再起動してから接続できます。
$ export DB2CODEPAGE=943 $ db2 terminate DB20000I The TERMINATE command completed successfully. $ db2 connect to db943 Database Connection Information Database server = DB2/AIX64 11.1.4.4 SQL authorization ID = DB2INST1 Local database alias = DB943
運用上の注意点
- DB2CODEPAGE はデータベース・サーバーでなく Db2 アプリケーションが参照する変数です。アプリケーションの環境変数に設定し、アプリケーションが再起動してその環境変数を参照して有効になります。
- 不適切な DB2CODEPAGE 変数の使用は文字化けやデータ破壊の原因になるため、結果を予測できない場合は使用しないでください。
- 不明なアプリケーションが継続的に互換性のないコードページで接続を試行しているために db2diag.log に定期的に DIA8102C が記録される場合、db2pdcfg を利用して不明なアプリケーションの接続元やアプリケーション名を特定できます。
- データベース・サーバーにインスタンス・オーナーでログインします。
- DIA8102C を記録すると db2cos を実行するように db2pdcfg で設定します。
注:以下の設定では 5 回 DIA8102C を記録すると db2pdcfg の設定は解除されます。db2pdcfg -catch diagstr=DIA8102C count=5
- db2diag.log に DIA8102C が記録されると DIAGPATH に <db2sysc_pid>.<edu_id>.<node_id>.db2pd.<db_name>.txt が生成され、これに含まれる db2pd -agent にアプリケーション・プログラム名が記録されています。
- (オプション) 設定が不要になった場合は db2pdcfg で設定を解除します。
db2pdcfg -catch clear
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlRAAU","label":"Codepage"}],"ARM Case Number":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
15 August 2023
UID
ibm10869852