【故障處理】ORA-12162: TNS:net service name is incorrectly specified上一篇 / 下一篇 2010-08-27 23:46:59/ 個人分類:故障處理與分析 【故障處理】ORA-12162: TNS:net service name is incorrectly specified
本文將給大家闡述一個因未設(shè)置系統(tǒng)環(huán)境變量ORACLE_SID導(dǎo)致ORA-12162錯誤的案例。希望大家有所思考。 1.獲得有關(guān)ORA-12162報錯信息的通用表述信息 [oracle@asdlabdb01 ~]$ oerr ora 12162 12162, 00000, "TNS:net service name is incorrectly specified" // *Cause: The connect descriptor corresponding to the net service name in // TNSNAMES.ORA or in the directory server (Oracle Internet Directory) is // incorrectly specified. // *Action: If using local naming make sure there are no syntax errors in // the corresponding connect descriptor in the TNSNAMES.ORA file. If using // directory naming check the information provided through the administration // used for directory naming. 2.故障現(xiàn)象 本文所要描述的故障與這個通用的問題描述不同,在數(shù)據(jù)庫服務(wù)器端使用TNSNAMES.ORA中記錄的連接串連接沒有問題,但如若未指定連接串,將會報出ORA-12162錯誤。 1)使用system用戶嘗試登錄系統(tǒng),此時便會收到報錯如下信息 [oracle@asdlabdb01 ~]$ sqlplus system/sys SQL*Plus: Release 10.2.0.3.0 - Production on Sat Aug 27 22:54:02 2010 Copyright (c) 1982, 2006, Oracle. All Rights Reserved. ERROR: ORA-12162: TNS:net service name is incorrectly specified Enter user-name: 2)使用sysdba身份登陸會得到同樣的錯誤信息 [oracle@asdlabdb01 ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.3.0 - Production on Sat Aug 27 22:54:48 2010 Copyright (c) 1982, 2006, Oracle. All Rights Reserved. ERROR: ORA-12162: TNS:net service name is incorrectly specified Enter user-name: 3)但此時,如果使用服務(wù)名方式連接數(shù)據(jù)庫,是可以成功的,這也是該問題現(xiàn)象的詭異之處。 [oracle@asdlabdb01 ~]$ sqlplus system/sys@ora10g SQL*Plus: Release 10.2.0.3.0 - Production on Sat Aug 27 22:53:41 2010 Copyright (c) 1982, 2006, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options system@ora10g> 想象一下,你的目標(biāo)是快速的進(jìn)入到數(shù)據(jù)庫中進(jìn)行維護(hù)操作,但此時登錄都遭遇障礙,會感到非常的別扭。更讓人抓狂的是,如果此時使用連接串登錄到數(shù)據(jù)庫進(jìn)行停起操作,結(jié)果將會處于更加慘烈境況:數(shù)據(jù)庫將因?yàn)闊o法正常登錄導(dǎo)致無法啟動數(shù)據(jù)庫。 3.故障原因 詭異的故障背后的原因竟然是那樣的基礎(chǔ):ORACLE_SID沒有指定! 確認(rèn)系統(tǒng)當(dāng)前的ORACLE_HOME和ORACLE_SID環(huán)境變量 [oracle@asdlabdb01 ~]$ echo $ORACLE_HOME /oracle/app/oracle/product/10.2.0/db_1 [oracle@asdlabdb01 ~]$ echo $ORACLE_SID [oracle@asdlabdb01 ~]$ 可見,此時只設(shè)置了ORACLE_HOME環(huán)境變量,但ORACLE_SID此時為空,這就是該問題的真實(shí)原因。 4.故障處理 給出ORACLE_SID,重新嘗試登錄。 [oracle@asdlabdb01 ~]$ export ORACLE_SID=ora10g [oracle@asdlabdb01 ~]$ echo $ORACLE_SID ora10g [oracle@asdlabdb01 ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.3.0 - Production on Sat Aug 27 23:27:34 2010 Copyright (c) 1982, 2006, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options sys@ora10g> OK,此時問題處理完畢。 5.小結(jié) 這個案例給我們的啟迪是什么? 1)系統(tǒng)默認(rèn)的錯誤提示信息有時不具有參考價值。而且,某些情況下這些錯誤提示還可能給我們帶來誤導(dǎo)。原因很簡單,系統(tǒng)默認(rèn)的錯誤提示信息不可能囊括所有故障現(xiàn)象; 2)任何系統(tǒng)級別的設(shè)置問題都有可能導(dǎo)致數(shù)據(jù)庫系統(tǒng)出現(xiàn)異常; 3)在遇到故障的時候,我們需要沉著冷靜。有些時候可能需要我們Check最原始的信息,切莫想當(dāng)然。 建議:為了避免出現(xiàn)文章中提到的問題,第一,可以將ORACLE_SID等環(huán)境變量寫入到系統(tǒng)profile中,但需要確保系統(tǒng)profile文件內(nèi)容的有效性;第二,不在profile中進(jìn)行填寫,每次登錄數(shù)據(jù)庫服務(wù)器時手工完成數(shù)據(jù)庫環(huán)境變量的指定,這種方法雖然增加了鍵盤的敲擊,但它更直觀、更有保障。 Good luck. secooler 10.08.27 -- The End -- |
|