系統上線一下子有幾百人用數據庫出現異常
ORA: TNS: 監聽程序找不到符合協議堆棧要求的可用處理程
一開始以為數據庫出了問題呢
使用sqlplus連接以後查看當前會話數processes和sessions值發現session數和個參數的值已經非常逼近
Sql代碼
SQL> select count(*) from v$session;
COUNT(*)
SQL> show parameter processes
NAME TYPE VALUE
db_writer_processes integer
gcs_server_processes integer
job_queue_processes integer
log_archive_max_processes integer
processes integer
SQL> show parameter sessions
NAME TYPE VALUE
java_soft_sessionspace_limit integer l
icense_max_sessions integer
license_sessions_warning integer
logmnr_max_persistent_sessions integer
sessions integer
shared_server_sessions integer
修改processes和sessions值
Sql代碼
SQL> alter system set processes= scope=spfile;
系統已更改
SQL> alter system set sessions= scope=spfile;
系統已更改
查看processes和sessions參數但更改並未生效
Sql代碼
SQL> show parameter processes
NAME TYPE VALUE
db_writer_processes integer
gcs_server_processes integer
job_queue_processes integer
log_archive_max_processes integer
processes integer
SQL> show parameter sessions
NAME TYPE VALUE
license_max_sessions integer
license_sessions_warning integer
logmnr_max_persistent_sessions integer
sessions integer
shared_server_sessions integer
重啟數據庫使更改生效
Sql代碼
SQL> shutdown
SQL> startup
SQL> show parameter processes
NAME TYPE VALUE
db_writer_processes integer
gcs_server_processes integer
job_queue_processes integer
log_archive_max_processes integer
processes integer
SQL> show parameter sessions
NAME TYPE VALUE
java_soft_sessionspace_limit integer
license_max_sessions integer
license_sessions_warning integer
logmnr_max_persistent_sessions integer
sessions integer
shared_server_sessions integer
其他
ORACLE的連接數(sessions)與其參數文件中的進程數(process)有關它們的關系如下
sessions=(*process+)
但是我們增加process數時往往數據庫不能啟動了這因為我們還漏調了一個unix系統參數它是/etc/proc/kernel 中semmns這是unix系統的信號量參數每個process會占用一個信號量semmns調整後需要重新啟動unix操作系統參數才能生效不過它的大小會受制於硬件的內存或ORACLE SGA范圍可從——不等
semmns的計算公式為 SEMMNS>processes+instance_processes+system
processes=數據庫參數processes的值 instance_processes=(smonpmondbwrlgwrarch)
system=系統所占用信號量系統所占用信號量可用下列命令查出
#ipcs s
其中列NSEMS顯示系統已占用信號量
其它一些跟連接有關的參數如 licence_max_sessions licence_sessions_warning 等默認設置都為零也就是沒有限制我們可以放心大膽地使用數據庫了
From:http://tw.wingwit.com/Article/program/Oracle/201311/17721.html