Skip to content

Oracle データベースリンク(Database Link)の作成

Posted in Oracle, データベース関係, and 技術メモ


Oracleには便利な機能がある。
他のサーバーに収まっているOracleにアクセスして、さも自分のテーブルのように相手先のテーブルを操作したりすることができる。
結構前のバージョンから存在する機能ですが、便利なので凄く重宝します。
システムの差し替え時等や移行時にも役に立つし、他システムとの連携で相手のDBが直接参照できる場合などでも使用できます。
最近のOracle間ではバージョン間の相違があっても機能しますが古いバージョンとの設定はうまくいかないみたいです。

ただし、接続する側も接続される側もOracleである必要があり、両方が使用可能な状態(立ち上がっている状態)である必要があります。

データベースリンクの作成方法

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

1、必要情報の整理

まず、設定は「接続する側」に行います。この時、必要な情報は
①接続される側の「サーバーIP」
②接続される側の「サービス名」
③接続される側に設定されている「接続する側が接続に利用するユーザー名とパスワード」
④任意のネットサービス名
⑤任意のデータベースリンクに使用する「名称(任意な名前)」

今回は前提的に
①192.168.1.2
②orcl
③user1/PassWord
事前に接続される側に登録しておく必要があります。
接続後は接続する側からのアクセスはこのユーザーの権限に左右されます。
④TEST_ORCL
⑤TEST_DATABASE_LINK
とします。
Oracleのバージョンは
・接続する側:Oracle 10g 10.2.0.4.0
・接続される側:Oracle 10g 10.2.0.4.0
ともに同じバージョンを用意してます。

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

2、Net Configuration Assistant

さて設定に入ります。
接続する側のPC(サーバー)で「Net Configuration Assistant」を立ち上げます。
「ローカル・ネット・サービス名構成」を選択し「次へ」。

大抵の場合はすでに登録があると思いますのでここは割愛。「追加」を選択して「次へ」。

ここでは「接続される側のOracleのサービス名」を入力します。②の情報です。


プロトコルの選択では「TCP」を選択し「次へ」。

TCP/IPプロトコルの設定ではホスト名に①の情報を入れます。ポートは変更している場合はそれに合わせてください。
大抵の場合はそのままで結構です。

テストの実行。省略することも可能ですが、特段の事情が無い限りは行いましょう。

失敗します。これはテストをデフォルトで行うユーザーが「SYSTEM」の為にパスワードが合わないことによるエラーです。

ログイン変更をクリックして③の情報をセット。

すると成功します。(失敗の場合は入力情報に間違いがあるか、サーバの設定そのものが違う可能性があります)

最後にこのネットサービスの名前を登録します。④の情報をセットしてください。

別のネットサービスも続けて登録可能ですが、ここでは終了しますので「いいえ」を選択し、「次へ」。

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

3、SQL*PLUSから設定をいれる

接続する側のPCでSQLPLUSを立ち上げログインします。この時のログインユーザーはデータベースリンクを作成できる権限を持つユーザーでログインする必要があります。

CREATE PUBLIC DATABASE LINK TEST_DATABASE_LINK
  CONNECT TO user1 IDENTIFIED BY PassWord
  USING 'TEST_ORCL';

解説:
CREATE PUBLIC DATABASE LINK 「データベースリンク名(この場合は⑤)」
CONNECT TO 「接続ユーザー名(③のユーザー名)」 IDENTIFIED BY 「接続ユーザーのパスワード(③のパスワード)」
USING ‘「ネットサービス名(この場合は④)」’;

設定が完了できれば接続が可能です。

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

4、内容のテスト

実際にデータベースリンクの結果を見てみます。この検証はすでにある環境から行っているものですので、設定の通りではありません。

この実験の前提条件
接続するPCと接続されるPCの内部構造とテーブル構造は一緒です。中身は「接続するPC側」が古いために登録件数が少ないことを確認します。

A:select count(*) from [ユーザー名].[テーブル名];
B:select count(*) from [ユーザー名].[テーブル名]@[データベースリンク名];

このように違いが出れば問題ないかと思います。

Be First to Comment

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    CAPTCHA