SQL> startup force;
1) ORA-00845: MEMORY_TARGET not supported on this system

问题分析:

该错误是由于/dev/shm小于MEMORY_TARGET的大小,或者是/dev/shm根本就没有挂载,如果同时设置了MEMORY_TARGET和MENORY_MAX_TARGET,那么/dev/shm至少必须和MEMORY_MAX_TARGET的大小一致

问题探究:

1) 什么是/dev/shm

查看已挂载的文件系统

ORA-00845: MEMORY_TARGET not supported on this system_oracle  ORA-00845ORA-00845: MEMORY_TARGET not supported on this system_oracle  ORA-00845_02

从这里可以看出,/dev/shm 是已经挂在了的,挂在的文件类型是 tmpfs,tmpfs是linux的一种临时文件系统,它的大小是不固定的,默认的大小是实际内存的一半。

ORA-00845: MEMORY_TARGET not supported on this system_oracle  ORA-00845_03

默认的挂载点是/dev/shm /dev/shm 就是一个目录,所以tmpfs也可以挂载到一个自定义的目录

tmpfs可以使用系统内存,也可以使用swap,所以我可以把tmpfs的size适当的调高一点。
由于tmpfs是存在于内存中的,所以在卸载tmpfs或者是关机重启linux操作系统的时候,tmpfs的内容就会丢失。
tmpfs是基于内存的,而swap是基于磁盘的,所以两者是不同的,而且tmpfs的IO很高。

解决方法:

由上面的可以看到,系统内存1G,swap大小,2G;

将/dev/shm 调大;

1)vi /etc/fstab

#添加

tmpfs    /dev/shm   tmpfs   defaults,size=1G      0 0

然后将/dev/shm 重新挂载

mount -a

1.1)umount /dev/shm

如果提示:

linux-unvz:~ # umount /dev/shm/
umount: /dev/shm: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

查看是哪些进程占用,然后kill掉;

fuser -m /dev/shm/
/dev/shm:             5154m  5235m  5238m

linux-unvz:~ # kill -9 5154 5235 5238
linux-unvz:~ # umount /dev/shm/

linux-unvz:~ # df -Th /dev/shm/
Filesystem    Type    Size  Used Avail Use% Mounted on
tmpfs        tmpfs    1.0G     0  1.0G   0% /dev/shm

然后再启动,就ok了;

SQL> startup;
ORACLE instance started.

Total System Global Area 1135747072 bytes
Fixed Size              2227664 bytes
Variable Size            855638576 bytes
Database Buffers       268435456 bytes
Redo Buffers              9445376 bytes
Database mounted.
Database opened.
SQL> ALTER SYSTEM SET MEMORY_MAX_TARGET = 1024M SCOPE = SPFILE;

System altered.

SQL> 

其他参数的修改:

SQL>ALTER SYSTEM SET MEMORY_MAX_TARGET = 1024M SCOPE = SPFILE; 

SQL>ALTER SYSTEM SET MEMORY_TARGET = 1024M SCOPE = SPFILE; 

SQL>ALTER SYSTEM SET SGA_TARGET =0 SCOPE = SPFILE; 

SQL>ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0 SCOPE = SPFILE ;