今天啟動資料庫監聽的時候提示報錯:
TNS-12545: 因目標主機或對象不存在, 串連失敗
TNS-12560: TNS: 協議適配器錯誤
TNS-00515: 因目標主機或對象不存在, 串連失敗
32-bit Windows Error: 1004: Unknown error
監聽程式未能啟動。請參閱上面的錯誤訊息...
才想起來昨天把主機名稱改了。行吧,那就修改listener.ora中的主機名稱。
再次啟動ok。
然後啟動資料庫,發現啟動報錯,提示local_listener參數中設定的值不對。
但是此時資料庫都啟動不了,參數無法修改,所以只能從pfile下手了:
在pfile中,增加local_listener參數,設定為新的主機名稱對應的字串。需要注意的是,這個參數要加到最後面,如果是前面幾行,還會報主機名稱無法找到的錯誤。
時間不夠,沒有具體實驗到底是哪個參數引起的。
修改後,從pfile啟動成功。
然後根據pfile建立spfile:
create spfile from pfile;
再重啟資料庫,從spfile啟動。卻提示非法的執行個體名或資料庫名。奇怪!
後來找了幾個方面的資料,發現一個現象。就是所有從pfile建立spfile的命令,都是帶了具體檔案名稱的。所以我也這麼試了一下,驗證我對這個問題的原因定位:
create spfile from pfile='d:\Oracle\....\pfile.ora'
然後再從spfile啟動,成功。
由此問題可以知道,第一個根據pfile建立spfile的命令,沒有指定具體的檔案名稱,所以命令不知道根據哪個檔案去建立spfile,所以只建了一個空的spfile檔案(這個可以從spfile的二進位檔案中看到,都是null值)。只有指定了具體的pfile檔案後,建立才能成功。
補充說明:windows下的spfile預設位置是db1\database\spfileorcl.ora,裡面其實是一個連結,連結到db1\dbs\spfileorcl.ora檔案,這個檔案裡面是具體的參數配置資訊。