Oracle初始化参数值设得过小怎么办
问题简述:
Oracle在创建实例的过程中,当初始化参数由于疏忽,忘记配了,而使用的默认值,此时距离自己性能的要求比较远该怎么办?
例如:在湖北移动开局过程中,shared pool 与buffer cache的值均设置的过小,如下图所示,安装时,使用的默认值.
使用过程中,发现db_cache_size 与shared_pool_size过小了,严重影响系统性能,
此时我们的第一个想法是:使用如下的命令
ALTER SYSTEM SET DB_CACHE_SIZE=2048M SCOPE=both;
ALTER SYSTEM SET shared_pool_size=336M SCOPE=both;
此时系统会提示
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00384: Insufficient memory to grow cache
即系统内存不足以分配,而分析下根本原因是sga的值设得过小,此时切忌使用
ALTER SYSTEM SET DB_CACHE_SIZE=2048M SCOPE=spfile;
这样会修改成功,但重启后会导致数据库起不来
说明:spfile与both的区别,对于非初始化参数,both是oracle不用重新启动立即生效,而spfile则是重启之后生效,此时你会发现重启时,数据库起不来了,报Insufficient memory。
解决方法如下:
1 以root用户检查操作系统参数(以实际系统的内存的一半修改)
vi /etc/sysctl.conf
在sysctl.conf文件中添加以下内容。
#kernel.shmmax=<shmmaxbytes>
kernel.shmmax=4294967296
步骤 1 保存sysctl.conf文件
步骤 2 依次运行如下命令使设置生效
# /etc/init.d/boot.sysctl start
# chkconfig boot.sysctl on
步骤 3 设置该文件在操作系统启动时自动加载
# sysctl –p
最终oracle数据库中sga_max_size是不会超过kernel.shmmax的值,所以建议将kernel.shmmax设为内存的一半