既知の制限事項
これらのトピックでは、Oracle Database Gateway for SQL Serverの既知の制限について説明し、可能な場合に対処するための推奨事項を示します。
この項または「既知の問題点」で示されていない非互換性の問題が発生した場合は、Oracleサポート・サービスに連絡してください。
ノート:
制限に関するご質問や懸念がある場合は、Oracle Support Servicesまでお問い合わせください。複数のオープン取引明細書
SQL Serverへのアクセスには、接続ごとに1つのオープン文またはカーソルが許可されるという制限があります。 2番目の文またはカーソルを同じトランザクションで開いてSQL Serverにアクセスする必要がある場合は、新しい接続が必要です。
この制限により、同じトランザクション内の複数のオープン文またはカーソルは、SQL Serverへの異なる接続を使用するため、相互にロックできます。
この制限を回避するには、コミットを発行するか、ロジックを変更するか、またはその両方を行います。
トランザクション整合性
ゲートウェイはトランザクションの整合性を保証できません。
たとえば、次のような場合です:
- ゲートウェイによって処理された文によってターゲット・データベースで暗黙的なコミットが発生した場合
- 自動コミット・モードで動作するようにターゲット・データベースが構成されている場合
ノート:
特定の文を実行すると、ターゲット・データベースで暗黙的なコミットが発生することがわかっている場合、Oracleでは、文が独自のトランザクションで実行されるようにすることを強くお薦めします。SQL Serverデータベースへの接続が確立されると、ゲートウェイは自動コミット・モードをオフに設定します。
トランザクション機能
ゲートウェイは保存ポイントをサポートしていません。
分散更新トランザクションがゲートウェイに関係していて、ユーザーが保存ポイントを作成しようとすると、次のエラーが発生します:
ORA-02070: database dblink does not support savepoint in this context
デフォルトでは、ゲートウェイはCOMMIT_CONFIRMとして構成されます。
PL/SQLカーソル・ループのCOMMITまたはROLLBACKによるオープン・カーソルのクローズ
PL/SQLカーソル・ループで発行されたCOMMITまたはROLLBACKは、開いているすべてのカーソルを閉じます。
これにより、次のエラーが発生する可能性があります:
ORA-1002: fetch out of sequence
このエラーを回避するには、COMMITまたはROLLBACK文をカーソル・ループの外に移動します。
ストアド・プロシージャ
Oracleトランザクション・マネージャ、Oracle COMMITまたはROLLBACKコマンドは、コミットまたはロールバックを埋め込むストアド・プロシージャを介して発行される変更を制御できません。
結果セットを含むストアド・プロシージャにOracle Database Gateway for SQL Serverを介してアクセスする場合は、異機種間サービスの順次モードで作業する必要があります。
Oracle Database Gateway for SQL Serverを介して複数の結果セットを持つストアド・プロシージャにアクセスする場合は、続行する前にすべての結果セットを読み取る必要があります。
ストアド・プロシージャの出力パラメータは、空の文字列に初期化する必要があります。
パススルー機能
ゲートウェイを通過するSQL文によってSQL Serverデータベースで暗黙的なコミットが発生した場合、Oracleトランザクション・マネージャはコミットを認識せず、Oracle ROLLBACKコマンドを使用してトランザクションをロールバックすることはできません。
DDL文
SQL Serverでは、いくつかのDDL文を独自のトランザクションで実行する必要があり、特定のトランザクションで実行できるDDL文は1つのみです。
これらのDDL文をSQL Serverストアド・プロシージャで使用し、プロシージャ機能を使用してゲートウェイを介してストアド・プロシージャを実行する場合、またはパススルー機能を使用してゲートウェイを介してDDL文を実行すると、エラー状態になることがあります。 これは、ゲートウェイのプロシージャ機能およびパススルー機能では、DDL文が独自の個別のトランザクションで実行されることを保証できないためです。
次のSQL Server DDL文は、ゲートウェイ・パススルー機能で渡そうとした場合、またはそれらを含むSQL Serverストアド・プロシージャを実行した場合、エラー状態を引き起こす可能性があります:
ALTER DATABASECREATE DATABASECREATE INDEXCREATE PROCEDURECREATE TABLECREATE VIEWDISK INITDROP <object>DUMP TRANSACTIONGRANTLOAD DATABASELOAD TRANSACTIONRECONFIGUREREVOKESELECT INTOTRUNCATE TABLEUPDATE STATISTICS
関連項目:
DDL文の詳細は、SQL Serverのドキュメントを参照してください。SQL構文
これらのトピックでは、SQL構文の制限事項を示します。
関連項目:
SQL構文の制限の詳細は、「サポートされているSQL構文および関数」を参照してください。WHERE CURRENT OF句
WHERE CURRENT OF句を含むUPDATE 文およびDELETE文は、Oracle ROWID実装に依存するため、ゲートウェイではサポートされていません。
ゲートウェイを通じて特定の行を更新または削除するには、条件スタイルとしてWHERE句を使用する必要があります。
関数
このトピックでは、Oracle Database Gateway for SQL Serverで関数を使用するための制限について説明します。
関数の使用には、次の制限が適用されます:
- サポートされていない関数は、
LONG列を参照する文では使用できません。 SUBSTR関数の2番目のパラメータとして負の数値が使用されている場合、不正な結果が返されます。 これは、OracleSUBSTR関数とSQL Serverの同等の関数の互換性がないためです。
小文字の表名を使用したSQL*Plus COPYコマンド
SQL*Plus COPYコマンドを小文字の表名とともに使用する場合は、表名を二重引用符で囲みます。
たとえば:
copy from tkhouser/tkhouser@inst1 insert loc_tkhodept using select * from "tkhodept"@holink2;