今天在windows server 2012上安裝了一個oracle 11g的數據庫,可是安裝 完成之後發如今個人機器上訪問數據庫出現錯誤,ora-12541:TNS:無監聽程序。sql
後來查詢了不少資料,加上借鑑博客園師兄的博客,我知道了問題的所在,今天拿出來分享一下:數據庫
具體操做步驟以下:windows
1.下載plsql,安裝.服務器
2.下載Instant Client,點擊下載,下載第一個basic就好了,下載完解壓縮,以放到主win7 d盤根目錄爲例:d:\instantclient_11_2網絡
3.在d:\instantclient_11_2新建tnsnames.ora,用記事本編輯.oracle
4.到server 2012的oracle安裝目錄找到 …\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora,打開,好比數據庫實例是orcl,找到以下代碼,拷貝到本機d:\instantclient_11_2\tnsnames.ora裏app
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.dllcode
通過以上幾步以後,重啓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正確的映射了