關於service_name,instance_name的結論性理解

oracle_ace發表於2008-01-14

上午的時候抽時間做了一個測試,並再一次證明service_name,instance_name以及db_domain在我們引數檔案中的重要性,由於實驗步驟較多,沒有一一記錄下來,下面總結一段文字用於備忘:
init.ora 中的instance_name是可以設定的,這個大家都知道是沒有錯誤的,但是這個和我們ORACLE_SID又有什麼區別呢?其實還是有一些區別的,ORACLE_SID就是系統表示符,這個環境變數就是要告訴OS,我要讀取那個init.ora檔案或者spfile來啟動我的Oracle instance,比如set ORACLE_SID=mylife,這個時候當我連入Oracle後,執行startup,那麼Oracle就會尋找spfilemylife.ora或者initmylife.ora這樣的引數檔案,並啟動我的instance,在資料庫成功open後,我們可以通過select instance_name from v$instance來觀察這個已經記錄的SID,這個時候我們也可以show parameter instance_name來觀察這個值,沒錯都是mylife,一般來講,我們啟動instance所載入的pfile或者spfile中也記錄了一個instance_name這個引數,但是這個引數一般沒有顯示的列出,因此我們可以手動的去加上這個引數或者修改這個引數,把這個引數的值改為和mylife不相同的一個值mylove,這個時候再重新啟動資料庫,會發現show parameter和select instance_name from v$instance的方式有兩個不同的值分別是mylove和mylife,如果我們的tnsnames.ora中的檔案是以sid方式來尋找服務,那麼這個sid 的值就不是mylife了,而要改為mylove.恩,大體上就是這個意思。還沒有深入研究太多,對於大多數使用者來講,理解這些就足夠了。
再說一下service_name,如果我們的引數檔案中記錄了db_domain比如是cn.ibm.com,那麼service_name預設就是db_name+db_domain,但是我們完全可以修改這個值,原先資料庫的service_name=icmnlsdb.cn.ibm.com,現在比如我在pfile中顯示的指定service_names=abc,重啟database後,這個service_name就變為了abc,而不是先前的icmnlsdb.cn.ibm.com了,那麼在tnsnames.ora中的service_name列,我就要指定這個值為abc+db_domain.注意不是service_name+db_domain,因為我的service_name在修改後是不帶domain標識的,那麼如果db_domain為空的話,tnsnames.ora檔案中的service_name就直接可以寫為abc了。大體就是這個意思,解釋的有點饒,但是總算可以從這條路中走出來了。
最後一點,lsnrctl status我們隨時觀察一下listener的狀態,看看他到底有什麼變化。很有意思的。

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

相關文章