使Oracle的SGA常驻物理内存

Oracle中的lock_sga和pre_page_sga这两个静态初始化文件参数是用来指示SGA如何使用操作系统内存的。在Linux上启动Oracle数据库的时候,如果设置了lock_sga=true,那么就有可能碰到如下的报错信息:
SQL> startup;
ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory

这是因为Linux操作系统对应用程序使用内存有一些限制,在SHELL中使用ulimit命令可以查看到如下的信息:
[oracle@dev111 ~]$ ulimit -a | grep memory
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
virtual memory          (kbytes, -v) unlimited

可以看出,lock_sga跟max locked memory的限制是存在冲突,如果保持lock_sga=true参数设置的话,必须修改Linux的max locked memory限制。在/etc/security/limits.conf这个配置文件中添加如下的一行(oracle是启动数据库的操作系统账号),意思是oracle用户可以在物理内存中锁住任意大的空间:
oracle   -   memlock unlimited

之后使用oracle重新登录系统,数据库就可以正常启动了!而另一个初始化参数pre_page_sga设置为true的话,数据库启动的时候就会在内存中分配好整个SGA,这将使Oracle数据库的启动时间加长。

你可能感兴趣的:(oracle,sql,linux,Security)