今天,有一个客户告诉我们,说他的linux环境,设置了内存参数后,数据库启动不了,叫我们去支持一下,接到通知后,我们到现场帮助客户处理问题。
1、客户说,他们调整了一下内存参数,调整及报错情况如下所述
SQL> alter system set memory_max_target=4096m scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
2、我们检查错误情况
[oracle@mytest ~]$ oerr ora 845
00845, 00000, "MEMORY_TARGET not supported on this system"
// *Cause: The MEMORY_TARGET parameter was not supported on this operating system or /dev/shm was not sized correctly on Linux.
// *Action: Refer to documentation for a list of supported operating systems. Or, size /dev/shm to be at least the SGA_MAX_SIZE on each Oracle instance running on the system.
[oracle@mytest ~]$
如果memory_max_target/memory_target设置过大,可能导致instance无法启动,报ORA-00845错误
这个错误有点误导,实际上这并不是说该平台版本上不支持AMM特性,只是设置的memory_max_target超过了系统中设置的share memory(/dev/shm)而已。在Oracle11g for linux中似乎使用了一种新的机制来管理共享内存段,而不是传统的sys v shm了。
所以针对这种情况,有两种解决方法:
--调小内存,使用之小于/dev/shm
--增加/dev/shm,使之超过max_target
在本案例中,我们是采用的是增加/dev/shm
3、解决问题
[root@mytest ~]# df -k /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
shmfs 2048000 0 2048000 0% /dev/shm
可以看到/dev/shm比memory_max_target,我们看了一下操作系统,还有足够的空间,所以直接增加/dev/shm
[root@mytest ~]# umount /dev/shm
[root@mytest ~]# mount -t tmpfs shmfs -o size=5120m /dev/shm
[root@mytest ~]# df -k /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
shmfs 5120000 0 5120000 0% /dev/shm
这里我们调节大一点,因为该系统用的asm,其中asm的使用也要考虑进去
如果要想让每次启动都自动挂载,需要把这个编辑到fstab文件里面。
[root@mytest ~] vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=5G 0 0
4、启动数据库
增加/dev/shm后再次启动instance
SQL> startup
ORACLE instance started.
Total System Global Area 4294967296 bytes
Fixed Size 1299624 bytes
Variable Size 2684354560 bytes
Database Buffers 2415919104 bytes
Redo Buffers 6373376 bytes
Database mounted.
Database opened.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29371470/viewspace-1086248/ ,如需转载,请注明出处,否则将追究法律责任。