Oracle

為什麼我不能將 oracle 會話值設置為 35?

  • December 29, 2016

我想模擬錯誤“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

正如其他人所提到的,程序與會話相互關聯,因此如果您設置一個,您可能需要設置另一個。

引用自:https://dba.stackexchange.com/questions/139147