Monday, November 20, 2006

database link的domain部分省略用法

<質問内容>

 CREATE DATABASE LINK KDB.WORLD
 CONNECT TO USER01 IDENTIFIED BY
 USING 'K-DB1'
 /  

 上記のデータベースリンクがあり、
 以前は

 select * from test@KDB

 といった形式でアクセスしていたのですが、

 select * from test@KDB.WORLD

 といったようにドメイン名を入れないと接続できなくなりました。
 以前のようにドメイン名を省略してリモートDBにアクセスしたいのですが、
 どうすればよいでしょうか?


<回答内容>
 データベースリンクのドメインが global_name と同じ場合は、データベース
 リンク使用時にドメイン名を省略した書式(@)で使用することが
 可能となります。

 例えば次のような場合です。

 まずドメイン名を省略したいデータベースリンクを確認します。

 SQL> select owner,db_link from dba_db_links;

 OWNER DB_LINK
 -------------------- --------------------
 SYSTEM DB1.WORLD
~~~~~~

 ドメイン名を省略したいデータベースリンクが存在しているデータベース
 の global_name を調べます。

 SQL> select * from global_name;

 GLOBAL_NAME
 -----------------------------------------
 DB2.WORLD
  ~~~~~~

 上記のデータベースリンクのドメイン名は global_name と同じドメイン名
 "WORLD" のため データベースリンク "DB1.WORLD" を使用する場合に
 "select * from v$instance@db1" のように省略することが可能となります。

 お客様の環境では以前にドメイン名を省略できていたとのことですので
 global_name の変更が行われた可能性がございます。

 global_name の変更は下記のalter database文にて可能ですが
 global_name を変更した目的や変更しても問題なかなどをDBA管理者または
 global_name を変更された方へ確認したのちに変更されることをお奨め致します。

 -----------------------------------------
 ALTER DATABASE RENAME GLOBAL_NAME TO db_name.db.domain;
 -----------------------------------------

 参考情報
 MetaLink#117759.1 DATABASE LINK (DBLINK) TROUBLESHOOTING
 KROWN#85279 GLOBAL_NAME をドメインなしの名前に変更できない

No comments: