10g TNS 13541 监听错误 tnsping可以但是conn system/manager@mult1.net 报错
error message:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
出錯原因有很多,如果你檢查service里面所有的服務都是started,那說明是監聽服務和數據庫實例服務的主動跟被動的關系原因導致的。
?
問題解決有2,
方法1.是讓listener主動加載服務
原因是?添加
????(SID_DESC =
????? (SID_NAME = orcl)
????? (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
??? )
后,在使用lsnrctl start監聽程序時會將listener的服務注冊到進程監視器(pmon)中
方法2.listener被動加載服務
在service里面stop監聽服務和數據庫實例服務,然后先重新啟動監聽服務,再啟動數據庫實例服務。
原因是,如果沒有該內容,那么由實例的pmon進程在listener中注冊服務,對listener來講,就是被動了。
這也就是為什么先啟動監聽后啟動數據庫能夠正常連接的,反之不行的原因了。
?
Dynamically register 與Local_listener參數
因為一個測試庫安裝了特殊的服務之后會自動往LOCAL_LISTENER參數里設置值,導致利用原參數文件重建的數據庫無法自動注冊監聽服務。
同一主機的其他數據庫能自動注冊監聽服務。
<期間重試了Reload 刪除 LISTENER 重新建立一個新的LISTENER等無用功>
非默認監聽由于LOCAL_LISTENER參數的設置,變成動態注冊
改變參數
SQL> alter system set LOCAL_LISTENER='';
系統已更改。
?
SQL> show parameter lis
?
NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ------------------------------
local_listener?????????????????????? string?????
recovery_parallelism???????????????? integer???? 0
remote_listener????????????????????? string?????
終于解決了。
LSNRCTL> status
Service "TEST2" has 1 instance(s).
? Instance "TEST2", status READY, has 1 handler(s) for this service...
Service "TEST2XDB" has 1 instance(s).
? Instance "TEST2", status READY, has 1 handler(s) for this service...
?
a、PMON進程1分鐘運行一次,當監聽剛剛啟動的時候,可能服務還沒有注冊進去,這時候是不能使用此服務的
b、在修改local_listener參數時,PMON進程也會重新注冊一次
c、如果數據庫shutdown后,PMON進程也停止了,服務會從監聽中刪除,這時候只能使用OS認證的方式連入數據庫
ORA-12514: TNS: listener does not currently know of service requested in connect descriptor
這是個相當惡心的錯誤,就像癲癇病人一樣,不知道什么時候就犯了,好好的用著,吃晚飯再連,就報no listener 起了監聽,之后就是這個錯誤。胡搞一通,不行,重啟OK。不知道哪里的問題,因為是測試環境,經常會重啟,這個錯誤就想幽靈一樣時出時沒。現在的oracle怎么那么難伺候!!煩的多了終于下定決心要找出問題所在,于是在網上閱貼無數,終于找著了能按照一定規律解決問題的方法,就轉載了過來
關于這個錯誤,有很多種情況,我知道有2種情況,以下是網上摘錄的:
1、近日在配置Oracle 10G的流復制環境時,遇到一個問題,關閉數據庫(shutdown immediate)后,通過SQL Plus連接數據庫:conn sys/his@orc0 as sysdba,出現如下錯誤:
ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務
通過重啟服務的方式啟動數據庫,再次連接卻能成功登錄,也就是說在關閉數據庫狀態下無法連接服務器。
開始以為是系統環境變量Oracle_SID的配置問題,因為機器有多個實例,一陣折騰后還是不能連接。后來查資料得知:
Oracle9i以后,后臺進程PMON自動在監聽器中注冊在系統參數SERVICE_NAMES中定義的服務名,SERVICE_NAMES默認為DB_NAME+DOMAIN_NAME。監聽配置文件listener.ora中可以不必指定監聽的服務名。但是,當數據庫處于關閉狀態下PMON進程沒有啟動,也就不會自動注冊監聽的實例名,所以使用sqlplus sys/his@orc0 as sysdba 會出現ORA-12514錯誤。
如果在listener.ora文件中指定監聽的實例名,則即使數據庫處于關閉狀態,仍然可以連接。
listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = G:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(http://blog.sina.com.cn/s/blog_4abe7f3a0100g7mm.html) - ORA-12514: TNS: 監聽程序當前無法識別連接描述符中_(ORACLE_HOME = G:\oracle\product\10.2.0\db_1)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = zyk)(PORT = 1521))
)
)
以上粗體部件為增加的內容,修改后重啟監聽服務后即可。
附:通過在lsnrctl中輸入set display verbose,然后再通過命令service查看,服務狀態為READY表示PMON自動注冊的服務名,而UNKNOWN則表示該服務是手工在LISTENER.ORA中配置的數據庫服務。
2、可能是數據庫服務器蹦了,這樣的話,光重啟服務是不行的,重啟機器也無濟于事。可以用下面的方法解決。
打開cmd窗口,輸入sqlplus / as sysdba;startup,完畢后即恢復正常,執行速度有點慢,耐心等待。
該問題附帶錯誤可能是:
oracle not available
shared memory realm does not exist
上述是我轉載的文章,試了一下第一種,成功了。應該是有用的。
用sqlplus登陸時報錯
ERROR:ORA-12514: TNS:listener does not currently know of service requested in connect
------解決方法--------------------------------------------------------
如果服務器和客戶端在同一個子網中,在監聽器的配置文件中不填ip,填計算機名。
------解決方法--------------------------------------------------------
如果是同一網段的話,可以將你現在填寫的計算機ip改成對應的計算機名字,不過要求網段中計算機名唯一
------解決方法--------------------------------------------------------
關于LISTENER.ORA,TNSNAMES.ORA和SQLNET.ORA的存在問題
最近一次巡檢客戶的數據庫時發現一個小小異常,在$ORACLE_HOME/network/admin目錄下居然只有一個tnsnames.ora文件,sqlnet.ora和listener.ora文件都沒有,
檢查環境變量設置和當前LISTENER進程情況,沒有異常,嘗試通過TNS登錄數據庫,都是正常的,馬上想到的問題是是否這個文件是被誤刪掉了,其次就是這種情況下重新啟動數據庫監聽的話是否會因為沒有LISTENER.ORA文件而無法正常啟動監聽。由于是客戶在線生產庫,所以沒有貿然嘗試,因為從監聽日志中看到當前連接還是很頻繁的,平均一分鐘有20左右的連入,相對比較繁忙的狀況。
因為客戶的數據庫運行在10.2.0.4上,所以接下來的實驗找了一個10.2.0.5的庫來進行,版本比較接近,當然就這個問題來說可以估計只要是10G的版本都不會區別太大的。
首先將當前的三個文件做了移動,
Wilson-> pwd
/u01/app/oracle/product/10.2.0/db_1/network/admin
Wilson-> mkdir temp
Wilson-> mv ./*.ora ./temp
然后嘗試啟動監聽和數據庫,
監聽啟動成功,檢查進程狀態正常,那么這里的結論是如果當前機器上只有一個實例在跑,并且端口使用的都是缺省的1521,那么沒有listener.ora文件的話,lsnrctl會嘗試啟動缺省的監聽器,監聽當前機器的1521端口。但是當前使用的listener.ora文件在listener.log文件中可以看到,
使用listener.ora文件的日志:
TNSLSNR for Linux: Version 10.2.0.1.0 - Production on 26-APR-2011 13:07:09
Copyright (c) 1991, 2005, Oracle.? All rights reserved.
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Trace information written to /u01/app/oracle/product/10.2.0/db_1/network/trace/listener.trc
Trace level is currently 0
沒有使用listener.ora文件的日志:
TNSLSNR for Linux: Version 10.2.0.5.0 - Production on 21-JUL-2011 03:40:57
Copyright (c) 1991, 2010, Oracle.? All rights reserved.
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Trace information written to /u01/app/oracle/product/10.2.0/db_1/network/trace/listener.trc
Trace level is currently 0
當然了,并不只是這點表面上的區別,下面是兩種情況下lsnrctl status的輸出:
使用listener.ora文件的日志:
Wilson-> lsnrctl status
LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 21-JUL-2011 04:50:46
Copyright (c) 1991, 2010, Oracle.? All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias???????????????????? LISTENER
Version?????????????????? TNSLSNR for Linux: Version 10.2.0.5.0 - Production
Start Date??????????????? 21-JUL-2011 03:40:57
Uptime??????????????????? 0 days 1 hr. 9 min. 48 sec
Trace Level?????????????? off
Security????????????????? ON: Local OS Authentication
SNMP????????????????????? OFF
Listener Log File???????? /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
? (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Wilson.MyCorp)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
? Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
? Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl_XPT" has 1 instance(s).
? Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
沒有使用listener.ora文件的日志:
Wilson-> lsnrctl status
LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 21-JUL-2011 04:52:25
Copyright (c) 1991, 2010, Oracle.? All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias???????????????????? LISTENER
Version?????????????????? TNSLSNR for Linux: Version 10.2.0.5.0 - Production
Start Date??????????????? 21-JUL-2011 04:51:32
Uptime??????????????????? 0 days 0 hr. 0 min. 53 sec
Trace Level?????????????? off
Security????????????????? ON: Local OS Authentication
SNMP????????????????????? OFF
Listener Parameter File?? /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File???????? /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
? (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
? (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Wilson.MyCorp)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
? Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
? Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
? Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl_XPT" has 1 instance(s).
? Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
可見兩種情況下,首先是否啟動外部監聽是有區別的,也就是說如果程序中使用到了EXTPROC方式,那么不配置listener.ora就可能會有問題,其次才是是否使用了參數文件的區別。
至于sqlnet.ora文件的存在與否,這個不用多說,如果沒有sqlnet.ora文件,ORACLE會缺省使用TNSNAMES,ONAMES,HOSTNAME三種方式來嘗試連接,
上面是三個文件都不存在情況下的實驗,
Wilson-> sqlplus /nolog
SQL*Plus: Release 10.2.0.5.0 - Production on Thu Jul 21 05:09:47 2011
Copyright (c) 1982, 2010, Oracle.? All Rights Reserved.
SQL> conn scott/tiger
Connected.
SQL> conn?
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Warning: You are no longer connected to ORACLE.
SQL> conn?
Connected.
SQL> conn?
Connected.
(端口號如果是1521,可以省略)
下面試驗有sqlnet.ora,但是只配置使用TNSNAMES方式,
#NAMES.DIRECTORY_PATH= (HOSTNAME, TNSNAMES, EZCONNECT)
NAMES.DIRECTORY_PATH= (TNSNAMES)
Wilson-> sqlplus /nolog
SQL*Plus: Release 10.2.0.5.0 - Production on Thu Jul 21 05:14:15 2011
、
Copyright (c) 1982, 2010, Oracle.? All Rights Reserved.
SQL> conn / as sysdba
Connected.
SQL> conn scott/tiger
Connected.
SQL> conn?
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Warning: You are no longer connected to ORACLE.
可見沒有HOSTNAME方式或者EZCONNECT方式都會導致這種簡單連接方式的失敗。
SQL> conn?
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
Warning: You are no longer connected to ORACLE.
SQL> conn?
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
至于HOSTNAME和EZCONNECT這兩種方式,個人感覺在10g中已經沒有什么大的區別,感覺是ORACLE10g中人為制造出來的一個NEW FEATURE,而相應的之前的HOSTNAME方式已經被取代,
在10.2.0.5這個版本上,我無法試驗成功HOSTNAME直接方式連接成功。
下面引用ORACLE官方的說法,
Oracle 10g Easy Connect Naming
Easy connect naming is not allowed in large or complex environments that require additional connect information. (Large or complex environments employ advanced features, such as connection pooling, external procedure calls, or Heterogeneous Services.) In these cases, you must use another naming method.
With Oracle 10g, easy connect naming is automatically configured by default at installation. However, before attempting to use this feature, you may want to ensure that EZCONNECT is specified first in the names.directory_path parameter in the sqlnet.ora file. The names.directory_path parameter is used to specify the order of naming methods that Oracle Net can use to resolve connect identifiers to connect descriptors. Verification is easy. To verify that the names.directory_path settings are correct, follow these instructions:
Start Oracle Net Manager.
?
In the navigator pane, expand Local > Profile.
?
From the list in the right pane, select Naming.
?
Click the Methods tab. Ensure that EZCONNECT is listed in the Selected Methods list. If it is not, then proceed to Step 5.
?
From the Available Methods list, select EZCONNECT, then click the right-arrow button.
?
From the Selected Methods list, select EZCONNECT, then use the Promote button to move the selection to the top of the list.?
?
Choose File > Save Network Configuration. The sqlnet.ora file updates with the names.directory_path parameter, listing ezconnect first: names.directory_path =(ezconnect, tnsnames).
從上面的表述中也可以看出來,其實HOSTNAME連接方式已經是保留對之前版本的支持而已,11gR2WIN32版本中,ORACLE的NETMGR程序中還可以看到這種連接方式,但是更常被用到的NETCA程序中已經看不到這個連接方式的存在了。
最后說下tnsnames.ora,這個文件其實取決于當前應用所需要的連接方式,在TCP/IP環境下基本上是必不可少的,否則就只能通過類似JAVA連接字符串的形式來連庫了。如果需要使用TNSNAMES,也就是本地服務名方式來連接數據庫,那么就是必須的要使用到這個文件了。
總結
以上是生活随笔為你收集整理的10g TNS 13541 监听错误 tnsping可以但是conn system/manager@mult1.net 报错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Distributed Systems-
- 下一篇: 树莓派第三代跨越发展,采用64位处理器内