1. 程式人生 > >ORA-12162: TNS:net service name is incorrectly specified

ORA-12162: TNS:net service name is incorrectly specified

設置 nco ora-12162 初始化 當前 問題 lec ... 多個實例

概述
因未設置系統環境變量ORACLE_SID導致ORA-12162錯誤

分析原因
首先登錄數據庫主機執行 oerr ora 12162


我們首先查看看下 tnsnames.ora文件


執行tnsping CC命令 檢查下是否可以tnsping通,核對IP和端口以及實例名

數據庫服務器端使用TNSNAMES.ORA中記錄的連接串連接沒有問題

查看是否指定ORACLE_SID ,使用echo $ORACLE_HOME和echo $ORACLE_SID確認系統當前的ORACLE_HOME和ORACLE_SID環境變量

發現 ORACLE_SID未指定.......
1
解決方法
如何查看ORACLE_SID呢?

兩種方式:

select name from v$database
查看tnsnames.ora文件得到 $ORACLE_HOME\network\admin\tnsnames.ora


我們這裏的ORACLE_SID為 CC

如果只想臨時生效的話,直接在當前窗口 執行 export ORACLE_SID=CC,此時只對當前的bash登錄session生效,重新打開的會話窗口依然無效。

export設置只對當前的bash登錄session有效。這是存在內存裏面的。
長期生效的話可以寫入配置文件。之後source 配置文件 ,使其生效。

將ORACLE_SID等環境變量寫入到系統profile中,確保系統profile文件內容的有效性;

設置RACLE_SID,重新嘗試登錄,解決。

詳說ORACLE_HOME和ORACLE_SID
通常情況下,ORACLE_SID這個環境變量全稱Oracle System Identifier,,用於在一臺服務器上標識不同的實例,默認情況下,實例名就是ORACLE_SID的值(即INSTANCE_NAME=$ORACLE_SID。

當然實例名也可以不同於ORACLE_SID這個環境變量,只要在初始化參數文件裏顯示指定INSTANCE_NAME參數值不同於ORACLE_SID環境變量的值即可)。

在UNIX/Linux平臺下,該環境變量主要作用是同ORACLE_HOME這個環境變量做hash運算,得到一個唯一值,用來標識共享內存段,及SGA

ORACLE_HOME環境變量是Oracle軟件的安裝路徑,順帶ORACLE_BASE環境變量是Oracle軟件安裝的基目錄。

結論:在UNIX、Linux平臺上,
相同的ORACLE_HOME下不可以同時運行ORACLE_SID相同的多個實例,
不同的ORACLE_HOME下可以同時運行ORACLE_SID相同的多個實例!

ORA-12162: TNS:net service name is incorrectly specified