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`)マンドクセ