ORA-27125: unable to create shared memory segment

文章介绍一篇关于在linux中的oracle数据库出现ORA-27125: unable to create shared memory segment解决办法。

文章介绍一篇关于在linux中的oracle数据库出现ORA-27125: unable to create shared memory segment解决办法。

平台环境:linux red hat enterprise linux server release 6.0 (santiago)

版本:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bi

安装好ORALCE数据库后,启动数据库就会报如下错误

ORA-27125: unable to create shared memory segment

当启动数据库或者创建数据库时都可能出现ORA-27125错误,我在Oracle Linux 6上安装Oracle 10.2.0.1,创建数据库时就遇到了这个错误。

这个错误的解决就是修改 /proc/sys/vm/hugetlb_shm_group 文件。
以下是老杨提到过的一个问题,解决方法相同:

帮客户解决一个Linux上数据库无法启动的问题。
客户的Linux 5.6 x86-64环境,安装数据库后,启动数据库报错:ORA-27125。
Oracle文档上关于ORA-27125错误的描述为:

ORA-27125: unable to create shared memory segment
Cause: shmget() call failed
Action: contact Oracle support

查询了一下,发现问题和linux上的hugetbl有关。
解决方法也很简单,首先检查oracle用户的组信息:

[oracle@yans1 ~]$ id oracle
uid=500(oracle) gid=502(oinstall) grou=502(oinstall),501(dba)
[oracle@yans1 ~]$ more /proc/sys/vm/hugetlb_shm_group
0

下面用root执行下面的命令,将dba组添加到系统内核中:

# echo 501 > /proc/sys/vm/hugetlb_shm_group

然后启动数据库,问题消失。
那么hugetlb_shm_group组是什么呢?以下是解释:
hugetlb_shm_group contains group id that is allowed to create SysV shared memory segment using hugetlb page

另在安装过程中遇到的操作系统验证错误,可以通过如下方式解决:
在Linux系统中安装oralce的过程中,如果Linux发行版本不是oracle的推荐版本,可能会报如下错误,导致runInstaller无法完成:
Checking operating system version: must be redhat-3, SuSE-9, redhat-4, UnitedLinux-1.0, asianux-1 or asianux-2
Failed

遇到这个问题,可以通过如下三种方式解决

1、修改Linux的发行标记

如在redhat-5上安装oracle的时候,需要将文件 ‘/etc/redhat-release’的内容由
Red Hat Enterprise Linux Server release 5 (Tikanga)

修改为Oracle支持的版本
Red Hat Enterprise Linux Server release 4 (Tikanga)

2、runInstaller的时候加上-ignoreSysPreReqs参数,如:
./runInstaller -ignoreSysPreReqs

3.修改oraparam.ini的参数
增加你的系统版本号

 

4.设置数据库

[root@DB-Server ~]#id oracle
 uid=501(oracle) gid=502(oinstall) groups=502(oinstall),501(dba)

[root@DB-Server ~]#echo 501 > /proc/sys/vm/hugetlb_shm_group

然后重启数据库,问题解决,但是我发现数据库服务器重启后,这个问题又会重现,又必须处理上述命令,才能成功启动数据库。治标不治本

参考http://wiki.debian.org/Hugepages后,其实只须在/etc/sysctl.conf下设置一下 hugetlb_shm_group即可一劳永逸的解决这个问题:

Create a group for users of hugepages, and retrieve it’s GID (is this example, 2021) then add yourself to the group.
Note: this should not be needed for libvirt (see /etc/libvirt/qemu.conf)

% groupadd my-hugetlbfs

% getent group my-hugetlbfs
my-hugetlbfs:x:2021:

% adduser franklin my-hugetlbfs
Adding user `franklin’ to group `my-hugetlbfs’ …
Adding user franklin to group my-hugetlbfs
Done.Edit /etc/sysctl.conf and add this text to specify the number of pages you want to reserve (see pages-size)

# Allocate 256*2MiB for HugePageTables (YMMV)
vm.nr_hugepages = 256

# Members of group my-hugetlbfs(2021) can allocate “huge” Shared memory segment
vm.hugetlb_shm_group = 2021Create a mount point for the file system

% mkdir /hugepagesAdd this line in /etc/fstab (The mode of 1770 allows anyone in the group to create files but not unlink or rename each other’s files.1)

hugetlbfs /hugepages hugetlbfs mode=1770,gid=2021 0 0Reboot (This is the most reliable method of allocating huge pages before the memory gets fragmented. You don’t necessarily have to reboot. You can try to run systclt -p to apply the changes. if grep “Huge” /proc/meminfo don’t show all the pages, you can try to free the cache with sync ; echo 3 > /proc/sys/vm/drop_caches (where “3” stands for “purge pagecache, dentries and inodes”) then try sysctl -p again. 2)

limits.conf
You should configure the amount of memory a user can lock, so an application can’t crash your operating system by locking all the memory. Note that any page can be locked in RAM, not just huge pages. You should allow the process to lock a little bit more memory that just the the space for hugepages.

## Get huge-page size:
% grep “Hugepagesize:” /proc/meminfo
Hugepagesize:       4096 kB

## What’s the current limit
% ulimit -H -l
64

## Just add them up… (how many pages do you want to allocate?)See Limits (ulimit -l and memlock in /etc/security/limits.conf).

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1839251.html

(0)
上一篇 2025年2月21日 23:01:22
下一篇 2025年2月21日 23:01:35

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 小程序开发语言学什么?

    小程序开发涉及哪些编程语言和框架呢?让我们来探讨一下开发一款微信小程序所需的前端开发语言、后端开发语言、数据库语言以及所使用的开发框架。以下是小程序开发所需掌握的基础知识: 一、小程序开发所使用的语言是什么? 1、前端开发语言 前端开发通常…

    2025年4月28日
    000
  • php7怎么连接数据库

    使用 PHP 7 连接数据库需要使用 PDO 类,步骤包括:创建一个 PDO 对象,指定服务器名、数据库名、用户名和密码。设置错误模式,以便抛出异常来处理错误。准备和执行查询。获取查询结果。 PHP 7 连接数据库 如何连接数据库? 在 P…

    2025年4月28日
    000
  • navicat如何连接数据库

    要使用 Navicat 连接数据库,请依序执行以下步骤:在 Navicat 中创建连接。输入主机名、端口、用户名、密码和数据库名称。调整高级设置(可选)。保存连接。测试连接。连接到数据库。查看数据库对象。 Navicat 连接数据库指南 如…

    2025年4月28日
    000
  • navicat如何查看表备注

    如何在 navicat 中查看表备注 Navicat 是一个强大的数据库管理工具,它可以用于查看和编辑各种数据库对象的属性和信息,其中包括表备注。以下是如何使用 Navicat 查看表备注: 步骤: 连接到数据库:打开 Navicat 并连…

    数据库 2025年4月28日
    000
  • 如何在Navicat中执行带有参数的SQL语句

    在navicat中执行带有参数的sql语句的方法是:1.在查询编辑器中输入sql语句,使用参数占位符(如mysql的?或oracle的:name)。2.在参数面板中输入参数值,navicat会将参数占位符替换为实际的值并执行查询。这种方法不…

    2025年4月28日
    000
  • 如何在Navicat中配置多个数据库连接

    在navicat中配置多个数据库连接的方法是:1. 打开navicat,点击”连接”按钮,选择数据库类型,输入连接信息,测试并保存连接。2. 使用”连接组”功能,将多个连接归类到不同组中,便于…

    2025年4月28日
    000
  • php7.4怎么安装配置

    php 7.4 的安装和配置步骤因操作系统而异:1. 在 ubuntu 上,使用 apt 包管理器安装;2. 在 macos 上,使用 homebrew 安装并配置 path;3. 在 windows 上,从官方网站下载并安装,配置环境变量…

    2025年4月28日
    000
  • Navicat连接数据库时用户名和密码错误的排查步骤

    解决navicat连接数据库时用户名和密码错误的问题可以通过以下步骤:1.检查用户名和密码是否正确;2.确认网络连接和服务器配置;3.验证ssl/tls设置;4.检查用户权限;5.使用连接池优化连接。通过这些步骤和最佳实践,可以有效解决连接…

    2025年4月28日
    000
  • 解决Navicat连接数据库时的权限不足问题

    解决navicat连接数据库时的权限不足问题可以通过以下步骤:1.确保使用正确的用户名和密码;2.检查并修改数据库服务器的配置;3.注意刷新权限、主机名匹配及防火墙设置;4.遵循最小权限原则、定期审查权限和使用角色管理权限。 引言 在使用N…

    2025年4月28日
    000
  • Navicat连接数据库时字符集不匹配的解决策略

    解决navicat连接数据库时字符集不匹配问题的方法包括:1.检查数据库的字符集设置;2.调整navicat客户端的字符集设置;3.验证数据显示是否正确。字符集不匹配会导致数据乱码或丢失,确保客户端和服务器字符集一致是关键。 引言 在使用N…

    2025年4月28日
    000

发表回复

登录后才能评论