MEMORY_TARGET not supported on this system for linux

一个项目上的oracle 11G数据库,操作系统为redhat 6.3 X86_64,数据库版本为oracle 11G R2。
  按照原有系统相关配置,配置好oracle所需的环境变量。所有准备就绪后,启动数据库进行测试,结果报如下错误:
  ORA-00845: MEMORY_TARGET not supported on this system
  这个是由于/dev/shm(共享内存)空间太小,而数据库所需的内存(建库是设置的全局共享内存)超过/dev/shm目录大小所致,tmpfs 的值默认情况是为系统内存的一半,那么我们就需要给tmpfs增加空间。
]# df –h
Filesystem Size Used Avail Use% Mounted on

tmpfs 32G 14G 18G 44% /dev/shm

  修改/etc/fstab文件:

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

  重新挂载/dev/shm使修改生效:

# mount -o remount /dev/shm
  再次查看空间大小

[root@orc09-lx ~]# df -h
Filesystem Size Used Avail Use% Mounted on

tmpfs 46G 14G 33G 31% /dev/shm

  修改成功后,再次启动数据库,已经没有报错,数据库正常启动。注意,数据库正常启动了是不是就完成了呢?不是的,重启服务器后,你会发现tmpfs又变成默认大小了,刚才修改的并没有生效,我们需要将它设置为永久生效呢。这里要注意,在RHEL6.0以上版本,除了修改/etc/fstab文件我们还要修改一个非常重要的文件:/etc/rc.d/rc.sysinit
  1、注释以下内容:

# mount -f /dev/shm >/dev/null 2>&1
  2、在/etc/rc.d/rc.sysinit文件中找到并修改如下内容:

# Mount all other filesystems (except for NFS and /proc, which is already
# mounted). Contrary to standard usage,
# filesystems are NOT unmounted in single user mode.
# The ‘no’ applies to all listed filesystem types. See mount(8).
if [ "$READONLY" != "yes" ] ; then
action $”Mounting local filesystems: ” mount  -a  -t   tmpfs,nonfs,nfs4,smbfs,ncpfs,cifs,gfs,gfs2 -O no_netdev
else
action $”Mounting local filesystems: ” mount  -a  -n  -t   tmpfs,nonfs,nfs4,smbfs,ncpfs,cifs,gfs,gfs2 -O no_netdev
fi
  修改完成后,重新启动操作系统,发现已经成功。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14184018/viewspace-766417/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14184018/viewspace-766417/

### 关于 `MEMORY_TARGET` 不支持的问题 当尝试启动 Oracle 数据库时遇到错误 `ORA-00845: MEMORY_TARGET not supported on this system`,这通常是因为 `/dev/shm` 的大小不足以满足 `MEMORY_TARGET` 参数的要求[^3]。以下是详细的分析和解决方案: #### 问题原因 Oracle 数据库中的 `MEMORY_TARGET` 是一种动态内存管理机制,用于自动分配 SGA 和 PGA 内存区域。为了实现这一功能,Oracle 需要依赖系统的共享内存文件系统 `/dev/shm` 来存储这些数据结构。如果 `/dev/shm` 的可用空间小于设置的 `MEMORY_TARGET` 值,则会触发上述错误。 #### 解决方案 可以通过以下两种方式之一解决问题: 1. **扩容 `/dev/shm`** 修改 Linux 系统中 `/dev/shm` 的大小以匹配或超过 `MEMORY_TARGET` 设置值。 执行以下命令来查看当前 `/dev/shm` 大小: ```bash df -h /dev/shm ``` 如果发现 `/dev/shm` 小于所需的 `MEMORY_TARGET` 值,可以临时增加其大小: ```bash mount -o remount,size=4G /dev/shm ``` 上述命令将 `/dev/shm` 调整为 4GB。可以根据实际需求调整数值。 若要永久修改 `/dev/shm` 大小,编辑 `/etc/fstab` 文件并添加如下条目: ```plaintext tmpfs /dev/shm tmpfs defaults,size=4G 0 0 ``` 2. **禁用 `MEMORY_TARGET` 并手动配置内存** 若无法更改 `/dev/shm` 或不需要使用 `MEMORY_TARGET` 动态内存管理功能,可以选择关闭该参数,并通过单独设定 `SGA_TARGET` 和 `PGA_AGGREGATE_TARGET` 实现静态内存管理。 编辑初始化参数文件(通常是 `$ORACLE_HOME/dbs/init<sid>.ora`),找到或添加以下内容: ```ini memory_target=0 sga_target=<所需SGA大小> pga_aggregate_target=<所需PGA大小> ``` 替代方法是直接在 SQL*Plus 中执行以下语句: ```sql ALTER SYSTEM SET memory_target=0 SCOPE=SPFILE; ALTER SYSTEM SET sga_target=<所需SGA大小> SCOPE=SPFILE; ALTER SYSTEM SET pga_aggregate_target=<所需PGA大小> SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP; ``` 这样即可绕过对 `/dev/shm` 的依赖[^4]。 #### 示例代码 假设需要将数据库切换到固定内存模式,具体操作如下: ```sql -- 禁用 MEMORY_TARGET ALTER SYSTEM SET memory_target=0 SCOPE=SPFILE; -- 设定固定的 SGA 和 PGA ALTER SYSTEM SET sga_target=2G SCOPE=SPFILE; ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=SPFILE; -- 重启实例使更改生效 SHUTDOWN IMMEDIATE; STARTUP; ``` #### 注意事项 - 在调整 `/dev/shm` 大小时需注意系统资源的整体利用率,避免因过度分配而导致其他服务受影响。 - 当前环境可能运行的是较旧版本的操作系统或内核,某些情况下即使增大 `/dev/shm` 可能仍会出现兼容性问题。此时建议升级操作系统至最新稳定版[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值