无法启动 Oracle - ORA-00845: MEMORY_TARGET 在此系统上不受支持 - 但内存大小似乎没问题
Oracle startup not possible - ORA-00845: MEMORY_TARGET not supported on this system - but memory size seems to be fine
我们在启动时得到 ORA-00845: MEMORY_TARGET not supported on this system
。
但是,df -h
显示
tmpfs 7,9G 4,0K 7,9G 1% /dev/shm.
这表示可用内存绰绰有余。任何想法可能是什么原因?
您可能正在使用自动内存管理 (AMM)。
AMM 使用两个初始化参数:
- MEMORY_TARGET
- MEMORY_MAX_TARGET
共享内存文件系统应该有足够的 space 来容纳 MEMORY_TARGET 和 MEMORY_MAX_TARGET 值。
验证:
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 6096M
memory_target big integer 6096M
shared_memory_address integer 0
在UNIX/Linux中,您必须相应地设置共享内存文件系统。
验证:
df -h /dev/shm
设置:
mount -t tmpfs shmfs -o size=<some_value_in_number_with_size> /dev/shm
例如,
mount -t tmpfs shmfs -o size=4096m /dev/shm
错误原因:
新的自动内存管理功能在 Linux 上使用 /dev/shm 进行 SGA 和 PGA 管理。如果 MEMORY_TARGET 或 MEMORY_MAX_TARGET 配置大于配置的 /dev/shm 大小,或者 /dev/shm 安装不正确,则会发生错误。
解决方案:
请确认 ORACLE_HOME 设置正确。设置不正确时有时会出现此错误。
确保 /dev/shm 大小配置得足够大,例如:
mount -t tmpfs shmfs -o size=7g /dev/shm
注意:
您应该根据警报文件中报告的内容,向您的系统管理员核实 /dev/shm 的 "best" 大小是多少。
此外,许多最佳实践现在建议禁用 AMM,尤其是在内存容量更大且可以使用超大页面的 Exa* Engineered 机器中。
这是因为 AMM 和 Huge / Large pages 是互斥的,使用 Huge pages 整体性能会更好
确保在系统上使用 Oracle 时 df 输出显示正确的 /dev/shm 配置:
$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
...
shmfs 6291456 832356 5459100 14% /dev/shm
减小 memory_target 参数的值
增加服务器上的临时内存分配。
例如
卸载 tmpfs
mount -t tmpfs shmfs -o size=1500m /dev/shm
一个简单的解决方案就是将 space 添加到 /dev/shm fs
。
# mount -t tmpfs shmfs -o size=5g /dev/shm
有关更多概念和详细信息,请参阅博客 post ORA-00845: MEMORY_TARGET not supported on this system。
我在启动数据库时也遇到了同样的错误。我在我的 pfile 中 #out memory_target 参数,然后再次尝试,它成功了。
现在,我可以启动数据库了。
当 oracle 的 tmpfs 区域的内存设置较高时出现此错误
例如
如果内存参数是这样的:
*.memory_max_target=20G
*.memory_target=0
*.sga_max_size=20G
*.sga_target=15G
*.pga_aggregate_target=5G
tmpfs 大小为 15G
当您发出启动命令时,您收到错误 ora-00845
您应该将 tmpfs 大小设置为超过最大内存值
在这种情况下 max memory 参数设置为 20G
所以你在 /etc/fstab 文件中设置 tmpfs 大小,例如 25G
...
...
tmpfs /dev/shm tmpfs defaults,size25G 0 0
...
...
然后重新挂载 tmpfs 文件系统
#mount -o remount /dev/shm
那么你的数据库就可以启动了
如果您正在使用 VM,您是否更改了 RAM?如果你这样做了,那一定是问题所在。将 RAM 增加到与以前相同或更多的值,然后重试。
我们在启动时得到 ORA-00845: MEMORY_TARGET not supported on this system
。
但是,df -h
显示
tmpfs 7,9G 4,0K 7,9G 1% /dev/shm.
这表示可用内存绰绰有余。任何想法可能是什么原因?
您可能正在使用自动内存管理 (AMM)。
AMM 使用两个初始化参数:
- MEMORY_TARGET
- MEMORY_MAX_TARGET
共享内存文件系统应该有足够的 space 来容纳 MEMORY_TARGET 和 MEMORY_MAX_TARGET 值。
验证:
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 6096M
memory_target big integer 6096M
shared_memory_address integer 0
在UNIX/Linux中,您必须相应地设置共享内存文件系统。
验证:
df -h /dev/shm
设置:
mount -t tmpfs shmfs -o size=<some_value_in_number_with_size> /dev/shm
例如,
mount -t tmpfs shmfs -o size=4096m /dev/shm
错误原因: 新的自动内存管理功能在 Linux 上使用 /dev/shm 进行 SGA 和 PGA 管理。如果 MEMORY_TARGET 或 MEMORY_MAX_TARGET 配置大于配置的 /dev/shm 大小,或者 /dev/shm 安装不正确,则会发生错误。
解决方案: 请确认 ORACLE_HOME 设置正确。设置不正确时有时会出现此错误。
确保 /dev/shm 大小配置得足够大,例如: mount -t tmpfs shmfs -o size=7g /dev/shm
注意: 您应该根据警报文件中报告的内容,向您的系统管理员核实 /dev/shm 的 "best" 大小是多少。
此外,许多最佳实践现在建议禁用 AMM,尤其是在内存容量更大且可以使用超大页面的 Exa* Engineered 机器中。 这是因为 AMM 和 Huge / Large pages 是互斥的,使用 Huge pages 整体性能会更好
确保在系统上使用 Oracle 时 df 输出显示正确的 /dev/shm 配置:
$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
...
shmfs 6291456 832356 5459100 14% /dev/shm
减小 memory_target 参数的值
增加服务器上的临时内存分配。
例如
卸载 tmpfs
mount -t tmpfs shmfs -o size=1500m /dev/shm
一个简单的解决方案就是将 space 添加到 /dev/shm fs
。
# mount -t tmpfs shmfs -o size=5g /dev/shm
有关更多概念和详细信息,请参阅博客 post ORA-00845: MEMORY_TARGET not supported on this system。
我在启动数据库时也遇到了同样的错误。我在我的 pfile 中 #out memory_target 参数,然后再次尝试,它成功了。 现在,我可以启动数据库了。
当 oracle 的 tmpfs 区域的内存设置较高时出现此错误 例如
如果内存参数是这样的:
*.memory_max_target=20G
*.memory_target=0
*.sga_max_size=20G
*.sga_target=15G
*.pga_aggregate_target=5G
tmpfs 大小为 15G
当您发出启动命令时,您收到错误 ora-00845 您应该将 tmpfs 大小设置为超过最大内存值 在这种情况下 max memory 参数设置为 20G 所以你在 /etc/fstab 文件中设置 tmpfs 大小,例如 25G
...
...
tmpfs /dev/shm tmpfs defaults,size25G 0 0
...
...
然后重新挂载 tmpfs 文件系统
#mount -o remount /dev/shm
那么你的数据库就可以启动了
如果您正在使用 VM,您是否更改了 RAM?如果你这样做了,那一定是问题所在。将 RAM 增加到与以前相同或更多的值,然后重试。