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 # 栈大小(KB,软限制)
oracle hard stack 32768 # 栈大小(KB,硬限制)
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视图),根据实际情况调整限制。