ORA-00845

系统版本:

[root@yoon ~]# more /etc/oracle-release
Oracle Linux Server release 5.7

数据库版本:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

 

[root@yoon ~]#vi /etc/fstab
修改如下行的设置
tmpfs /dev/shm tmpfs defaults 0 0
改成
tmpfs /dev/shm tmpfs defaults,size=6G 0 0          --看服务器内存大小而设定合适值
保存退出
重新mount下shm使其生效
mount -o remount /dev/shm

<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]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值