Oracle
為什麼我不能將 oracle 會話值設置為 35?
我想模擬錯誤“ORA-00018.Maximum number of sessions exceeded”,所以想限制會話數為 35,打開 serverl sqlplus 模擬這個錯誤,但是會話數沒有變化
SQL> show parameter sessions; NAME TYPE VALUE ------------------------------------ ----------- ----------- java_max_sessionspace_size integer 0 java_soft_sessionspace_limit integer 0 license_max_sessions integer 0 license_sessions_warning integer 0 sessions integer 248 shared_server_sessions integer
將會話從 248 更改為 35
SQL> alter system set sessions=35 scope=spfile; System altered. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down.
重啟oracle實例
SQL> startup ORACLE instance started. Total System Global Area 1071333376 bytes Fixed Size 1375792 bytes Variable Size 763363792 bytes Database Buffers 301989888 bytes Redo Buffers 4603904 bytes Database mounted. Database opened.
沒有改變
SQL> show parameter sessions; NAME TYPE VALUE ------------------------------------ ----------- ----------- java_max_sessionspace_size integer 0 java_soft_sessionspace_limit integer 0 license_max_sessions integer 0 license_sessions_warning integer 0 sessions integer 248 shared_server_sessions integer
誰能告訴我為什麼我不能將此值更改為 35,以及如何模擬“ORA-00018.Maximum number of sessions exceeded”錯誤?
派生的預設值:(1.5 * PROCESSES) + 22
…
Oracle 使用此參數的預設值作為其最小值。介於 1 和預設值之間的值不會觸發錯誤,但 Oracle 會忽略它們並改用預設值。
如果你想減少
sessions
,你也需要減少processes
。儘管如此,如果您減少程序,您將擁有大量“免費”會話,並且您將需要打開多個會話,直到收到錯誤消息。模擬錯誤而不弄亂
processes
和打開多個連接的最簡單方法:alter system set dispatchers = '(PROTOCOL=TCP)'; alter system set shared_servers = 1; alter system set shared_server_sessions = 0; $ sqlplus user/password@\'127.0.0.1:1521/orcl:shared\' SQL*Plus: Release 12.1.0.2.0 Production on Sat May 21 11:38:41 2016 Copyright (c) 1982, 2014, Oracle. All rights reserved. ERROR: ORA-00018: maximum number of sessions exceeded
Oracle 數據庫實例為了執行而創建了幾個後台會話,這些會話計入會話數。例如,這裡是一個 Oracle 12c 實例,一個使用者連接:
Prod:SYS> select type, count(*) from v$session group by type; TYPE COUNT(*) ---------- ---------- USER 1 BACKGROUND 34
正如其他人所提到的,程序與會話相互關聯,因此如果您設置一個,您可能需要設置另一個。