プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

CREATE DATABASE LINK

用途

CREATE DATABASE LINK文を使用すると、データベース・リンクを作成できます。データベース・リンクとは、他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。他のデータベースは、Oracle Databaseシステムである必要はありません。ただし、Oracle以外のシステムにアクセスする場合は、Oracle異機種間サービスを使用する必要があります。

データベース・リンクを作成した後で、表名、ビュー名またはPL/SQLオブジェクト名に@dblinkを追加し、そのリンクをSQL文で利用して、他のデータベース上の表、ビューおよびPL/SQLオブジェクトを参照できます。SELECT文を使用して、他のデータベース上の表またはビューを問い合せることができます。INSERT文、UPDATE文、DELETE文またはLOCK TABLE文を使用してもリモート表およびビューにアクセスできます。


関連項目:

  • PL/SQLファンクション、プロシージャ、パッケージおよびデータ型を使用してリモート表またはビューへアクセスする方法については、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

  • 分散データベース・システムについては、『Oracle Database管理者ガイド』を参照してください。

  • ALL_DB_LINKSDBA_DB_LINKSおよびUSER_DB_LINKSデータ・ディクショナリ・ビューの既存のデータベース・リンクの詳細、およびV$DBLINK動的パフォーマンス・ビューを使用して既存のリンクのパフォーマンスを監視する方法については、『Oracle Databaseリファレンス』を参照してください。

  • 接続または認証ユーザーのパスワードが変更された場合に、データベース・リンクを変更する方法については、「ALTER DATABASE LINK」を参照してください。

  • 既存のデータベース・リンクを削除する方法については、「DROP DATABASE LINK」を参照してください。

  • DML操作でリンクを使用する方法については、「INSERT」「UPDATE」「DELETE」および「LOCK TABLE」を参照してください。


前提条件

プライベート・データベース・リンクを作成する場合、CREATE DATABASE LINKシステム権限が必要です。パブリック・データベース・リンクを作成する場合、CREATE PUBLIC DATABASE LINKシステム権限が必要です。また、リモートのOracle Databaseに対するCREATE SESSION権限が必要です。

なお、ローカルとリモートの両方のOracle Databaseに、Oracle Netをインストールしておく必要があります。

セマンティクス

PUBLIC

PUBLICを指定すると、すべてのユーザーが参照可能なパブリック・データベース・リンクを作成できます。この句を指定しない場合、データベース・リンクはプライベートとなり、作成したユーザー専用になります。

リモート・データベース上のアクセス可能なデータは、リモート・データベースへの接続時にデータベース・リンクで使用される識別によって異なります。

  • CONNECT TO user IDENTIFIED BY passwordを指定した場合、データベース・リンクは、指定されたユーザーとパスワードを使用して接続します。

  • CONNECT TO CURRENT_USERを指定した場合、データベース・リンクは、そのリンクが使用される有効範囲に基づいて有効なユーザーを使用して接続します。

  • いずれの句も指定しない場合、データベース・リンクは、ローカル接続されたユーザーとしてリモート・データベースに接続します。

SHARED

SHAREDを指定すると、ソース・データベースからターゲット・データベースへの1つのネットワーク接続を使用する複数のセッションで共有可能な1つのデータベース・リンクを作成できます。共有サーバー構成では、共有データベース・リンクによって、リモート・データベースへの接続数が多くなりすぎるのを防ぐことができます。通常、共有リンクはパブリック・データベース・リンクでもあります。ただし、多くのクライアントが同じローカル・スキーマにアクセスして同じプライベート・データベース・リンクを使用する場合は、共有プライベート・データベース・リンクが役立つ場合もあります。

共有データベース・リンクでは、ソース・データベースの複数のセッションでターゲット・データベースへの同じ接続が共有されます。ターゲット・データベースでセッションが確立されると、ソース・データベースの別のセッションで接続を使用できるように、そのセッションは接続から関連付けを解除されます。認可されていないセッションがデータベース・リンクを使用して接続できないように、SHAREDを指定するときは、データベース・リンクの使用を認可されたユーザーに対してdblink_authentication句も指定する必要があります。


関連項目:

共有データベース・リンクの詳細は、『Oracle Database管理者ガイド』を参照してください。

dblink

データベース・リンクの完全な名前または名前の一部を指定します。データベース名のみを指定した場合、ローカル・データベースのデータベース・ドメインが暗黙的に追加されます。

dblinkには、ASCII文字のみを使用してください。マルチバイト文字はサポートされていません。データベース・リンク名は、大文字と小文字が区別されず、大文字のASCII文字で保存されます。データベース名を引用識別子として指定した場合、引用符は特に警告もなく無視されます。

GLOBAL_NAMES初期化パラメータの値がTRUEの場合、データベース・リンクは、接続先のデータベースと同じ名前を持つ必要があります。GLOBAL_NAMESの値がFALSEで、データベースのグローバル名を変更した場合、グローバル名を指定できます。

Oracle RAC構成の1つのセッションまたは1つのインスタンスでオープンできるデータベース・リンクの最大数は、OPEN_LINKSおよびOPEN_LINKS_PER_INSTANCE初期化パラメータの値で指定します。

データベース・リンク作成の制限事項 他のユーザーのスキーマ内にはデータベース・リンクを作成できません。また、dblinkはスキーマ名を付けて指定できません。データベース・リンク名にはピリオドを指定できるため、ralph.linktosalesのような名前を付けた場合、スキーマralphlinktosalesという名前のデータベース・リンクと解析されるのではなく、名前全体が自分のスキーマにあるデータベース・リンク名と解析されます。


関連項目:

  • データベース・リンクのネーミングのガイドラインについては、「リモート・データベース内のオブジェクトの参照」を参照してください。

  • GLOBAL_NAMESOPEN_LINKSおよびOPEN_LINKS_PER_INSTANCE初期化パラメータについては、『Oracle Databaseリファレンス』を参照してください。

  • データベースのグローバル名の変更については、「ALTER DATABASE」の「RENAME GLOBAL_NAME句」を参照してください。


CONNECT TO句

CONNECT TO句を使用すると、リモート・データベースへの接続に使用するユーザーおよび資格証明がある場合は、それらを指定できます。

CURRENT_USER句

CURRENT_USERを指定すると、現行のユーザーのデータベース・リンクを作成できます。現行のユーザーは、リモート・データベースに有効なアカウントを持つグローバル・ユーザーである必要があります。

データベース・リンクがストアド・オブジェクト内からではなく直接使用される場合、現行のユーザーは接続ユーザーと同じです。

データベース・リンクを開始するストアド・オブジェクト(プロシージャ、ビュー、トリガーなど)を実行する場合、CURRENT_USERは、ストアド・オブジェクトを所有するユーザーの名前であり、オブジェクトをコールしたユーザーの名前ではありません。たとえば、データベース・リンクが(scottによって作成された)プロシージャscott.p内にあり、ユーザーjaneがプロシージャscott.pをコールした場合、現行のユーザーはscottになります。

ただし、ストアド・オブジェクトが実行者権限ファンクション、プロシージャまたはパッケージである場合、実行者認可IDはリモート・ユーザーとしての接続に使用されます。たとえば、権限を持つデータベース・リンクがプロシージャscott.p(scottによって作成された実行者権限プロシージャ)内にあり、ユーザーJaneがプロシージャscott.pをコールした場合、CURRENT_USERjaneであり、プロシージャは、Janeの権限で実行されます。


関連項目:


user IDENTIFIED BY password

固定ユーザー・データベース・リンクを使用して、リモート・データベースに接続するためのユーザー名およびパスワードを指定できます。この句を指定しない場合、データベース・リンクでは、データベースに接続している各ユーザーのユーザー名およびパスワードが使用されます。これを接続ユーザー・データベース・リンクといいます。

dblink_authentication

共有データベース・リンクを作成する場合(SHARED句を指定した場合)にのみ、この句を指定できます。ターゲット・インスタンスのユーザー名およびパスワードを指定します。この句は、リモート・サーバーに対してユーザーを認証するもので、セキュリティ上必要です。指定するユーザー名およびパスワードは、リモート・インスタンスで有効なユーザー名およびパスワードである必要があります。ユーザー名およびパスワードは、認証用としてのみ使用されます。このユーザーを対象とした認証以外の操作はありません。

USING 'connect string'

リモート・データベースのサービス名を指定します。データベース名のみを指定した場合、接続文字列にデータベース・ドメインが暗黙的に追加され、完全なサービス名が作成されます。したがって、リモート・データベースのデータベース・ドメインが現行のデータベース・ドメインと異なる場合は、完全なサービス名を指定する必要があります。


関連項目:

リモート・データベースの指定の詳細は、『Oracle Database管理者ガイド』を参照してください。

次の例では、localという名前のデータベースとremoteという名前の2つのデータベースを使用することを想定しています。この例では、Oracle Databaseドメインを使用します。ご使用のドメインとは異なります。

パブリック・データベース・リンクの定義例: 次の例では、remoteという共有パブリック・データベース・リンクを定義します。このデータベース・リンクは、サービス名remoteで指定されたデータベースと対応しています。

CREATE PUBLIC DATABASE LINK remote 
   USING 'remote'; 

このデータベース・リンクによって、localデータベース上のユーザーhrリモート・データベース上の表を更新できます(hrに適切な権限があることを想定しています)。

UPDATE employees@remote
   SET salary=salary*1.1
   WHERE last_name = 'Baer';

固定ユーザー・データベース・リンクの定義例: 次の例では、リモート・データベース上のユーザーhrが、localデータベース上のhrスキーマに、localという名前の固定ユーザー・データベース・リンクを定義します。

CREATE DATABASE LINK local 
   CONNECT TO hr IDENTIFIED BY password
   USING 'local';

このデータベース・リンクが作成されると、hrは、次のようにlocalデータベース上のスキーマhrの表を問い合せることができます。

SELECT * FROM employees@local;

ユーザーhrは、次のDML文を使用して、localデータベース上のデータを変更することもできます。

INSERT INTO employees@local
   (employee_id, last_name, email, hire_date, job_id)
   VALUES (999, 'Claus', 'sclaus@example.com', SYSDATE, 'SH_CLERK');

UPDATE jobs@local SET min_salary = 3000
   WHERE job_id = 'SH_CLERK';

DELETE FROM employees@local 
   WHERE employee_id = 999;

この固定データベース・リンクを使用すると、remoteデータベース上のユーザーhrは、同じデータベース上の他のユーザーが所有する表にもアクセスできます。この文は、ユーザーhroe.customers表に対するSELECT権限を持っていることを想定しています。この文では、localデータベースのユーザーhrに接続した後で、次のようにoe.customers表への問合せが行われます。

SELECT * FROM oe.customers@local;

CURRENT_USERデータベース・リンクの定義例: 次の文は、リンク名としてサービス名全体を使用して、remoteデータベースに対する現行のユーザーのデータベース・リンクを定義します。

CREATE DATABASE LINK remote.us.example.com
   CONNECT TO CURRENT_USER
   USING 'remote';

この文を発行するユーザーは、LDAPディレクトリ・サービスに登録されたグローバル・ユーザーである必要があります。

特定の表がremoteデータベース上にあることを示さないように、シノニムを作成できます。次の文によって、これ以降にemp_tableを参照すると、リモート・データベース上のhrが所有するemployees表にアクセスします。

CREATE SYNONYM emp_table 
   FOR oe.employees@remote.us.example.com;