Data Virtualization化のリモートデータソース「Db2クエリ結果が正しくない

最終更新: 2025年3月17日
Data Virtualizationで Db2リモートデータソースのクエリ結果が正しくない

VARCHAR2 互換モードではない Db2 接続タイプを使用する Db2 リモート・データベースに対して、ストリング・データ・タイプを比較する照会を実行すると、これらの照会が誤った結果を戻す可能性があります。

症状

VARCHAR2 互換モードではない Db2 リモート・データベースに対して、Db2 接続タイプを使用して、ストリング・データ・タイプ (CHAR または VARCHAR) を比較する照会をいくつか実行します。 照会はリモート Db2 比較規則に従ってプッシュダウンされるため、ローカル・データベースで得られる結果とは異なる結果が得られます。

例:
select col_char from testable1 union select col_varchar from testable2;
select col_char from testable1 except select col_varchar from testable2;
select col_char from testable1 intersect select col_varchar from testable2;

db2 get db cfg コマンドを実行して、リモート Db2 データベースの構成を確認できます。 以下の例では、データベースは VARCHAR2 互換モードではありません。

$ db2 get db cfg for testdb |grep "Varchar2 compatibility"
Varchar2 compatibility                                  = OFF

問題の解決

この問題を回避するには、照合シーケンス・サーバー・オプションを変更します。
  1. 以下のステートメントを実行して、データ・ソースの内部接続 ID (CID) を識別します。
    select * from DVSYS.LISTRDBC;

    この照会は、クラスター内のすべての接続をリストします。 変更する単一または複数の接続に対する出力の行を検索します。

  2. 以下のコマンドを実行して、変更する接続ごとに、'I' へのこの接続の COLLATING_SEQUENCE パラメーターを変更します。
    ALTER SERVER QPLEX OPTIONS (add <CID>@collating_sequence 'I');
    例:
    ALTER SERVER QPLEX OPTIONS (add DB210000@collating_sequence 'I');