Oracleのデータベースリンク
データベースとは
Oracleは通常、接続先のデータベースを使います。eigyouユーザーでログインしたら、eigyouスキーマのテーブルやビューを使用します。
しかし、場合によっては他のデータベースにアクセスしたい場合もあります。例えば、営業の人が営業用データだけでなく、別の地区にある研究データにアクセスしたい時など。
ここで営業データーベースと研究データベースは場所もサーバーも違っていたとしたら?
このように別のデータベースにアクセスしたいときに使うのが「データベースリンク」です。
営業データベースに研究データベースへのリンクを作ることで、営業の人でも研究データを閲覧できるようにします。
構文
データベースリンクは「CREATE DATABASE LINK~」で作成します。PUBLICをつけると別ユーザーからも使用可能となります。
-- Oracleデータベースリンクを作成するSQL CREATE (PUBLIC) DATABASE LINK データベース名 CONNECT TO ユーザー IDENTIFIED BY パスワード USING '接続文字列';
では、Oracleのデータベースリンクを作成してみます。
Oracleのデータベースリンクを作成する
ここでは、東京にあるeigyouサーバー(eigyouユーザー)から大阪にあるkenkyuサーバー(kenkyuユーザー)へデータベースリンクを作成します。
-- kenkyu-dataへのデータベースリンク「kenkyulink」 CREATE DATABASE LINK kenkyulink CONNECT TO kenkyu IDENTIFIED BY pass1 USING 'kenkyu-data';
eigyouサーバーで上記SQLを実行します。ここでは「kenkyulink」という名前のデータベースリンクを作成しました。
CONNECT TO
「CONNECT TO」でユーザーを指定します。
IDENTIFIED BY
「IDENTIFIED BY」でパスワードを指定します。
USING
「USING」では接続文字列 を指定します。接続文字列とはtnsnames.oraに指定された接続文字列です。
よって、このcreate分の意味は「kenkyu-dataへkenkyuユーザー、パスワードpass1で接続するリンクを作ります」となります。
この「Create Database Link」を「eigyou」ユーザーで実行すると、外部のデータベース「kenkyu-data」へデータベースリンクができます。
データベースリンクを使う
では、eigyouユーザーでさっそく研究データを見てみましょう。
-- データベースリンクを使って別のDBをSELECTする SELECT * FROM KENKYU.JIKKEN1@kenkyulink;
このSQLをeigyouサーバーのeigyouユーザーで実行します。
これはデータベースリンク「kenkyulink」を使ってkenkyuスキーマのJIKKEN1テーブルを検索しています。
データベースリンクを使う場合はテーブルの後ろに「@データベースリンク名」と記述します。
ここが通常のSELECTと違うところです。
これで営業の人でも研究データが閲覧できるようになりました。
Oracleのデータベースリンクのまとめ
- Oracleでは別のOracleデータベースへアクセスしたい場合はデータベースリンクを使います
- データベースリンクは「CREATE DATABASE LINK 」コマンドで作成する
- データベースリンクはテーブル名の後ろに「@データベースリンク名」をつける
以上、Oracleのデータベースリンクのまとめでした。
コメント
うーん、けっきょく、よくわかりませんでした・・・
・CREATE (PUBLIC) DATABASE LINK データベース名 はどこで(DBのあるサーバ? それと もDBリンクを介してDBをアクセスするクライアント?)実行するのでしょうか?
・DBリンクをアクセスするクライアント側にはソフトウェアは不要なのでしょうか?
>>CREATE (PUBLIC) DATABASE LINK データベース名 はどこで(DBのあるサーバ? それと もDBリンクを介してDBをアクセスするクライアント?)実行するのでしょうか?
CREATE (PUBLIC) DATABASE LINKはクライアントでもサーバーでもどちらで実行しても構いません。
>>DBリンクをアクセスするクライアント側にはソフトウェアは不要なのでしょうか?
クラサバの場合、クライアントにはOracleクライアントが必須です。
わかりにくいとのことなので、記事に少し補足してみました。