談到ora-12154問題,網上有一大堆解決方法,原因基本統一:tns或listener配置不正確。對于listener配置不正確的一般較少發生,大多數人都是按照默認配置一路“下一步”過來的,基本都是orcl的服務名,如果說本地可以連通orcl,別的機子就連不通那應該跟listener關系不大。大部分都是tns配置不正確。我遇到的現象是:在本機建了一個2003的虛擬機,虛擬機里面裝了oracle10g,默認配置。本機只裝了oracle10g的客戶端,當我以前用本機連接局域網內數據庫的orcl服務(數據庫與局域網內數據庫一樣)時沒有問題,但是在連接虛擬機中的orcl服務卻連不通,總是報ora-12154錯誤。而虛擬機內,plsql卻可以連接虛擬機oracle,但是不能連接本機所在局域網內的oracle。
按照如下過程,一般都能解決:
- 在虛擬機內開cmd,用lsnrctl status查看監聽器監聽的服務
- 如看到監聽服務“orcl”,那在本機的tns配置中(SERVICE_NAME = orcl)必須寫orcl;如果想要自定義,則在虛擬機內的listener配置中就要加入自定義服務名,記得要重啟監聽服務:lsnrctl reload
- 最后形成的配置文件如下
虛擬機listener:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = test) 自定義服務名 (ORACLE_HOME = E:\oracle\product\10.2.0\db_1) db_home (SID_NAME = test) ) (SID_DESC = (PROGRAM = extproc) (SID_NAME = PLSExtProc) (ORACLE_HOME = E:\oracle\product\10.2.0\db_1) ##這個服務保證你可以使用外部過程,如C程序 ) ) |
本機tns:
1
2
3
4
5
6
7
8
9
|
ORCL_XNJ = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 182.12.15.232)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = test) 與自定義服務名對應 ) ) |
再次連接,問題解決!
記住,一定從最簡單的原因找起,不要一上去就看到網上的什么改process數、注冊表之類的,要想想本機能連為什么通過網絡就不行,還是定位問題。