Oracle: データベース・リンクはtnsnames.ora変更後に再作成が必要
SSIAって感じですが…
※今回検証した環境はOracle Database 11gです。(古い)
データベース・リンクについて
データベース・リンク(以下DBリンク)は他のデータベースのオブジェクトを操作できる機能です。以下のようにして作成します。(参考: CREATE DATABASE LINK)
|
|
remotedb: DBリンクオブジェクトの名前scott: 接続するリモートDBの接続ユーザ名tiger: 接続ユーザのパスワードremotedbname: 通常はtnsnames.ora上の接続名になると思います(接続情報をべた書きすることも可能)
あらかじめOracle Databaseサーバ上のtnsnames.oraには以下のように接続するリモートDBの接続情報が記載されている必要があります。
remotedbname =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver-1.example.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = XE)
)
)
そして、リモートDBのオブジェクトを検索する際は、以下のようにオブジェクト名の後ろに@に続いて作成したDBリンクオブジェクトの名前remotedbをくっつけます。これで検索が可能。
|
|
同じようにしてUPDATEやDELETEもできます。
本題
で、このリモートDBのホスト名が変わる場合(例えばdbserver-1.example.comからdbserver-2.example.com)、ホスト名はtnsnames.oraにしか書かれていないのでtnsnames.oraを修正するわけですが、それだけでは接続先は変更されません。
どうもホスト名やサービス名などのtnsnames.oraに書かれている接続情報は、DBリンクを作成した時点でDBリンクオブジェクトが持ってしまうようで、いくらtnsnames.oraを書き換えても古いリモートDBに繋がってしまいます。(文献を見つけることができませんでした。)
※試してないですが、DBインスタンスを再起動したりすれば反映されるかも?
じゃあ、ALTER DATABASE LINK か?となるわけですが、ALTER DATABASE LINKは接続ユーザのパスワードが変わった場合のみ使用されるもので、接続ユーザや接続情報は変更することはできません。
接続または認証ユーザーのパスワードが変更された場合に固定ユーザー・データベース・リンクを変更するには、ALTER DATABASE LINK文を使用します。 この文を使用して、データベース・リンクに関連付けられた接続または認証ユーザーを変更することはできません。userを変更するには、データベース・リンクを再作成する必要があります。
このことからも、リモートDBのホスト名が変わる等でtnsnames.oraを変更した場合は、DBリンクの再作成(DROPしてCREATE)が必要となると考えられます。
(‘A`)マンドクセ