sqlplus user/pass@orcl 報 ORA-12518: TNS:listener could not hand off client connection。Listener refused the connection ... ORA-12518。ORA-12518 表示**監聽器無法將連接移交給服務進程**,常見於:
listener.ora 中 SID_NAME 與實際實例名不一致。processes/sessions 參數過小。oracle 可執行文件位置不對。sqlplus / as sysdba
-- 若能登錄,說明實例正常,問題在監聽器/網絡
lsnrctl status
-- 確認 Services 摘要中顯示 "orcl" 狀態 READY
# listener.ora 關鍵點
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl) # 必須與實例名一致
(ORACLE_HOME = /correct/path) # 64位客戶端必須指向 64位 ORACLE_HOME
)
)
# tnsnames.ora 關鍵點
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 正確IP或主機名)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = orcl)) # 或 SID = orcl
)
-- 以 sysdba 登錄後
SHOW PARAMETER processes; -- 建議 ≥ 300
SHOW PARAMETER sessions; -- 建議 ≥ 450 (1.5 * processes)
-- 若不足
ALTER SYSTEM SET processes=500 SCOPE=SPFILE;
ALTER SYSTEM SET sessions=750 SCOPE=SPFILE;
-- 重啟實例生效
telnet 服務器IP 1521 # 確保通
# 服務器防火牆放行 1521
jdbc:oracle:thin:@(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=orcl)(SERVER=DEDICATED))
)
# 避免依賴 tnsnames.ora,直接在連接串寫完整描述
ORA-1251890% 是 **SID_NAME 不匹配** 或 **進程數上限**。先在本機sqlplus / as sysdba驗證實例,再核對listener.ora的SID_NAME與ORACLE_HOME,最後調大processes/sessions。