Oracle 8 ORA-12547錯(cuò)誤解決方法
Oracle 8是目前最古老的Oracle版本之一,雖然時(shí)代已經(jīng)久遠(yuǎn),但仍然在某些應(yīng)用場(chǎng)景下被大量使用。而與其相關(guān)的一個(gè)常見(jiàn)問(wèn)題就是ORA-12547錯(cuò)誤。這個(gè)錯(cuò)誤一般會(huì)在Oracle服務(wù)器啟動(dòng)時(shí)或在客戶端和服務(wù)器端連接時(shí)出現(xiàn)。舉例如下:
SQL> connect sys as sysdba Enter password: ERROR: ORA-12547: TNS:lost contact
發(fā)生這個(gè)錯(cuò)誤的原因很多,下面我們就來(lái)逐一分析。
第一種原因:未啟動(dòng)Oracle Listener服務(wù)
Oracle Listener是Oracle網(wǎng)絡(luò)通訊的一個(gè)重要組成部分,如果未啟動(dòng)Listener服務(wù),那么客戶端就無(wú)法連接到Oracle服務(wù)器,因此也會(huì)出現(xiàn)ORA-12547錯(cuò)誤。在Linux系統(tǒng)下,要檢查L(zhǎng)istener服務(wù)是否已啟動(dòng),可以使用以下命令:
$ ps -ef | grep tnslsnr
如果看到了tnslsnr進(jìn)程,則說(shuō)明Listener已經(jīng)成功啟動(dòng)。如果沒(méi)有看到進(jìn)程,則可以使用以下命令啟動(dòng)Listener:
$ lsnrctl start
在Windows系統(tǒng)下,可以在“服務(wù)”中查看Oracle的服務(wù)是否正常運(yùn)行。
第二種原因:數(shù)據(jù)庫(kù)實(shí)例未啟動(dòng)
如果Oracle數(shù)據(jù)庫(kù)實(shí)例未啟動(dòng),則客戶端也無(wú)法連接到數(shù)據(jù)庫(kù)。因此,要想解決ORA-12547錯(cuò)誤,需要確保Oracle實(shí)例已經(jīng)順利啟動(dòng)。可以使用下面的命令檢查Oracle實(shí)例是否已經(jīng)啟動(dòng):
SQL> select instance_name, status from v$instance;
如果狀態(tài)是“open”,則說(shuō)明實(shí)例已經(jīng)順利啟動(dòng)。
第三種原因:監(jiān)聽(tīng)器配置錯(cuò)誤
在一些特殊情況下,可能會(huì)出現(xiàn)Listener的配置有誤,從而導(dǎo)致ORA-12547錯(cuò)誤。具體可通過(guò)查看Listener的日志文件來(lái)排查這一問(wèn)題。
$ tail -f $ORACLE_HOME/network/log/listener.log
如果在日志中看到類似“TNS-12547: TNS:lost contact”等錯(cuò)誤信息,則說(shuō)明確實(shí)是Listener配置錯(cuò)誤引起的問(wèn)題。此時(shí)需要檢查L(zhǎng)istener的配置文件tnsnames.ora,確保其中的配置正確無(wú)誤。
第四種原因:TCP/IP設(shè)置不正確
如果客戶端和服務(wù)器之間的TCP/IP設(shè)置有誤,則也有可能導(dǎo)致ORA-12547錯(cuò)誤。以下是一個(gè)TCP/IP設(shè)置錯(cuò)誤的示例:
SQL> connect sys as sysdba@orcl Enter password: ERROR: ORA-12547: TNS:lost contact
在這個(gè)示例中,“orcl”是一個(gè)在tnsnames.ora文件中定義的Service Name。這個(gè)錯(cuò)誤通常發(fā)生在服務(wù)器上沒(méi)有正確設(shè)置名為“orcl”的TCP/IP服務(wù)的情況下。在Windows系統(tǒng)下,可以通過(guò)以下命令檢查T(mén)CP/IP設(shè)置:
$ netstat -ano | findstr :1521
如果返回結(jié)果中沒(méi)有包含1521端口,則說(shuō)明TCP/IP設(shè)置可能有誤。
結(jié)論
ORA-12547這個(gè)錯(cuò)誤看起來(lái)很嚴(yán)重,但實(shí)際上它只是Oracle中的一個(gè)常見(jiàn)錯(cuò)誤罷了。通過(guò)以上的介紹,相信大家已經(jīng)能夠知道如何排查這個(gè)錯(cuò)誤了。當(dāng)然,如果在實(shí)際應(yīng)用中遇到了其他問(wèn)題,需要考慮其他可能的原因。總之,只要我們耐心地排查,相信很快就能夠找到并解決這個(gè)問(wèn)題。