Linux環境下Oracle資源限制配置指南
在Linux系統中,Oracle數據庫的資源限制配置需結合操作系統級限制(通過limits.conf
和PAM模塊)和數據庫級限制(通過PROFILE
對象)兩部分完成,以確保數據庫運行的穩定性和安全性。
操作系統級的資源限制是Oracle數據庫正常運行的基礎,主要通過修改/etc/security/limits.conf
文件和配置PAM模塊實現。
/etc/security/limits.conf
文件該文件用于定義用戶或用戶組的資源限制,需為Oracle用戶(如oracle
)添加以下關鍵參數(以Oracle官方推薦值為例):
# Oracle用戶資源限制(軟限制/硬限制)
oracle soft nproc 2048 # 最大進程數(軟限制)
oracle hard nproc 16384 # 最大進程數(硬限制)
oracle soft nofile 1024 # 最大打開文件數(軟限制)
oracle hard nofile 65536 # 最大打開文件數(硬限制)
oracle soft stack 10240 # 棧大?。↘B,軟限制)
oracle hard stack 32768 # 棧大?。↘B,硬限制)
nproc
:限制Oracle用戶可創建的最大進程數,避免進程數耗盡導致系統崩潰;nofile
:限制Oracle用戶可打開的最大文件數(包括數據文件、日志文件等),確保數據庫能正常讀寫;stack
:限制每個進程的棧大小,防止棧溢出。確保PAM(Pluggable Authentication Modules)模塊能讀取limits.conf
中的限制,需編輯/etc/pam.d/login
文件(部分系統可能為/etc/pam.d/sshd
,若通過SSH登錄):
session required /lib64/security/pam_limits.so # 64位系統
# 或 session required /lib/security/pam_limits.so # 32位系統
該配置確保每次用戶登錄時,PAM模塊會自動加載limits.conf
中的資源限制。
以Oracle用戶登錄后,使用ulimit
命令驗證限制是否生效:
ulimit -Su # 查看Oracle用戶的進程數軟限制
ulimit -Hu # 查看Oracle用戶的進程數硬限制
ulimit -Sn # 查看Oracle用戶的打開文件數軟限制
ulimit -Hn # 查看Oracle用戶的打開文件數硬限制
輸出結果應與limits.conf
中的配置一致。
數據庫級的資源限制通過PROFILE
對象實現,用于控制用戶對數據庫資源的會話級或調用級使用,如CPU時間、邏輯讀、會話數等。
Oracle數據庫默認存在DEFAULT
PROFILE,所有未顯式分配PROFILE的用戶均使用該配置??赏ㄟ^以下SQL查看DEFAULT
PROFILE的資源限制:
SELECT * FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'KERNEL';
SESSIONS_PER_USER
:每個用戶的最大并發會話數(默認UNLIMITED
);CPU_PER_SESSION
:每個會話的CPU時間限制(單位:百分之一秒,默認UNLIMITED
);LOGICAL_READS_PER_SESSION
:每個會話的邏輯讀限制(單位:數據塊,默認UNLIMITED
);CONNECT_TIME
:會話最大連接時間(單位:分鐘,默認UNLIMITED
);FAILED_LOGIN_ATTEMPTS
:登錄失敗鎖定賬戶的嘗試次數(默認10
);PASSWORD_LIFE_TIME
:密碼有效期(單位:天,默認180
)。若需調整默認限制,可使用ALTER PROFILE
命令(以限制密碼有效期為例):
ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS 6, -- 登錄失敗6次后鎖定賬戶
PASSWORD_LIFE_TIME 90, -- 密碼有效期90天
PASSWORD_REUSE_TIME 180; -- 密碼180天內不可重用
該修改會影響所有使用DEFAULT
PROFILE的用戶。
若需為特定用戶(如scott
)設置更嚴格的限制,可創建自定義PROFILE:
-- 創建名為'test_profile'的PROFILE
CREATE PROFILE test_profile LIMIT
SESSIONS_PER_USER 5, -- 最大并發會話數5
CPU_PER_SESSION 10000, -- 每個會話CPU時間100秒
LOGICAL_READS_PER_SESSION 1000, -- 每個會話邏輯讀1000塊
CONNECT_TIME 30, -- 最大連接時間30分鐘
FAILED_LOGIN_ATTEMPTS 3, -- 登錄失敗3次后鎖定
PASSWORD_LIFE_TIME 30; -- 密碼有效期30天
-- 將'test_profile'分配給'scott'用戶
ALTER USER scott PROFILE test_profile;
創建后,scott
用戶的資源使用將受test_profile
限制。
Oracle數據庫默認不強制執行PROFILE中的資源限制(resource_limit
參數為FALSE
),需修改該參數使其生效:
ALTER SYSTEM SET resource_limit = TRUE SCOPE=SPFILE;
修改后需重啟數據庫使參數生效:
# 重啟Oracle數據庫(以Oracle 19c為例)
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
STARTUP;
重啟后,PROFILE中的資源限制將對所有用戶生效。
limits.conf
后需重新登錄用戶,修改resource_limit
后需重啟數據庫;v$session
、v$process
視圖),根據實際情況調整限制。