データリンクの設定・管理

データリンクのタイプ

データベース・リンクには、以下の3つのタイプがある。

プライベート・データベース・リンク
特定データベース内に作成され、作成者のみが使用できる。他のユーザにGRANT文で使用権を与えることはできない。
パブリック・データベース・リンク
特定データベース内に作成され、そのデータベース内のユーザが使用できる。
グローバル・データベース・リンク
Oracle Namesのようなネーミングサービスの上で作成・管理され、ネットワークの他の場所から利用できる。

データリンクの作成

データリンクの作成のためには、CREATE {PUBLIC} DATABASE LINK権限が必要である。データリンクを作成するためには、以下のSQL文を発行する。

CREATE {PUBLIC} DATABASE LINK (リンク名)
    {CONNECT TO (ユーザ名) IDENTIFIED BY (パスワード)}
    USING (サービス名)

それぞれのキーワードの意味は以下の通り。

キーワード意味
{PUBLIC} これを指定した場合、すべてのユーザが使用できるパブリック・リンクが作成される。そうでなければ、作成者のみがリンクを利用できる。なお、別のユーザのスキーマにリンクを作成することはできない。
リンク名 初期化パラメータGLOBAL_NAMESがTrueの場合、リンク先データベースのグローバル・データベース名と同じものを指定しなければならない。同じドメインにあるなら、ドメイン名を省略できる。また、同一のグローバル・データベースに別々のサービス名を用いて複数のデータリンクを設定することができる。その場合、データリンクの書式は(グローバル・データベース名)@(修飾接続詞)となる。
CONECT TO 接続に使用するユーザを明示的に指定する場合に使用。これを省略すると、利用者のユーザ名が接続先でも使用される。
サービス名 tnsnames.oraで指定されるサービス名。サービス名はグローバル・データベース名と同じである(とマニュアルには書いてあるが、この記述は上記の説明と矛盾する。「理由の無い場合、正式名称は〜」ということであろう。ちなみに、別名をつけることを禁止するオプションは無いようだ。)

1つのセッションで利用できるデータベースリンクの個数は、初期化パラメータOPEN_LINKSで指定される。また、パブリック・プライベートなデータベースリンクについての情報は、それぞれDBA_DB_LINKSUSER_DB_LINKSというデータディクショナリビューから参照できる。

データリンクの利用

データリンクの定義

データリンク先のオブジェクトは、オブジェクト名をリンク名で修飾することで利用可能となる。

SELECT * FROM [email protected]

ここで、リンク名を隠して透過的なアクセスを実現する方法として、以下のような方法がある。

シノニムの定義

オブジェクトに別名を与える機能であるシノニムは、リモートオブジェクトに対しても使用できる。例えば、データリンク先remote1.worldでスキーマscottに属するテーブルempへのシノニムを定義するためには、以下のような構文が必要となる。

CREATE SYNONYM emp FOR [email protected]

ビュー・プロシージャによるラップ

前記の方法とは別に、ビューやプロシージャを経由してアクセスを行う場合には、その内部でデータリンクを利用することで位置を隠すことができる。前項と同じ内容をビューの定義で実現しようとした場合、以下のような構文を使用する。

CREATE VIEW emp AS SELECT * FROM [email protected]

なお、ビューを作成した場合は作成者が権限を他のユーザに与えることができるが、シノニムを作成した場合にはそれを行うことはできない。