解决ORA-27154,ORA-27300,ORA-27301:No space left on device

本文探讨了在使用DBCA创建数据库和重启数据库过程中遇到ORA-27154等错误的原因,重点介绍了通过调整Linux内核参数来解决这些问题的方法,并提供了关键系统参数的解释,以及数据库管理程序对信号量需求的理解。

利用DBCA创建数据库,重启数据库,都可能会出现此类错误,主要原因可能是数据库实例太多,需要比较多的信号量

ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates

解决的办法就是利用 root 登陆修改 Linux 内核参数

 

[root@linuxserver ~]# /sbin/sysctl -a | grep sem
kernel.sem = 250 1024 100 128

[root@linuxserver ~]# vi /etc/sysctl.conf

# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128

然后执行命令
/sbin/sysctl -p

下面一段是关于一点关于信号量的系统参数的解释:

The kernel parameter sem consists of 4 tokens, SEMMSL, SEMMNS, SEMOPM and SEMMNI. SEMMNS is the result of SEMMSL multiplied by SEMMNI. The database manager requires that the number of arrays (SEMMNI) be increased as necessary. Typically, SEMMNI should be twice the maximum number of connections allowed (MAXAGENTS) multiplied by the number of logical partitions on the database server computer plus the number of local application connections on the database server computer.

翻译:

系统内核包括四个标记参数,SEMMSL, SEMMNS, SEMOPM 和 SEMMNI. SEMMNS应该是SEMMSL 乘以 SEMMNI的结果. 数据库管理程序需要这一组数据都进行相应的增长. 比如 SEMMNI 应该是 2*(服务器允许最大连接数)* (数据库服务器逻辑分区数)+ (数据库允许最大本地应用连接数)

<think>好的,用户遇到了在Linux x86_64环境下启动Oracle数据库时出现“Error 28: No space left on device”的问题。我需要根据提供的引用资料和我的知识来找出可能的原因和解决方案。 首先,这个错误通常与内存或存储空间不足有关。引用[1]、[2]、[3]提到ORA-27102错误,指出可能是内存不足或设备空间不足。在Linux系统中,“No space left on device”虽然常指磁盘空间,但这里结合错误号28,可能需要考虑其他因素,比如共享内存段或hugepages的设置。 用户可能已经检查过磁盘空间,但问题依然存在,所以需要更深入的分析。引用[3]提到HUGEPAGES和内存配置,这可能与Oracle使用大页内存有关。如果大页内存配置不当,可能导致数据库启动时无法分配足够的内存,从而引发错误。此外,SELinux设置(如引用[4]所述)可能影响共享库的加载,但错误信息更直接指向内存问题。 可能的解决步骤包括检查共享内存参数、调整大页配置、检查可用内存以及SELinux状态。需要指导用户检查这些方面,并给出具体的命令和配置方法。例如,查看/proc/sys/kernel/shmmax的值,计算hugepages的大小,或者检查内存使用情况。另外,可能需要修改/etc/sysctl.conf或Oracle的内存参数。 最后,确保回答结构清晰,分步骤说明,并引用相关资料支持解决方案。</think>### Linux-x86_64环境Oracle启动错误28解决方案 **错误描述** 在Linux x86_64环境下启动Oracle数据库时,出现`ORA-27102: out of memory`和`Linux-x86_64 Error: 28: No space left on device`。该问题通常与内存资源分配或系统参数配置有关,而非直接的磁盘空间不足[^1][^2][^3]。 --- #### 步骤1:验证共享内存配置 Oracle依赖共享内存段(Shared Memory Segments)分配SGA(系统全局区)。 - **检查当前共享内存限制**: ```bash cat /proc/sys/kernel/shmmax cat /proc/sys/kernel/shmall ``` 若`shmmax`(单个共享内存段最大值)或`shmall`(系统总共享内存页数)过小,需调整: ```bash # 临时修改 sysctl -w kernel.shmmax=2147483648 # 示例值(2GB) sysctl -w kernel.shmall=2097152 # 示例值(8GB内存对应) # 永久生效(编辑/etc/sysctl.conf) echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf echo "kernel.shmall=2097152" >> /etc/sysctl.conf sysctl -p ``` --- #### 步骤2:检查HugePages配置(适用于大内存环境) Linux默认使用4KB内存页,而HugePages(大页)可减少内存管理开销。Oracle建议为SGA分配HugePages[^3]。 - **计算所需HugePages数量**: 1. 运行Oracle提供的脚本: ```bash # 切换至Oracle用户 su - oracle sqlplus / as sysdba SQL> show parameter sga_max_size; # 获取SGA大小(单位:MB) ``` 2. 计算HugePages数量: $$ \text{HugePages} = \left\lceil \frac{\text{SGA\_MAX\_SIZE (MB)}}{2} \right\rceil + 1 $$ 3. 修改`/etc/sysctl.conf`: ```bash vm.nr_hugepages = [计算值] ``` 4. 重启生效: ```bash sysctl -p ``` --- #### 步骤3:检查可用内存资源 - **查看内存使用情况**: ```bash free -h ``` 若物理内存或Swap空间不足,需扩展Swap或关闭其他占用内存的进程。 --- #### 步骤4:验证SELinux状态(次要因素) 虽然错误直接关联内存,但SELinux的强制模式可能间接导致资源限制[^4]。 - **临时切换至Permissive模式**: ```bash setenforce 0 ``` - **永久关闭(需谨慎)**: 编辑`/etc/selinux/config`,设置`SELINUX=permissive`后重启。 --- #### 步骤5:检查Oracle内存参数 确保`MEMORY_TARGET`或`SGA_TARGET`不超过物理内存限制: ```sql SQL> alter system set memory_max_target=4096M scope=spfile; # 示例值 SQL> shutdown immediate; SQL> startup; ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值