データベースでは、次に示す標準のDML文でリモート表を参照することが可能です。
SELECT(問合せ)
INSERT
UPDATE
DELETE
SELECT...FOR UPDATE(異機種間システムでは常にサポートされるとはかぎらない)
LOCK TABLE
結合、集計、副問合せおよびSELECT...FOR UPDATEを含む問合せでは、ローカルおよびリモートの表およびビューをいくつでも参照できます。たとえば、次の問合せは2つのリモート表の情報を結合します。
SELECT e.empno, e.ename, d.dname FROM scott.emp@sales.division3.example.com e, jward.dept@hq.example.com d WHERE e.deptno = d.deptno;
同機種環境では、UPDATE、INSERT、DELETEおよびLOCK TABLE文は、ローカルおよびリモートの両方の表を参照できます。リモート・データを更新するためのプログラミングは不要です。たとえば、次の文はローカル・データベースのjwardスキーマのemp表から行を選択して、scott.salesスキーマのリモート表empに新しい行を挿入します。
INSERT INTO scott.emp@sales.division3.example.com SELECT * FROM jward.emp;
文の透過性に関する制限事項
リモートのOracle Database以外のシステム上のオブジェクトを更新するデータ操作言語(DML)文では、ローカルのOracle Databaseのオブジェクトを参照できません。たとえば、次のような文を実行するとエラーになります。
INSERT INTO remote_table@link as SELECT * FROM local_table;
1つのSQL文において、参照されるすべてのLONGおよびLONG RAWの列、順序、更新済の表およびロック済の表は、同じノードに存在する必要があります。
データベースでは、同機種システムにおけるリモートのデータ定義言語(DDL)文(CREATE、ALTER、DROPなど)は使用できません。ただし、次の例のようにDBMS_SQLパッケージのプロシージャのリモート実行を使用する場合を除きます。
DBMS_SQL.PARSE@link_name(crs, 'drop table emp', v7);
異機種間システムでは、パススルー機能によってDDLの実行が可能です。
ANALYZE文のLIST CHAINED ROWS句は、リモート表を参照できません。
分散データベース・システムでは、SYSDATE、USER、UID、USERENVなどの環境に依存したSQLファンクションは、データベースによって、その文(または文の一部)が実行される場所にかかわらず、常にローカル・サーバーについて評価されます。
|
注意: Oracle Databaseは、USERENVファンクションを問合せの用途でのみサポートしています。 |
リモート・オブジェクトのアクセスに関連して、次のようなパフォーマンス上の制限事項があります。
リモート・ビューは統計データを持ちません。
パーティション表に対する問合せは、最適化されない場合があります。
リモート表で考慮される索引の数は20以下です。
コンポジット索引で使用される列の数は20以下です。
Oracle Databaseの分散読込み一貫性の実装には制限があり、これによってあるノードが別のノードに対して古い状態になる可能性があります。問合せを実行したときに、読込み一貫性に従ってデータが取得されているにもかからわず、そのデータが古い場合があります。この問題の管理方法の詳細は、「読込み一貫性の管理」を参照してください。
|
関連項目: DBMS_SQLパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 |