Oracleデータベースリンク

Oracle10gと8.1.6でデータベースリンクを張った

Oracle8.1.6のユーザーHOGE1からOracle10gのユーザーHOGE2へSQLが発行できるようにする。

Oracle8.1.6のtnsnames.oraにOracle10gへの接続設定を行う。

TNS名称はorcl10gとする
Oracle8.1.6のサーバーから、Oracle10gのユーザーHOGE2に接続できればOK

データベースリンクを作成する

Oracle8.1.6のユーザーHOGE1に接続し、データベースリンクを作成する。

データベースリンク名 HOGE2_LINK
リンク先DBのユーザ名 HOGE2
リンク先DBのパスワード pass
CREATE DATABASE LINK HOGE2_LINK
CONNECT TO HOGE2 IDENTIFIED BY pass
USING 'orcl10g';

テスト(失敗例)

Oracle8.1.6のユーザーHOGE1に接続し、Oracle10gのユーザーHOGE2にあるテーブルcompaniesを参照する

SELECT * FROM COMPANIES@HOGE2_LINK;

[row:1,col:25] ORA-02085: データベース・リンク: HOGE2_LINK.WORLDはORCL0.REGRESS.RDBMS.DEV.US.ORACLE.COMに接続します。

global_namesの確認

SystemでOracle8.1.6のユーザーHOGE1に接続し、以下のSQLを実行

SELECT VALUE FROM v$parameter WHERE NAME LIKE 'global_names'

FALSEが返ってきた。

init.oraの編集

Oracle\ADMIN\ora1\pfile\init.oraの以下の行をtrueに変更し、Oracleを再起動する

# Global Naming -- enforce that a dblink has same name as the db it connects to
global_names = true

再度、global_namesの確認をし、TRUEが返ってくる事を確認

テスト(成功)

SELECT * FROM COMPANIES@HOGE2_LINK;

正しく結果が返ってきた。

最後に

global_namesを使用したままで行う場合は、以下を参照
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31633&forum=7