oracle12c创建 报错ORA-00845
时间: 2025-08-03 14:07:53 浏览: 11
<think>我们被要求解决在Oracle12c创建表时遇到的ORA-00845错误。根据错误代码,我们首先需要了解这个错误的具体含义。经过查阅,ORA-00845错误通常与Oracle的临时空间设置有关,特别是与/dev/shm(共享内存文件系统)的挂载有关。在Linux/Unix系统中,Oracle使用/dev/shm来存储临时文件,如果/dev/shm的大小设置不足,则可能引发此错误。根据Oracle文档:ORA-00845:MEMORY_TARGETnotsupportedonthissystem这个错误通常是因为MEMORY_TARGET参数设置过大,超过了/dev/shm的大小。或者,如果系统没有挂载/dev/shm,也会出现此错误。解决方案通常涉及以下步骤:1.检查/dev/shm的挂载情况及其大小。2.调整/dev/shm的大小,使其至少等于MEMORY_TARGET(如果设置了)或MEMORY_MAX_TARGET的值。3.或者,如果不想调整/dev/shm的大小,可以修改Oracle的初始化参数,不使用MEMORY_TARGET,而是分别设置SGA_TARGET和PGA_AGGREGATE_TARGET。具体步骤:步骤1:检查/dev/shm的大小在操作系统中执行:df-h/dev/shm查看其大小是否满足Oracle的要求(即大于或等于MEMORY_TARGET的值)。步骤2:如果大小不足,需要重新挂载/dev/shm(临时生效):sudoumount/dev/shmsudomount-ttmpfsshmfs-osize=<新的大小>/dev/shm例如:sudomount-ttmpfsshmfs-osize=2G/dev/shm但请注意,这种方法在重启后会失效。要永久生效,需要修改/etc/fstab文件:打开/etc/fstab,找到关于/dev/shm的行(可能没有),如果没有则添加一行:none/dev/shmtmpfsdefaults,size=<新的大小>00例如:none/dev/shmtmpfsdefaults,size=2G00然后保存,并执行:sudomount-oremount/dev/shm步骤3:或者,修改Oracle的参数如果不想调整共享内存的大小,可以修改MEMORY_TARGET参数为0,并分别设置SGA和PGA。连接到数据库(以sysdba身份):sqlplus/assysdba然后执行:ALTERSYSTEMSETMEMORY_TARGET=0SCOPE=SPFILE;ALTERSYSTEMSETSGA_TARGET=<适当的SGA大小>SCOPE=SPFILE;ALTERSYSTEMSETPGA_AGGREGATE_TARGET=<适当的PGA大小>SCOPE=SPFILE;然后重启数据库:SHUTDOWNIMMEDIATE;STARTUP;步骤4:如果之前没有设置MEMORY_TARGET,则可能是数据库在启动时自动设置的MEMORY_TARGET太大,超过了/dev/shm的大小。我们可以检查初始化参数:SHOWPARAMETERMEMORY_TARGETSHOWPARAMETERMEMORY_MAX_TARGET如果它们的值大于/dev/shm的大小,则需要将其设置为0或者一个小于/dev/shm大小的值。注意:在修改参数之前,需要确保数据库在重启后能够正常启动。在修改SPFILE之前,最好备份一下。总结:ORA-00845错误通常是由于操作系统共享内存文件系统(/dev/shm)的大小不足造成的。我们可以通过调整共享内存的大小或者调整Oracle内存参数来解决。注意:不同的环境可能有所不同,请根据实际情况操作。如果以上步骤仍然无法解决,请检查Oracle的官方文档或联系Oracle支持。§§相关问题§§1.Oracle12c中如何调整共享内存的大小?2.如何永久修改/dev/shm的大小?3.Oracle数据库中MEMORY_TARGET参数的作用是什么?4.如何分别设置SGA_TARGET和PGA_AGGREGATE_TARGET?5.在Oracle中如何查看当前的内存参数设置?</think>
### Oracle 12c 创建表 ORA-00845 错误解决方案
ORA-00845 错误通常与 Oracle 内存管理和操作系统共享内存配置相关。以下是系统性的解决方案:
#### 📌 核心原因
当 `MEMORY_TARGET`/`MEMORY_MAX_TARGET` 参数值大于 Linux 系统 `/dev/shm` 的大小时,创建表操作可能触发 ORA-00845 错误,因为 Oracle 使用共享内存文件系统存储临时数据[^4]。
#### ✅ 解决方案步骤
1. **检查共享内存状态**
在 Linux 终端执行:
```bash
df -h /dev/shm
```
查看 `Size` 列是否 ≥ MEMORY_TARGET 的值(单位需一致)。
2. **临时调整共享内存大小**
挂载新大小的共享内存(重启失效):
```bash
sudo umount /dev/shm
sudo mount -t tmpfs shmfs -o size=4G /dev/shm # 示例调整为4G
```
3. **永久修改共享内存配置**
编辑 `/etc/fstab` 文件:
```bash
sudo vi /etc/fstab
```
添加/修改行(以下为 4G 示例):
```conf
none /dev/shm tmpfs defaults,size=4G 0 0
```
重载配置:
```bash
sudo mount -o remount /dev/shm
```
4. **调整 Oracle 内存参数**
通过 SQL*Plus 操作:
```sql
ALTER SYSTEM SET MEMORY_TARGET=3G SCOPE=SPFILE; -- 确保≤/dev/shm大小
ALTER SYSTEM SET MEMORY_MAX_TARGET=3G SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
```
5. **完全禁用 AMM(备选)**
若问题持续,改用 ASMM:
```sql
ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET=2G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=1G SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
```
#### ⚠️ 验证关键点
1. 执行命令确认调整生效:
```sql
SHOW PARAMETER MEMORY_TARGET;
SHOW PARAMETER sga_target;
```
2. 检查 `/dev/shm` 挂载状态:
```bash
mount | grep shm
```
> 📝 **注意**:调整后若仍有问题,检查 alert log (`$ORACLE_BASE/diag/rdbms/<DB_NAME>/<INSTANCE>/trace/alert_*.log`) 获取具体错误细节[^2]。
---
###
阅读全文
相关推荐



















