2008年7月18日金曜日

【oracle】同一サーバ上のインスタンス間アクセス

同一サーバ上にインスタンスAとインスタンBを作成する。その後クライアントで、インスタンBからインスタンスAのテーブルにアクセスする。

oracle10gでのみ確認済み。

まずは、インスタンスAにアクセスするためにtnsnames.oraを作成する。

すでにインスタンスAに接続できているなら必要なし。

insA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)
(HOST = host1)
(PORT = 1521)
)
(CONNECT_DATE =
(SERVICE_NAME = insA)
)
)

次に、サーバでインスタンスBからインスタンスAに
データベースリンクをはる。

1.インスタンスAのグローバル名を調べる。(念のため)
SELECT * FROM global_name

この結果、insA.REGRESS.RDBMS.DEV.US.ORACLE.COM

みたいな感じで帰ってくる。


2.インスタンス名が確認できたら、データベースリンクを作成する。
CREATE DATABASE LINK insA
CONNECT TO user_insA IDENTIFIED BY passwd
USING 'insA'

ここではインスタンスAに接続できるユーザとパスワードを指定し、
最後にUSING句でtnsnames.oraの接続記述子を指定する。

3.データベースリンクの確認
SELECT * FROM dba_db_links

4.実際に接続できるか確認する。

インスタンスBに接続し、インスタンスAに存在する

test_tableに接続してみる。


SELECT * FROM test_table@insA


5.データベースリンクの削除。(間違った場合)
DROP DATABASE LINK insA


以降は、毎回「テーブル名@リンク名」を書くのが面倒な方用、

但しデータベースリンクがわからなくなるのでお勧めしない。


6.シノニムを作成。
CREATE SYNONYM test_table
FOR test_table@insA


7.シノニムの確認
SELECT * FROM user_synonyms


8.実際に接続してみる。

インスタンスBに接続してから実行する。

SELECT * FROM test_table


9.シノニムの削除(間違ったときに)
DROP SYNONYM test_table

以上でデータベースリンクが張られていることさえ気づかずに

アクセスができるようになっているはずです。

当然のことながら、update、delete、insertもできます。

またインスタンスAとインスタンスBのテーブル結合もできます。

0 件のコメント: