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 [ユーザー名].[テーブル名]@[データベースリンク名];
このように違いが出れば問題ないかと思います。