ORA-00845: MEMORY_TARGET not supported on this system
1 问题
Oracle 11G 中出现了memory_target 参数,用以实现自动 内存管理 。这个参数的实际使用 须要/dev/shm 空间的支持,若是/dev/shm的空间小于memory_target的值 ,就会遇到以下 错误:css
SQL> startup ORA-00845: MEMORY_TARGET not supported on this system
alert 日志中的信息相似以下:html
WARNING: You are trying to use the MEMORY_TARGET feature. This feature requires the /dev/shm file system to be mounted for at least 53687091200 bytes. /dev/shm is either not mounted or is mounted with available space less than this size. Please fix this so that MEMORY_TARGET can work as expected. Current available is 33619214336 and used is 26345472 bytes. Ensure that the mount point is /dev/shm for this directory. memory_target needs larger /dev/shm
2 分析
-
查看关于错误的描述 不少时候, Oracle 错误代码后面的提示信息会给咱们充足的信息。可是有些时候的信息也会让咱们有点儿懵圈。好比本次咱们须要了解的错误。 按照英文的意思,就是当前操做系统不支持使用memory_target参数。可是咱们知道, 在当前Linux操做系统中,这个参数是支持的。因此确定是有其余缘由。关于ORACLE错误 更详细的信息,可使用oerr ora errcode 。下面是本次相关错误的详细信息提示:java
[user@hostname ~]$ 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.
根据提示Cause:/dev/shm was not sized correctly on Linux. 咱们知道了此错误的缘由,原来是由于/dev/shm 的大小有问题。 而根据提示Action: size /dev/shm to be at least the SGA_MAX_SIZE…. 这里咱们知道了。/dev/shm 的大小至少应该大于 sga_max_size的值。node
-
肯定相关信息python
-
肯定/dev/shm 大小 /dev/shm 的大小,在普通Linux操做系统中默认为系统总物理内存大小的一半。sql
[oracle@RAS-DB ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lvroot 50G 14G 34G 29% / tmpfs 32G 356K 32G 1% /dev/shm /dev/mapper/VolGroup-lvapp 99G 39G 55G 42% /app /dev/sda1 194M 35M 150M 19% /boot /dev/mapper/VolGroup-lvoradata 3.8T 7.5G 3.6T 1% /oradata /dev/sr0 4.2G 4.2G 0 100% /media/CentOS_6.5_Final
-
肯定sga_max_size大小 查看参数文件,发现文件中没有SGA_MAX_SIZE参数值的显示设置。而只有memory_target参数值的明确设置。shell
*.memory_target=49152M
那么, 咱们只要让/dev/shm 的avaliable部分的大小大于memory_target 就确定是大于sga_max_size的 ,为啥这样确定?Oracle基本知识不在这里普及。数据库
从以上两部份内容,咱们了解到当前/dev/shm多大,咱们要求shm多大。明确了咱们应该怎么去调整/dev/shm的大小。 为了保险起见,通常/dev/shm 大小设置为与物理内存同样大小便可。sass
-
3 解决
- 调整/dev/shm
mount -o size=64G -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm 同时修改/etc/fstab以保证下次重启主机后,不会出现相同的问题ruby
- NOTE
- 有时候/dev/shm 对应的磁盘或者分区比较小,好比示例中咱们须要64G ,而实际只有32G. 有没有想过: 空间不足呀,怎么办呢?其实这里不须要关注/dev/shm对应的磁盘或者分区的 实际空间,只须要按照示例中的方法去修改,放心, 不会有问题。
tmpfs /dev/shm tmpfs default, size=64G 0 0
Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lvroot 50G 14G 34G 29% / tmpfs 64G 4.5G 60G 8% /dev/shm /dev/mapper/VolGroup-lvapp 99G 39G 55G 42% /app /dev/sda1 194M 35M 150M 19% /boot /dev/mapper/VolGroup-lvoradata 3.8T 9.6G 3.6T 1% /oradata /dev/sr0 4.2G 4.2G 0 100% /media/CentOS_6.5_Final
-
启动数据库
SQL> startup ORACLE instance started. Total System Global Area 5.1310E+10 bytes Fixed Size 2265224 bytes Variable Size 2.5904E+10 bytes Database Buffers 2.5367E+10 bytes Redo Buffers 36069376 bytes Database mounted. Database opened.