温馨提示×

Debian下Oracle资源限制

小樊
32
2025-11-19 14:44:51
栏目: 云计算

Debian下Oracle资源限制实践


一 操作系统层资源限制

  • 创建Oracle用户与组

    • 建议创建专用系统账户与组,便于权限隔离与审计:
      • groupadd oinstall
      • groupadd dba
      • useradd -g oinstall -G dba -m oracle
      • passwd oracle
    • 创建Oracle基目录并授权:
      • mkdir -p /u01/app/oracle
      • chown -R oracle:oinstall /u01/app/oracle
      • chmod -R 755 /u01/app/oracle
  • limits.conf 关键项(/etc/security/limits.conf)

    • 对 oracle 用户设置进程数、文件句柄与锁定内存上限,示例值如下(可按物理内存与实例规模调优):
      • oracle soft nproc 2047
      • oracle hard nproc 16384
      • oracle soft nofile 1024
      • oracle hard nofile 65536
      • oracle soft memlock 33554432
      • oracle hard memlock 33554432
    • 说明:
      • nproc 控制单用户可创建的进程/线程数,影响数据库后台进程与并行执行能力。
      • nofile 控制进程可打开文件描述符上限,影响连接数、数据文件与日志文件句柄。
      • memlock 控制进程可锁定到物理内存的字节数,建议设置为略小于可用物理内存,避免换页影响SGA/PGA稳定性
  • PAM 与安全会话

    • 确保 PAM 启用 limits 模块,使 limits.conf 生效:
      • 在 /etc/pam.d/login 中加入:session required /lib64/security/pam_limits.so
    • 注意 32/64 位路径差异与系统发行版的 PAM 配置差异,必要时检查 /etc/pam.d/sshd 等登录入口
  • systemd 服务场景的补充

    • 若通过 systemd 管理 Oracle 相关服务(如监听、ASM/DB 实例),在对应的 service 单元中显式声明资源限制,例如:
      • [Service]
        • LimitNOFILE=65536
        • LimitNPROC=16384
        • LimitMEMLOCK=33554432
    • 这样可避免服务在 systemd 作用域内继承不到 limits.conf 的限制

二 Oracle数据库层资源限制

  • 启用资源限制

    • 以管理员身份登录数据库,开启资源限制总开关:
      • ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;
  • 常用 Profile 资源项与作用

    • SESSIONS_PER_USER:每用户最大并发会话数
    • CPU_PER_SESSION:每会话CPU时间(百分之一秒)
    • CPU_PER_CALL:每SQL调用CPU时间(百分之一秒)
    • CONNECT_TIME:会话最大连接时长(分钟)
    • IDLE_TIME:会话最大空闲时长(分钟)
    • LOGICAL_READS_PER_SESSION:每会话逻辑读块数
    • LOGICAL_READS_PER_CALL:每调用逻辑读块数
    • PRIVATE_SGA:共享服务器模式下每会话SGA私有区大小
    • COMPOSITE_LIMIT:综合资源限制(加权)
  • 常用 Profile 密码项与作用

    • FAILED_LOGIN_ATTEMPTS:连续失败登录次数上限
    • PASSWORD_LIFE_TIME:密码有效期(天)
    • PASSWORD_REUSE_TIME / PASSWORD_REUSE_MAX:密码重用时间/次数
    • PASSWORD_LOCK_TIME:失败锁定时间(天)
    • PASSWORD_GRACE_TIME:过期宽限期(天)
    • PASSWORD_VERIFY_FUNCTION:密码复杂度校验函数
  • 示例:创建并应用限制型 Profile

    • 创建自定义 Profile:
      • CREATE PROFILE app_profile LIMIT
        • SESSIONS_PER_USER 10
        • CPU_PER_SESSION 100000
        • CONNECT_TIME 480
        • IDLE_TIME 30
        • FAILED_LOGIN_ATTEMPTS 5
        • PASSWORD_LIFE_TIME 90
        • PASSWORD_REUSE_TIME 180
        • PASSWORD_REUSE_MAX 3
        • PASSWORD_LOCK_TIME 1;
    • 将 Profile 分配给用户:
      • ALTER USER scott PROFILE app_profile;
    • 查询与验证:
      • 查看所有 Profile:SELECT * FROM DBA_PROFILES;
      • 查看用户所属 Profile:SELECT USERNAME, PROFILE FROM DBA_USERS WHERE USERNAME=‘SCOTT’;

三 生效与验证

  • 操作系统层

    • 重新登录 oracle 用户(或重启相关服务),使 limits 生效。
    • 验证当前会话限制:
      • ulimit -u(查看 nproc)
      • ulimit -n(查看 nofile)
      • ulimit -l(查看 memlock)
    • 若通过 systemd 管理,使用 systemctl show 检查 LimitNOFILE/LimitNPROC/LimitMEMLOCK 是否生效
  • 数据库层

    • 确认资源限制开关:
      • SHOW PARAMETER RESOURCE_LIMIT;
    • 查询 Profile 配置与用户分配:
      • SELECT * FROM DBA_PROFILES WHERE PROFILE=‘APP_PROFILE’;
      • SELECT USERNAME, PROFILE FROM DBA_USERS WHERE USERNAME=‘SCOTT’;
    • 测试策略行为(如 IDLE_TIME、FAILED_LOGIN_ATTEMPTS)是否符合预期

四 调优建议与注意事项

  • 合理设置 memlock:建议设置为物理内存的70%–90%(以 KB 计),避免将全部内存锁定导致系统无法分配其他资源;并确保 vm.swappiness 较低以减少换页。
  • 文件句柄与进程数:结合业务并发连接、并行度与操作系统内核参数(如 fs.file-max)统一规划,避免“文件句柄不足”或“无法创建新进程”的错误。
  • 登录安全:生产环境建议设置合理的 FAILED_LOGIN_ATTEMPTS、PASSWORD_LIFE_TIME、PASSWORD_REUSE_* 与复杂度校验,降低暴力破解与口令复用风险。
  • 监控与告警:对 SESSIONS_PER_USER、IDLE_TIME 超限、登录失败激增等设置监控阈值,提前发现异常连接与资源争用。

0