用途
CREATE
DATABASE
LINK
文を使用すると、データベース・リンクを作成できます。データベース・リンクとは、他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。他のデータベースは、Oracle Databaseシステムである必要はありません。ただし、Oracle以外のシステムにアクセスする場合は、Oracle異機種間サービスを使用する必要があります。
データベース・リンクを作成した後で、表名、ビュー名またはPL/SQLオブジェクト名に@
dblink
を追加し、そのリンクをSQL文で利用して、他のデータベース上の表、ビューおよびPL/SQLオブジェクトを参照できます。SELECT
文を使用して、他のデータベース上の表またはビューを問い合せることができます。INSERT
文、UPDATE
文、DELETE
文またはLOCK
TABLE
文を使用してもリモート表およびビューにアクセスできます。
関連項目:
|
前提条件
プライベート・データベース・リンクを作成する場合、CREATE
DATABASE
LINK
システム権限が必要です。パブリック・データベース・リンクを作成する場合、CREATE
PUBLIC
DATABASE
LINK
システム権限が必要です。また、リモートのOracle Databaseに対するCREATE
SESSION
権限が必要です。
なお、ローカルとリモートの両方のOracle Databaseに、Oracle Netをインストールしておく必要があります。
構文
create_database_link::=
(dblink::=を参照)
セマンティクス
PUBLIC
を指定すると、すべてのユーザーが参照可能なパブリック・データベース・リンクを作成できます。この句を指定しない場合、データベース・リンクはプライベートとなり、作成したユーザー専用になります。
リモート・データベース上のアクセス可能なデータは、リモート・データベースへの接続時にデータベース・リンクで使用される識別によって異なります。
CONNECT
TO
user
IDENTIFIED
BY
password
を指定した場合、データベース・リンクは、指定されたユーザーとパスワードを使用して接続します。
CONNECT
TO
CURRENT_USER
を指定した場合、データベース・リンクは、そのリンクが使用される有効範囲に基づいて有効なユーザーを使用して接続します。
いずれの句も指定しない場合、データベース・リンクは、ローカル接続されたユーザーとしてリモート・データベースに接続します。
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
のような名前を付けた場合、スキーマralph
のlinktosales
という名前のデータベース・リンクと解析されるのではなく、名前全体が自分のスキーマにあるデータベース・リンク名と解析されます。
関連項目:
|
CONNECT
TO
句を使用すると、リモート・データベースへの接続に使用するユーザーおよび資格証明がある場合は、それらを指定できます。
CURRENT_USER
を指定すると、現行のユーザーのデータベース・リンクを作成できます。現行のユーザーは、リモート・データベースに有効なアカウントを持つグローバル・ユーザーである必要があります。
データベース・リンクがストアド・オブジェクト内からではなく直接使用される場合、現行のユーザーは接続ユーザーと同じです。
データベース・リンクを開始するストアド・オブジェクト(プロシージャ、ビュー、トリガーなど)を実行する場合、CURRENT_USER
は、ストアド・オブジェクトを所有するユーザーの名前であり、オブジェクトをコールしたユーザーの名前ではありません。たとえば、データベース・リンクが(scott
によって作成された)プロシージャscott.p
内にあり、ユーザーjane
がプロシージャscott.p
をコールした場合、現行のユーザーはscott
になります。
ただし、ストアド・オブジェクトが実行者権限ファンクション、プロシージャまたはパッケージである場合、実行者認可IDはリモート・ユーザーとしての接続に使用されます。たとえば、権限を持つデータベース・リンクがプロシージャscott.p
(scott
によって作成された実行者権限プロシージャ)内にあり、ユーザーJaneがプロシージャscott.p
をコールした場合、CURRENT_USER
はjane
であり、プロシージャは、Janeの権限で実行されます。
固定ユーザー・データベース・リンクを使用して、リモート・データベースに接続するためのユーザー名およびパスワードを指定できます。この句を指定しない場合、データベース・リンクでは、データベースに接続している各ユーザーのユーザー名およびパスワードが使用されます。これを接続ユーザー・データベース・リンクといいます。
共有データベース・リンクを作成する場合(SHARED
句を指定した場合)にのみ、この句を指定できます。ターゲット・インスタンスのユーザー名およびパスワードを指定します。この句は、リモート・サーバーに対してユーザーを認証するもので、セキュリティ上必要です。指定するユーザー名およびパスワードは、リモート・インスタンスで有効なユーザー名およびパスワードである必要があります。ユーザー名およびパスワードは、認証用としてのみ使用されます。このユーザーを対象とした認証以外の操作はありません。
リモート・データベースのサービス名を指定します。データベース名のみを指定した場合、接続文字列にデータベース・ドメインが暗黙的に追加され、完全なサービス名が作成されます。したがって、リモート・データベースのデータベース・ドメインが現行のデータベース・ドメインと異なる場合は、完全なサービス名を指定する必要があります。
関連項目: リモート・データベースの指定の詳細は、『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は、同じデータベース上の他のユーザーが所有する表にもアクセスできます。この文は、ユーザーhr
がoe.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;