Oracle 12c安装实战:解决PRVG-0449堆栈软限制配置难题
1. 初识PRVG-0449错误堆栈软限制的拦路虎第一次在Oracle 12c安装过程中遇到PRVG-0449错误时我盯着屏幕上的红色警告愣了好几秒。错误信息明确告诉我Proper soft limit for maximum stack size was not found未找到正确的最大堆栈大小软限制但当时完全不明白这个堆栈软限制到底是个什么鬼。简单来说Linux系统对每个运行中的程序都设置了资源使用限制就像给每个工人分配的工作台大小。堆栈(stack)是程序运行时存放临时数据的内存区域而软限制则是系统默认允许的大小。Oracle数据库运行时需要较大的工作台默认的8192KB不够用至少需要10240KB。这个错误通常出现在安装前的预检查阶段具体表现为安装程序提示PRVG-0449错误代码预期值(Expected)显示10240实际值(Found)通常为8192错误可能出现在单个节点或集群所有节点上我后来发现这个问题在Oracle 12c RAC安装中尤其常见。有一次在客户现场三台服务器中有两台顺利通过检查唯独主节点报错就是因为这个堆栈限制配置不一致导致的。2. 快速诊断你的系统真的配置错了吗很多人一看到这个错误就急着去改limits.conf文件但根据我的经验有时候系统配置其实是正确的只是Oracle安装程序看不到这个正确配置。所以动手修改前我们需要先做几个简单检查。首先用这个命令查看当前用户的堆栈限制ulimit -s如果输出是8192那确实需要调整。但有时候这里显示10240Oracle安装程序却依然报错这就可能是环境加载的问题。更全面的检查方法是grep -i stack /etc/security/limits.conf grep -i stack /etc/security/limits.d/*.conf这能查看所有相关的系统限制配置文件。有一次我遇到个有趣的情况limits.conf配置正确但/etc/security/limits.d/下有个oracle用户的特殊配置文件把值覆盖了。对于RAC环境还需要在所有节点上执行这些检查。我习惯用这个简单的for循环for node in node1 node2 node3; do echo $node ssh $node ulimit -s; grep -i stack /etc/security/limits.conf done3. 治标又治本三种解决方案详解3.1 方法一limits.conf永久修改法这是最推荐的解决方案能永久生效。打开/etc/security/limits.conf文件在末尾添加oracle soft stack 10240 oracle hard stack 32768这里的数字单位是KB。保存后必须完全退出当前会话并重新登录才能生效。我见过不少人改了文件后直接继续安装结果还是报错就是因为没重新加载配置。有个细节需要注意如果系统使用了pam_limits模块大多数现代Linux都默认启用还需要检查/etc/pam.d/login和/etc/pam.d/sshd文件确保包含类似这样的行session required pam_limits.so3.2 方法二runfixup.sh脚本修复法Oracle安装包自带一个很实用的修复脚本。当遇到PRVG-0449错误时安装程序通常会在$ORACLE_HOME/cfgtoollogs/cvu目录下生成runfixup.sh脚本。执行方法很简单chmod x runfixup.sh ./runfixup.sh但关键点来了运行脚本后必须完全退出当前终端会话。我建议直接重启服务器最保险因为有些系统服务可能缓存了旧的限制值。这个方法的优点是简单快捷缺点是临时性的重启后可能失效。有一次我在客户现场用这个方法解决了问题但服务器例行重启后问题又出现了最后还是用方法一彻底解决的。3.3 方法三安装时临时调整法如果只是想在安装过程中临时绕过这个检查可以在运行安装程序前执行ulimit -s 10240然后在新终端中运行安装程序。但这个方法有两个明显缺点只对当前会话有效需要从设置了ulimit的终端启动新终端我一般只在测试环境用这个方法生产环境强烈建议用前两种永久解决方案。4. 避坑指南我踩过的那些雷4.1 坑一配置文件不生效明明改了limits.conf为什么就是不生效最常见的原因有三个文件格式错误每行必须是用户名 类型 限制项 值的格式用空格或tab分隔用户组配置冲突limits.d/下的配置文件可能覆盖了主配置SSH配置问题某些SSH配置会忽略PAM模块排查技巧使用su - oracle切换用户注意中间的横线然后立即执行ulimit -s查看。4.2 坑二RAC节点间不一致在RAC环境中我曾经遇到过所有节点配置都相同但只有一个节点报错的情况。后来发现是因为那个节点的/etc/pam.d/sshd文件被修改过。解决方案是使用集群同步工具如dcli确保所有节点配置一致dcli -g /home/oracle/nodelist -l root echo oracle soft stack 10240 /etc/security/limits.conf4.3 坑三图形安装界面缓存问题在通过VNC远程安装时即使正确修改了配置安装程序可能还是会报错。这是因为旧的限制值被缓存了。Oracle官方建议是关闭所有VNC会话重新登录后再试。我自己的经验是重启VNC服务比单纯重连更可靠service vncserver restart5. 原理深挖为什么Oracle需要这么大堆栈可能有人会好奇为什么Oracle需要10MB的堆栈空间这得从数据库工作原理说起。Oracle进程在处理复杂SQL时需要在堆栈中保存大量执行计划信息。特别是当SQL包含多层嵌套子查询时每层都会消耗堆栈空间。我见过一个真实案例某金融系统跑月结报表时出现栈溢出就是因为堆栈限制设得太小。现代Oracle版本对堆栈的需求11gR2最小8192KB推荐10240KB12c/18c最小10240KB推荐16384KB19c最小16384KB推荐20480KB这也就是为什么在12c安装时8192KB会报错而11g环境下可能只是警告。随着Oracle功能越来越复杂对系统资源的要求也在不断提高。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2475019.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!