錯(cuò)誤原因分析:
檢查監(jiān)聽,發(fā)現(xiàn)未設(shè)置對服務(wù)名的監(jiān)聽(Oracle10g默認(rèn)安裝后不自動(dòng)設(shè)置監(jiān)聽)。
當(dāng)你的tnsnames.ora 文件中的SERVICE_NAME沒有向你想要連接的數(shù)據(jù)庫服務(wù)器中的監(jiān)聽器注冊的時(shí)候,就會(huì)出現(xiàn)這個(gè)錯(cuò)誤信息。如果你的客戶端配置沒有發(fā)生變化,那么數(shù)據(jù)庫服務(wù)器配置就必須進(jìn)行改變,否則你用來進(jìn)行連接的SERVICE_NAME就永遠(yuǎn)不會(huì)注冊到監(jiān)聽器。
注冊到監(jiān)聽器的SERVICE_NAME 是由數(shù)據(jù)庫實(shí)例的service_names 參數(shù)來決定的。查看參考指南中的服務(wù)器文檔來找到有關(guān)當(dāng)這個(gè)參數(shù)沒有設(shè)置的時(shí)候,它的默認(rèn)值是如何設(shè)置的詳細(xì)信息。你可以通過明確地對其進(jìn)行設(shè)置,來避免它被另一個(gè)參數(shù)的變化所影響。
你還有可能是遇到了定時(shí)的問題。如果監(jiān)聽器被重新啟動(dòng),那么數(shù)據(jù)庫實(shí)例就必須向它重新注冊。通常情況下,每60秒就會(huì)出現(xiàn)這樣的問題。如果你迫不及待,那么就以數(shù)據(jù)庫管理員的身份登錄到數(shù)據(jù)庫服務(wù)器,并且運(yùn)行“更改系統(tǒng)注冊器”,這樣就可以強(qiáng)制它立即注冊到監(jiān)聽器中。
解決辦法:
1. 打開文件"/network/admin/listener.ora" ,你將看到如下的內(nèi)容:
SID_LIST_LISTENER =
(SID_LIST =)
(SID_DESC =)
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
2. 將下面的語句添加到上面的語句中去。
(SID_DESC =)
(GLOBAL_DBNAME = ORACLE)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = ORACLE)
3. 文件的內(nèi)容則變成了如下所示:
SID_LIST_LISTENER =)
(SID_LIST =)
(SID_DESC =)
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
(SID_DESC =)
(GLOBAL_DBNAME = ORACLE)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = ORACLE)
4. 保存文件,然后重新啟動(dòng)監(jiān)聽服務(wù)TNSListener就可以了 !
問題解決
主動(dòng)跟被動(dòng)的關(guān)系
1.是讓listener主動(dòng)加載服務(wù)
原因是 添加
(SID_DESC =)
(SID_NAME = orcl)
(ORACLE_HOME = /data/cache1/oracleDB/oracle/product/10.2.0/db_2)
后,在使用lsnrctl start監(jiān)聽程序時(shí)會(huì)將listener的服務(wù)注冊到進(jìn)程監(jiān)視器(pmon)中
2.listener被動(dòng)加載服務(wù)
如果沒有該內(nèi)容,那么由實(shí)例的pmon進(jìn)程在listener中注冊服務(wù),對listener來講,就是被動(dòng)了。
這也就是為什么先啟動(dòng)監(jiān)聽后啟動(dòng)數(shù)據(jù)庫能夠正常連接的,反之不行的原因了。
聯(lián)系客服