1. 程式人生 > >使用PLSql連線Oracle時報錯ORA-12541: TNS: 無監聽程式

使用PLSql連線Oracle時報錯ORA-12541: TNS: 無監聽程式

   很多時候為了優化我們的啟動項把oracle的服務禁止了,可是重啟啟動之後使用PLSQL登陸oracle時會出現無監聽程式,這說明我們有一些服務沒有啟動。我們先檢視一下oracle的服務是否啟動,檢視方法是計算機-->>管理-->>服務和應用程式-->>服務,進行查詢oracle的啟動服務,

進入之後具體情況如下圖:


   在這裡可以看到oracle的啟動服務OracleServiceORCL和OracleOraDb11g_home1TNSLister,OracleDBCConsoleorcl等啟動項都是沒有啟動,在這裡把我上圖中紅色矩形框內的服務啟動就可以了。

在oracle11安裝成功之後,用PLSQL 登陸的時候提示ORA-12541: TNS:無監聽程式,無法進行登陸。在這裡總結了一下解決此類的辦法,希望可以幫到大家。

第一種方法:由於地址分配不對,我們這裡需要重新配置一下本機的環境。

oracle的安裝環境中找到network,如圖:


我的oracle安裝到了D盤,所以你根據自己安裝路徑進行尋找,例如:D:\app\Administrator\product\11.2.0\dbhome_2\NETWORK

LISTENER_ORCL =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost

)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ORCL)

    )

  )

ORACLR_CONNECTION_DATA=

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))

    )

    (CONNECT_DATA =

      (SID = CLRExtProc)

      (PRESENTATION = RO)

    )

  )

ORCL =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ORCL)

    )

  )

修改後的程式碼{

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ORCL)

    )

  )

把裡面的localhost修改成電腦隨機生成的IP

機名輸入localhost127.0.0.1都會提示無監聽程式。由於自動分配的IP地址會有變動,所以將oracle值中的host改成本機的計算機名,儲存修改後的tnsnames.ora。再次連線(10.1.10.183/orcl)資料庫,出錯問題解決。

第二種方法是具體檢視oracle的系統。

具體流程如下:

第一步:檢視oraclelog日誌。

發現下面錯誤:
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9
-2008 10:25:26

Copyright (c) 1991,2005, Oracle. All rights reserved.

系統引數檔案為D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
寫入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日誌資訊寫入D:\oracle\product\10.2.0\db_1\network\trace\listener.trc的跟蹤資訊跟蹤級別當前為0

pid=1704開始

監聽

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
監聽該物件時出錯:(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521)))
TNS-12545:
因目標主機或物件不存在,連線失敗
TNS-12560: TNS:
協議介面卡錯誤
TNS-00515:
因目標主機或物件不存在,連線失敗
32-bit Windows Error: 49: Unknown error
不再監聽:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))

第二步:檢視oracle的監聽程式是否啟動

    進入dos視窗,快捷鍵是 選單鍵+R,輸入cmd,在dos視窗中輸入lsnrctlstatus 檢視你的執行狀態,如果結果如下:

LSNRCTL for 32-bitWindows: Version 10.2.0.1.0 - Production on 20-9 -2008 10:5
0:44

Copyright (c) 1991,2005, Oracle. All rights reserved.

正在連線到(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
TNS-12541: TNS:
無監聽程式
TNS-12560: TNS:
協議介面卡錯誤
TNS-00511:
無監聽程式
32-bit Windows Error: 2: No such file or directory
正在連線到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521)))
TNS-12535: TNS:
操作超時
TNS-12560: TNS:
協議介面卡錯誤
TNS-00505:
操作超時
32-bit Windows Error: 60: Unknown error

代表你的監聽程式沒有啟動,需要你進行啟動監聽程式,啟動方式有兩種:一個是在dos中輸入lsnrctl start就可以了。另一種方式是:計算機à管理à服務à找到oracle的自啟服務,找到OracleOraDb11g_home1TNSListener,點選啟動就可以了。

第三種:重置監聽程式,以及配置本地網路名稱

我的電腦是window 7,所以從開始選單中找到oracle的安裝目錄,找到Net Configuration Assistant開啟之後,進行配置。主要配置是都過oracle自帶的管理工具實現的,具體如下圖:


這裡的圖片用的是網上搜尋的,不過方法我都使用了,因為那時候問題真的很多,換了好幾種方法。更多的知識朋友們可以搜尋一下我的公眾平臺:牧笛助手,賬號:MuDi_Assistant,最近剛開始籌建,打算分享學習中的案例已經各種問題bug的解決方法。掃一掃二維碼: