監聽程式無法分發客戶機連線
可能是如下的原因:客戶連線到監聽器後,監聽器把客戶重定向到排程程式埠(很可能不是1521埠),由於作業系統問題,這些連線會被拒絕。
要解決這個問題,只需要在LISTENER。ORA的頭部加入這一行DIRECT_HANDOFF_TTC_LISTENER = OFF 即可。
1:根據搜尋到的原因,我們在LISTENER。ORA頭部加入這一行
--------------------------------------------------------------------------------
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
DIRECT_HANDOFF_TTC_LISTENER = OFF
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
)
)
--------------------------------------------------------------------------------
2:執行以下命令重啟監聽器和EM
--------------------------------------------------------------------------------
lsnrctl stop
lsnrctl start
emctl stop dbconsole
emctl start dbconsole
--------------------------------------------------------------------------------
3:檢視監聽器狀態和登入EM,看到狀態,一切正常
--------------------------------------------------------------------------------
D:\Documents and Settings\gdy>lsnrctl service
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 15-7月 -2007 18:2
8:19
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
處理程式:
"DEDICATED" 已建立:0 已被拒絕:0
LOCAL SERVER
服務 "orcl" 包含 1 個例程。
例程 "orcl", 狀態 READY, 包含此服務的 3 個處理程式...
處理程式:
"D001" 已建立:0 已被拒絕:0 當前: 0 最大: 1002 狀態: ready
DISPATCHER <machine: NETPLUS, pid: 3448>
(ADDRESS=(PROTOCOL=tcps)(HOST=netplus)(PORT=1934))
"D000" 已建立:7 已被拒絕:0 當前: 6 最大: 1002 狀態: ready
DISPATCHER <machine: NETPLUS, pid: 3996>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1933))
"DEDICATED" 已建立:1 已拒絕:0 狀態:ready
LOCAL SERVER
服務 "orcl_XPT" 包含 1 個例程。
例程 "orcl", 狀態 READY, 包含此服務的 3 個處理程式...
處理程式:
"D001" 已建立:0 已被拒絕:0 當前: 0 最大: 1002 狀態: ready
DISPATCHER <machine: NETPLUS, pid: 3448>
(ADDRESS=(PROTOCOL=tcps)(HOST=netplus)(PORT=1934))
"D000" 已建立:7 已被拒絕:0 當前: 6 最大: 1002 狀態: ready
DISPATCHER <machine: NETPLUS, pid: 3996>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1933))
"DEDICATED" 已建立:1 已拒絕:0 狀態:ready
LOCAL SERVER
命令執行成功
來自:百度知道
---------------------------------------------------------------------------------------------------------------------------------------
一、listener檔案中的GLOBAL_DBNAME ,SID_NAME可能與例項名稱不符,修改後,重啟listener.
二、專有伺服器模式下processes值設的過小。可通過以下方法解決:
1.cmd
2.sqlplus
3.connect sys/test as sysdba
4.檢視會話數、processes、sessions
SQL> select count(*) from v$session;
COUNT(*)
----------
45
SQL> show parameter processes
NAME TYPE VALUE
db_writer_processes integer 1
gcs_server_processes integer 0
job_queue_processes integer 10
log_archive_max_processes integer 2
processes integer 50
SQL> show parameter sessions
NAME TYPE VALUE
java_soft_sessionspace_limit integer 0l
icense_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
sessions integer 60
shared_server_sessions integer
5.修改processes和sessions值:sessions=(1.1*process+5)
SQL> alter system set processes=300 scope=spfile;
系統已更改。
SQL> alter system set sessions=335 scope=spfile;
系統已更改。
6.重啟資料庫,使更改生效
三、共享模式下
1.show parameters dispatchers;
NAME TYPE VALUE
dispatchers string (protocol=tcp)(service=oracle10xdb)
max_dispatchers integer
2.確定是否有足夠的dispatchers
SQL> select name, (busy/(busy + idle)) "dispatcher busy rate" from v$dispatcher ;
NAME dispatcher busy rate
---- --------------------
D000 .000121704
D001 .000042597
D002 .004935402
如果超過50%,則需要考慮增加更多的dispatchers;
3.改變dispathchers:
SQL>alter system set dispatchers = '(protocol=tcp)(dispatchers=3)(service=oracle10xdb)';
system altered
四、PGA記憶體設定太小
注:該方法沒試過。
作者“ERDP技術架構”