有關dblink有域名的總結:

orchidllh發表於2005-03-21
上週五將一個資料庫的邏輯備份倒入到另一個資料庫中,計劃將原資料庫遷移,邏輯備份的倒出和倒入都比較順利,但是在檢查一起遷移的crontab程式的執行日誌的時候,發現使用的dblink都提示不存在。
因為該資料庫是用作資料整理用的,需要從很多的資料庫提取資料,所以建了很多的dblink,這些dblink都不能使用了。
我手工建立了一個dblink發現原來建立的dblink都有域名,而新建立的dblink沒有域名,而在指令碼中使用的dblink都只認識沒有域名的。


兩臺伺服器都是solaris作業系統,資料庫版本都是oracle 9i的,最開始我疑心是資料庫的設定,所以檢查了以下兩個引數:
SQL> show parameter global_name

NAME    TYPE                                            VALUE                         
-----------------------------------------------------------------------------------------------------------------
global_names   boolean      FALSE

SQL> show parameter db_name

NAME    TYPE                                            VALUE                         
-----------------------------------------------------------------------------------------------------------------
db_name    string      ***

發現兩個資料庫的設定是相同的,所以我猜想它使用的可能是作業系統的設定。
查了半天有關solaris中域名設定的方法,也詢問了網管的MM,做了以下的修改:
首先修改了/etc/hosts檔案,將hostname加上了域名,並且重啟了網路服務:

ps -ef|grep inetd
找到程式號,然後
kill -HUP 程式號

然後檢查了/etc/resolv.conf,發現這裡已經配置了和原來的伺服器一樣的domain引數,nameserver也是一樣的。

最後也檢查了/etc/nsswitch.conf檔案,發現和原來的伺服器並沒有什麼不同。

按照itpub上 http://www.itpub.net/318642.html 的調整了:
SQL> alter database rename global_name to ***.***.***;

Database altered.

結果仍然不對。

折騰了半天,仍然沒有進展,我很是灰心,我甚至都打算重建這些dblink了,根據user_db_links這個檢視記錄的資訊生成指令碼,問題就是如果下次我需要從原始的資料庫同步資料的時候,還需要重建這些dblink。

再後來,同事修改了什麼東東,就好了。嘿嘿,結果果然是資料庫的配置問題:
SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
***

SQL> alter database rename global_name to ***.***.***;

Database altered.

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
***

這個rename global_name以後,global_name並沒有被修改,重啟資料庫仍然沒有,而同事執行的是:
SQL> update global_name set global_name = '***.***.***';

1 row updated.

SQL> commit;

Commit complete.

再查詢
SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
***.***.***

就是修改過的了,這樣原來帶有域名的dblink就都可以用了,新建的dblink也有域名了。
這樣看來alter database rename global_name to ***.***.***;和update global_name set global_name = '***.***.***';並不是等價的操作。
而且這些操作並沒有修改global_names和db_name兩個引數的內容。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/51862/viewspace-180615/,如需轉載,請註明出處,否則將追究法律責任。

相關文章