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