IBM Support

[Db2] 11.5.6, 11.1.4.6: CREATE NICKNAME が SQL0901N (Invalid nickname column length) で失敗することがある

Troubleshooting


Problem

Db2 11.1.4.6 および 11.5.6 以降、CREATE NICKNAME ステートメントが SQL0901N (Invalid nickname column length) で失敗することがあります。
このとき、db2diag.log には以下のようなエントリーが記録されます。
2021-10-05-03.51.32.286210-420 E285974E1613          LEVEL: Info (Origin)
PID     : 62974                TID : 140562581677824 PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000            DB   : SAMPLE
APPHDL  : 0-239                APPID: *LOCAL.db2inst1.211005105053
UOWID   : 1                    ACTID: 1
AUTHID  : db2inst1             HOSTNAME: db2server
EDUID   : 23                   EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, SW- common services, sqlnn_cmpl, probe:650
MESSAGE : ZRC=0x801A006D=-2145779603=SQLZ_CA_BUILT
          "SQLCA has already been built"
DATA #1 : String, 62 bytes
An unexpected error was detected during statement compilation.
DATA #2 : Boolean, 1 bytes
true
DATA #3 : Boolean, 1 bytes
false
DATA #4 : Boolean, 1 bytes
true
DATA #5 : Boolean, 1 bytes
false
DATA #6 : Hex integer, 4 bytes
0x00000000
DATA #7 : SQLCA, PD_DB2_TYPE_SQLCA, 136 bytes
 sqlcaid : SQLCA     sqlcabc: 136   sqlcode: -901   sqlerrml: 30
 sqlerrmc: Invalid nickname column length
 sqlerrp : SQLRL1D7
 sqlerrd : (1) 0x801A006D      (2) 0x00000000      (3) 0x00000000
           (4) 0x00000000      (5) 0xFFFFFF74      (6) 0x00000000
 sqlwarn : (1)      (2)      (3)      (4)        (5)       (6)
           (7)      (8)      (9)      (10)        (11)
 sqlstate:
DATA #8 : Hex integer, 4 bytes
0x00000040
DATA #9 : String with size, 42 bytes
create nickname N1 for db943.db2inst1.T1
DATA #10: String, 172 bytes
Compiler error stack for rc = -2145779603:
sqlnn_cmpl[300]
sqlnp_main[250]
sqlnp_parser[510]
sqlnp_smactn[180]
sqlnq_create_nickname_stmt[60]
sqlnq_create_nickname_two[80]

Cause

Db2 11.1.4.6 および 11.5.6 でニックネームの列長を自動拡張する機能が追加されました。
連合データベースと、ソース・データベースの文字コードが異なる場合、ニックネームの列長は拡張係数にもとづいて自動的に拡張されます。
たとえば、IBM-943 から UTF-8 への拡張係数は 3 のため、IBM-943 のソース・データベースの CHAR(10) 列は、Unicode の連合データベースのニックネームでは CHAR(30) へ自動拡張されます。

Environment

以下のすべての条件を満たす場合 SQL0901N が返ります。
  • Db2 11.1.4.6 および 11.5.6.0 以降
  • ソース・データベースと連合データベースが異なるコード・ページを使用している
  • ソース・データベースから連合データベースのコード・ページ変換の拡張係数が 1 より大きい
  • ソース・データベースの CHAR 列の列長と拡張係数を積算した結果が CHAR 型の制限 (255バイト) を超過する

Diagnosing The Problem

Resolving The Problem

Db2 11.5.6 の最新セキュリティ修正および 11.5.7 以降では COLUMN_LENGTH_AUTO_VARIATION サーバー・オプションを利用して自動拡張機能を制御できます。
例:自動拡張を無効化
db2 "alter server <server_name> options (add COLUMN_LENGTH_AUTO_VARIATION 'N')"
N: 自動拡張を無効化
Y: 自動拡張を有効化。ただし拡張は型の制限で切り捨て。例 CHAR(100)->CHAR(255)
F: 自動拡張を有効化。拡張が型の制限を超える場合は型を変更。例 CHAR(100)->VARCHAR(300)
このサーバー・オプションは以下の APAR により追加されています。
IT37965: THE REMOTE CHAR COLUMN LENGTH OVER 86 REPORT SQL0901 AFTER THE COLUMN LENGTH AUTO VARIATION
注: 11.5.7 まで COLUMN_LENGTH_AUTO_VARIATION は Db2 ソースでのみ使用可能です。
 
COLUMN_LENGTH_AUTO_VARIATION が利用できない場合、以下のように CHAR と VARCHAR のタイプ・マッピングを作成します。
db2 "CREATE TYPE MAPPING CHR2VARCHR FROM LOCAL TYPE SYSIBM.VARCHAR() TO SERVER <fed_server_name> REMOTE TYPE CHAR()"
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

Document Location

Worldwide

[{"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":"a8m500000008PkvAAE","label":"Federation"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"11.1.0;11.5.0"}]

Document Information

Modified date:
15 August 2023

UID

ibm16571511