12 Oracle Database Provider for DRDAの使用に関する制限事項
本来はIBM DB2向けに設計されているアプリケーションをOracle Databaseでカスタマイズまたは維持する際には、様々な制限事項と既知の回避策があります。
12.1 Resynch Manager
Oracle Database Provider for DRDAでは、分散作業単位のためにSync Point Managerサービスがサポートされています。また、ログなしでソース Sync Point Managerを使用する移行の実行中に再同期できるように、Resynchronization Managerサービスもサポートされています。
Oracle Database Provider for DRDAのこのリリースでは、アクティブなインダウト・トランザクションの解決サービスはサポートされていません。移行されたインダウト・トランザクションでは、クライアント・システムとOracle Databaseの間での手動解決が必要です。インダウト・トランザクションの手動解決の詳細は、Oracle® Database管理者ガイドを参照してください。
12.2 カーソルのHOLD属性のセマンティクス
HOLD
属性が設定されているカーソルには次の制限事項があります。
-
リモート作業単位(RUOW)では、
FOR UPDATE
句を使用して準備されたカーソルは、COMMIT
またはROLLBACK
で暗黙にクローズされます。 -
分散作業単位(DUOW)では、
COMMIT
またはROLLBACK
で、オープン・カーソルが含まれているサーバーで更新が行われる場合には、すべてのカーソルが暗黙的にクローズされます。
12.3 DB2パスワードでのブランクの埋込み
パスワードがDRDAで暗号化および送信される場合、8文字未満のパスワードにはDB2 for z/OSによりブランクが挿入されます。その結果、ログオンが失敗し、エラーORA-01017
が発生します。ユーザー・アカウントのパスワードを8
文字以上の長さにすることをお薦めします。
12.4 データ型の制限事項
データ型の使用にはいくつかの制約があります。
12.4.1 DATEデータ型
Oracle DATE
データ型には、DRDA DATE
データ型でサポートされていない時刻コンポーネントが含まれています。Oracle DATE
データに時刻コンポーネントが含まれている場合にそのDATE
データを操作すると、予期されている結果にならないことがあります。整合性を維持するため、OracleネイティブDATE
構文を使用してDATE
データを挿入するときには、時刻コンポーネントを格納しないでください。または、DATE
列をTIMESTAMP
に再マップしてください。
12.4.2 Oracleオブジェクト・リレーショナル・データ型
このリリースでは、オブジェクト・リレーショナル・データ型を使用して定義された列を含むオブジェクトに対する問合せはサポートされていません。
このリリースでは、入力または戻り値の引数にオブジェクト・リレーショナル・データ型を使用して定義されたコール側SQLプロシージャはサポートされていません。
12.4.3 TIMESTAMPデータ型
Oracle Database Provider for DRDAは、小数点以下6桁の固定精度を使用してTIMESTAMP
を表します。
互換性の理由から、TIMESTAMP
データを使用するときには十分に注意してください。場合によってはプログラムでの調整(型キャストなど)を行う必要があります。TIMESTAMP
型キャストの詳細は、Oracle® Database SQL言語リファレンスを参照してください。
12.4.4 TIMESTAMP WITH TIMEZONEデータ型
TIMESTAMP WITH TIMEZONE
の表現は、Oracle DatabaseとDB2で大きく異なります。
Oracle Database Provider for DRDAは、Oracleの表現規則に従ってTIMESTAMP WITH TIMEZONE
を表現します。クライアントとサーバーの間で最適な互換性を維持するため、記述されているタイムゾーン表記のかわりに、4桁のタイムゾーン接尾辞表記(例: -08:00
)を使用します。
12.5 Extended Length Mode
DB2 for z/OSの最新リリース(v11.1)では、カーソルにより生成される問合せ結果でStreaming Layer Bモード・プロトコルがサポートされていません。これらのカーソルはROWSETs
パラメータを使用して定義されます。これによりは、32767バイトのデータを超える行セットが生成されます。
カーソル宣言の例
EXEC SQL DECLARE DT CURSOR WITH ROWSET POSITIONING FOR SEL;
DRDA規格に基づき、ターゲット・サーバーは、特定の問合せの問合せデータが戻される形式を決定できます。Streaming Layer Bモードは、この目的では最も効率的な形式です。ただし、ROWSETsが関連している場合、一部DB2リリースではこのモードはサポートされておらず、DB2クライアント・アプリケーションにエラーが戻されます。
DSNT4081 SQLCODE = —30020, ERROR: EXECUTION FAILED DUE TO A DISTRIBUTION PROTOCOL ERROR THAT CAUSED DEALLOCATION OF THE CONVERSATION: REASON 124C (0100)
このような状況では、DB2はStreaming Layer Bモードのオブジェクトを受け入れません。ただし、Extended Length Modeのオブジェクトは受け入れます。
DB2がStreaming Layer Bモードをサポートするまでは、このモードを有効にするようにPROTOPROC_OPTIONS
構成パラメータを設定できます。
関連トピック
関連項目:
「構成パラメータ」の章のPROTOPROC_OPTIONS
の項。
12.6 DB2 for z/OSログの使用
LOGNAME
LOGNAME
値は、サーバーとクライアントの間で交換される固定されたログ名を指定します。ログ名は<NAME>
の形式である必要があります。ログ名では英数字のみを使用でき、長さは1文字から18文字までです。入力された値または長さが無効である場合、その名前は拒否され、ランダムな名前が生成されます。
LOGTSTMP
LOGTSTMP
値は、サーバーとクライアントの間で交換される固定されたログ・タイムスタンプを指定します。ログ・タイムスタンプは<YYYYMMDDHHMMSSTTTT>
の形式である必要があり、数値のみを使用できます。入力された値または長さが無効である場合、そのタイムスタンプは拒否され、現在の時刻を示すタイムスタンプが生成されます。
drdaas.protoproc_options=”QRYDTA/ELMODE, EXTDTA/ELMODE, LOGNAME/ORACLEDB, LOGTSTMP/201609191201020001”