フェデレーテッド・データベースの COLUMN_LENGTH_AUTO_VARIATION オプションの設定

COLUMN_LENGTH_AUTO_バリエーション構成オプションを設定して、ニックネーム列の長さを自動的に変更するかどうかを制御できます。 ニックネーム列の長さを拡張すると、フェデレーテッド・データベースとリモート・データ・ソースの間でコード・ポイント・サイズが異なる場合に、データおよび挿入の切り捨てが回避されます。

このタスクについて

デフォルトでは、COLUMN_LENGTH_AUTO_VARIATION が設定されていない場合、ニックネームの長さは変換規則に従って自動的に拡張されます。 COLUMN_LENGTH_AUTO_VARIANCE 構成オプションには、以下の 3 つの設定があります。
Y
CHAR および VARCHAR 列の場合、ニックネーム列の長さは、リモート・コード・ページに従って自動的に変更されます。 CHAR タイプの場合、ニックネーム列の長さが拡張後の CHAR の最大長より大きい場合 (ほとんどの場合、最大値は 255)、列タイプは変更されません。 長さ超過の文字は切り捨てられます。 VARCHAR タイプの場合、ニックネーム列の長さが拡張後の VARCHAR の最大長より大きい場合 (ほとんどの場合、最大値は 32672)、列タイプは変更されず、超過した文字は切り捨てられます。
N
CHAR 列と VARCHAR 列の場合、リモート・コード・ページが何であっても、ニックネーム列の長さは変更されません。 長さ超過の文字は切り捨てられます。
F
CHAR 列と VARCHAR 列の場合、列の長さはリモート・コード・ページに応じて自動的に変更されます。 CHAR タイプの場合、ニックネーム列の長さが CHAR の最大長 (ほとんどの場合、最大値は 255) より大きいと、列タイプは VARCHAR に変更されます。 長さ超過の文字は切り捨てられません。 VARCHAR タイプの場合、ニックネーム列の長さが拡張後の VARCHAR の最大長より大きい場合 (ほとんどの場合、最大値は 32672)、列タイプは変更されず、超過した文字は切り捨てられます。
注:
  • COLUMN_LENGTH_AUTO_VARIATION オプションに設定された値を変更しても、ニックネームが再作成されるまでは、既存のニックネームには影響しません。
  • ニックネーム列タイプを CHAR から VARCHAR に変更すると、照会のプッシュダウンに影響を与える可能性があります。 プッシュダウン機能を拡張することも、照会をプッシュダウンできなくなるまでパフォーマンスを低下させることもできます。 影響について詳しくは、 プッシュダウンの機会に影響を与えるサーバー特性を参照してください。

プロシージャー

フェデレーテッド・サーバーの作成時に COLUMN_LENGTH_AUTO_VARIATION オプションを設定します。
CREATE server "<federated_server_name>" type <server_type> version <version_number> wrapper "<wrapper_name>" authorization "xxxx" password "xxxxxxxx" options (node '<federation_node_name>', dbname '<federation_database_name>', password 'Y', COLUMN_LENGTH_AUTO_VARIATION 'Y|N|F')

以下の例は、フェデレーテッド・データベース接続を作成する際のさまざまな COLUMN_LENGTH_AUTO_VARIANCE 設定からの出力を示しています。 この例では、リモート・データベースは列の長さが 86 の ibm-943 エンコードを使用します。 フェデレーテッド・データベースは UTF8 エンコードを使用します。
ここでは、オプションが「N」に設定されているため、列の長さの変更はありません。
CREATE server "SERVER1" type db2/cs version 11 wrapper "WRAPPER1" authorization "xxxx" password "xxxxxxxx" options (node 'FEDNODE', dbname 'DATASDB', password 'Y', COLUMN_LENGTH_AUTO_VARIATION 'N')
DB20000I  The SQL command completed successfully.

CREATE NICKNAME "NICK1" FOR "SERVER1"."xxxx"."CHAR86"
DB20000I  The SQL command completed successfully.

describe table "NICK1"

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
C1                              SYSIBM    CHARACTER                   86     0 Yes

  1 record(s) selected.
ここでは、オプションが「Y」に設定されています。これにより、列の長さが最大 CHAR 長の 255 バイトに増加します。
CREATE server "SERVER1" type db2/cs version 11 wrapper "WRAPPER1" authorization "xxxx" password "xxxxxxxx" options (node 'FEDNODE', dbname 'DATASDB', password 'Y', COLUMN_LENGTH_AUTO_VARIATION 'Y')
DB20000I  The SQL command completed successfully.

CREATE NICKNAME "NICK1" FOR "SERVER1"." xxxx "."CHAR86"
DB20000I  The SQL command completed successfully.

describe table "NICK1"

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
C1                              SYSIBM    CHARACTER                  255     0 Yes

  1 record(s) selected.
ここでは、オプションが「F」に設定されています。これにより、列の長さとデータ・タイプの両方が変更されます。
CREATE server "SERVER1" type db2/cs version 11 wrapper "WRAPPER1" authorization "xxxx" password "xxxxxxxx" options (node 'FEDNODE', dbname 'DATASDB', password 'Y', COLUMN_LENGTH_AUTO_VARIATION 'F')
DB20000I  The SQL command completed successfully.

CREATE NICKNAME "NICK1" FOR "SERVER1"." xxxx "."CHAR86"
DB20000I  The SQL command completed successfully.

describe table "NICK1"

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
C1                              SYSIBM    VARCHAR                    258     0 Yes

  1 record(s) selected. 

以下の例は、最初の例セットのバリエーションで、リモート・データベースは列の長さが 10 の ibm-943 エンコードを使用します。 フェデレーテッド・データベースは UTF8 エンコードを使用します。
ここで、オプションは「Y」に設定されています。これにより、列の長さが 3 倍に増加します。
CREATE server "SERVER1" type db2/cs version 11 wrapper "WRAPPER1" authorization "xxxx" password "xxxxxxxx" options (node 'FEDNODE', dbname 'DATASDB', password 'Y', COLUMN_LENGTH_AUTO_VARIATION 'Y')
DB20000I  The SQL command completed successfully.

CREATE NICKNAME "NICK2" FOR "SERVER1"." xxxx"."CHAR10"
DB20000I  The SQL command completed successfully.

describe table "NICK2"

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
C1                              SYSIBM    CHARACTER                  30      0 Yes

  1 record(s) selected.
ここで、オプションは「F」に設定されます。これにより、列の長さも 3 倍に増加します。
CREATE server "SERVER1" type db2/cs version 11 wrapper "WRAPPER1" authorization "xxxx" password "xxxxxxxx" options (node 'FEDNODE', dbname 'DATASDB', password 'Y', COLUMN_LENGTH_AUTO_VARIATION 'F')
DB20000I  The SQL command completed successfully.

CREATE NICKNAME "NICK2" FOR "SERVER1"." xxxx"."CHAR10"
DB20000I  The SQL command completed successfully.

describe table "NICK2"

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
C1                              SYSIBM    CHARACTER                  30      0 Yes

  1 record(s) selected.