Got minus one from a read call
阿新 • • 發佈:2020-12-24
應用報錯: java.sql.SQLRecoverableException:IO 錯誤:Got minus one from a read
call
據開發人員描述:起多個服務的時候報這個錯,無論最後的服務是啥,提供的報錯日誌都是java.sql.SQLRecoverableException:IO 錯誤:Got minus one from a read call
原因
當應用連線資料庫時,是通過連線池的機制進行連線的,資料庫引數:max-session決定連線池的大小,而應用同樣也有一個引數,這個引數表示它連線資料庫連線池所佔用的最少資源。
有100個連線,這樣就要求資料庫連線池的max-session必須大於100,否則就會報“ Got minus one from a read call”的錯誤。
解決方法
修改max-session
檢視processes和sessions引數
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
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
sessions integer 60
shared_server_sessions integer
修改processes和sessions值
SQL> alter system set processes=300 scope=spfile;
系統已更改。
SQL> alter system set sessions=335 scope=spfile;
系統已更改。
修改processes和sessions值必須重啟oracle伺服器才能生效
ORACLE的連線數(sessions)與其引數檔案中的程序數(process)有關,它們的關係如下:
sessions=(1.1*process+5)
重啟Oracle
shutdown immediate;
startup;
5.再檢視processes和sessions引數
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 300
processes integer 50
SQL> show parameter sessions
NAME TYPE VALUE
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
sessions integer 335
shared_server_sessions integer
修改生效。