2014年12月5日金曜日

[Oracle] db_domain と global_name を変更したときのDBLINKの挙動を調べてみた

調査の一環で、db_domain  と global_name を変更したときに
DBLINKがどのような挙動を示すか試してみることにしました。

■前提
 CentOS 6.5 x64
 Oracle 11.2.0.4.0


影響がでないようにVMwareにインストールして、いざ検証開始。

1. db_domain と global_name を確認
SQL> show parameter db_domain

NAME                TYPE      VALUE
------------------- --------- --------------------------
db_domain           string    foo.jp

SQL> select * from global_name;

GLOBAL_NAME
-------------------------------------------------------
HOGE.foo.jp

2. DBLINK作成
CREATE DATABASE LINK dblink_test01
CONNECT TO user
IDENTIFIED BY password
USING 'target_database';

3. 検証用にProcedure1つ作成
CREATE OR REPLACE PROCEDURE proc01
IS
  VAL NUMBER;
BEGIN
  SELECT COUNT(*) INTO VAL FROM table@dblink_test01;
END proc01;
/
コンパイルエラーはなし。

4. DBLINK確認
SELECT DB_LINK FROM DBA_DB_LINKS;

DB_LINK
-------------------------------------------------------
dblink_test01.foo.jp


とりあえず、これで準備は完了。
うまくいきますように。。。

5. db_domain / global_name を変更
SQL> UPDATE global_name SET global_name = 'HOGE.bar.jp';

1 row updated.

SQL> COMMIT;

Commit complete.

SQL> ALTER SYSTEM SET db_domain = 'bar.jp' SCOPE = spfile;

System altered.

6. Oracleを再起動(手順略)

7. もう一度 db_domain と global_name を確認
SQL> show parameter db_domain
NAME                TYPE      VALUE
------------------- --------- --------------------------
db_domain           string    bar.jp

SQL> select * from global_name;

GLOBAL_NAME
-------------------------------------------------------
HOGE.bar.jp

8. もう1つDBLINK作成
CREATE DATABASE LINK dblink_test02
CONNECT TO user
IDENTIFIED BY password
USING 'target_database';

9. 検証用のProcedure変更
CREATE OR REPLACE PROCEDURE proc01
IS
  VAL NUMBER;
  VAL2 NUMBER;
BEGIN
  SELECT COUNT(*) INTO VAL FROM table@dblink_test01;
  SELECT COUNT(*) INTO VAL FROM table@dblink_test02;
END proc01;
/

としたところでコンパイルエラー発生(ORA-00942)。

まあ、ドメイン名が変わっているのですから当然ですよね。

検証したかったのは、ドメイン名を変更したときに
作成済みDBLINKのドメイン付の名前(dblink_test01.foo.jp)が
変わってくれるかどうか、ということでした。


結論:変わってくれない。以上。


0 件のコメント:

コメントを投稿