今天在windows server 2012上安裝了一個oracle 11g的數據庫,但是安裝 完成以後發現在我的機器上訪問數據庫出現錯誤,ora-12541:TNS:無監聽程序。

後來查詢了很多資料,加上借鑑師兄的博客,我知道了問題的所在,今天拿出來分享一下:

具體操作步驟如下:

1.下載plsql,安裝.

2.下載Instant Client,點擊下載,下載第一個basic就行了,下載完解壓縮,以放到主win7 d盤根目錄為例:d:\instantclient_11_2

3.在d:\instantclient_11_2新建tnsnames.ora,用記事本編輯.

4.到server 2012的oracle安裝目錄找到 …\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora,打開,比如數據庫實例是orcl,找到如下代碼,拷貝到本機d:\instantclient_11_2\tnsnames.ora裏

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = server 2012 IP)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

5.添加一個環境變量,名為TNS_ADMIN,值為tnsnames.ora文件所在路徑d:\instantclient_11_2\tnsnames.ora,plsql通過這個找到orcl連接字符串

6.添加一個環境變量NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK

7.打開PLSQL,不用登陸,工具-首選項-ORACLE-連接:
勾選檢查連接
Oracle主目錄: d:\instantclient_11_2
OCI庫: d:\instantclient_11_2\oci.dll

經過以上幾步之後,重啓PLSQL,問題來了,報錯:ora-12541:TNS:無監聽程序. ping是可以ping得通的,server 的監聽也開着.經過不懈的努力,多次試驗終於解決了:

1網絡連接IPV4設置靜態IP
IP地址:192.168.1.111 (111可修改成自己的 1-255)
子網掩碼:255.255.255.0
默認風頭:192.168.1.1
首選DNS服務器:192.168.1.1
修改完記得主win7上 ping 192.168.1.111 ping得通再繼續往後.

2.修改..\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
SID_NAME = CLRExtProc 改為 SID_NAME = orcl orcl是實例名
HOST = localhost 改為 HOST = 192.168.1.111

3.修改..\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
兩處 HOST = localhost 改為 HOST = 192.168.1.111
SID = CLRExtProc 改為 SID = orcl

好了,重啓oracle,監聽,主win7上的plsql就可以遠程連接虛擬機上的數據庫了.

 

 

下面供大家參考:

排查問題:在服務端機器上
1.首先檢查監聽程序是否能正常啓動,開始,運行 cmd--->lsnrctl start,檢查監聽是否是在正常運行,如果正常運行,會提示:TNS-01106: 使用名稱LISTENER的監聽程序已經啓動。如果沒有運行,用上面的命令啓動監聽程序。
2.還在命令提示行裏用 tnsping 服務名 ,來檢查tnsnames.ora服務配置是否正確。正確的提示例如:
  已使用 TNSNAMES 適配器來解析別名
 

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
  (HOST = 192.168.0.6)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = 服務名)))
  OK (50 毫秒)


命令1: tnsping orcl (ping 本地的orcl,)
結果:已使用 TNSNAMES 適配器來解析別名

嘗試連接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 152
  1)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl1)))
  OK (0 毫秒)


  其中:(HOST = localhost) 監聽器是這麼解析的
命令2:tnsping 159.156.1.207/orcl1(加上本地ip來ping本地實例)
  結果:已使用 EZCONNECT 適配器來解析別名

嘗試連接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orcl1))(ADDRESS=(PROTOCOL=TCP)
  (HOST=159.156.1.207)(PORT=1521)))
  TNS-12541: TNS: 無監聽程序
  其中:(HOST=159.156.1.207)監聽器是這麼解析的


錯誤就在這裏了,按常理來説,localhost和159.156.1.207(本機IP)應該是同樣可行的,但是oracle監聽器解析時就是沒能正確通過。
解決辦法:先是嘗試修改監聽器配置文件:tnsnames.ora中的配置,但是均告失敗
最後,打開Oracle 自己的工具:Net Configuration Assistant 將原來的監聽器重新配置一遍,走流程不修改,直到完成。重新啓動監聽器,測試加ip來ping實例,正常通過
結果:已使用 EZCONNECT 適配器來解析別名
嘗試連接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orcl1))(ADDRESS=(PROTOCOL=TCP)
(HOST=159.156.1.207)(PORT=1521)))
OK (0 毫秒)
結論:成功解決了數據庫遠程連接問題,問題原因我猜想是ORACLE的監聽器沒能正確的映射本機IP和loaclhost,導致報錯,通過重新配置監聽器,就將IP和localhost正確的映射了