首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >重启数据库遇到错误ORA-27154,ORA-27300,ORA-27301,ORA-27302

重启数据库遇到错误ORA-27154,ORA-27300,ORA-27301,ORA-27302

作者头像
JiekeXu之路
发布于 2020-12-15 03:45:11
发布于 2020-12-15 03:45:11
1.5K00
代码可运行
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路
运行总次数:0
代码可运行

事情是这样的,新装了一套 Linux 环境下的 19.9 RAC 环境,应用方要求关闭归档。本身此机器上有三个实例,均是近期新建的实例并安装 RU 19.9,先将节点二的实例关闭然后在节点一上关闭归档,前两个实例都完成了且正常启动,当第三个实例关闭归档时,在节点一上是正常启动了,但是在节点二启动数据库则报错了,如下图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
节点2
sqlplus / as sysdba
shutdown immediate;
节点1
sqlplus / as sysdba
archive log list;
alter system switch logfile;
关闭归档
shutdown immediate;
startup mount;
--开启归档模式:
--alter database archivelog;
关闭归档模式:
alter database noarchivelog;
alter database open;
archive log list;
节点2
sqlplus / as sysdba
startup

使用操作系统自带的帮助命令没有查到想要的信息。

网络上搜索则说是由于内核参数 kernel.sem 的问题, 而且与 process 有关,在安装多实例数据库时也会出现如下的错误。第一次在创建多实例时居然没有报错,而且当时也是设置了每个实例的 process 为 8000 重启实例并没有问题,那么 kernel.sem 到底是个什么参数,与 process 有什么样的关系,这引起了我的好奇:

kernel.sem = 250 32000 100 128

SEMMSL: 每个信号集的最大信号数量

SEMMNS:用于控制整个 Linux 系统中信号的最大数

SEMOPM:内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量

SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量

SEMMSL * SEMMNI = SEMMNS 即 250 * 128 = 32000

网络上给出的错误原因:processes 总数超出操作系统信号量总大小。

而我的实际配置是 kernel.sem = 10240 32767 10240 32767

内核参数显示如下: kernel.sem = 10240 32767 10240 32767 ----------->>>> This indicates that 10240 semaphores can be accomodated in an array and maximum of 32767 arrays can be in the system. 这表明一个阵列可以容纳 10240 个信号量,系统中最多可以容纳 32767 个阵列。

这里也可称之为数组,表示每个数组中有 10240 个信号量,总共有 32767 个数组。 So, in total, 335534080 (10240X32767) semaphores can present in the system. 所以,总共有 10240X32767=335534080 个信号量 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@JiekeXu ~]$ ipcs
...
----- Semaphore Arrays --------
key semid owner perms nsems
0x21b9674c 196610 oracle 660 127
0x21b9674d 229379 oracle 660 127
0x21b9674e 262148 oracle 660 127
...

If we assume this is the case here.
假如我们遇到的是这种情况,
So, here, the actual semaphore accommodated per array is not 250, it is 127.
这说明每个数组中不是250,而是127,
So, practically, only 16256 (128*127) can present in the server.
所以只有16256个可用的信号量,这也就是我们计算processes总量远远未达到32000,但是依旧报错的原因,
Solution
解决方案:
kernel.sem = 250 32000 100 128 ---- >>>> This indicates that 250 semaphores can be accomodated in an array and maximum of 128 arrays can be in the system.

So, in total, 32000 (250X128) semaphores can present in the system.

Thus We need to increase the maximum number of arrays that can be present on the server.

Kindly follow the below steps :

-----------------------------------
1. Query the current semaphore values in the kernel
  # /sbin/sysctl -a | grep sem
2. Modify SEMMNI value in the /etc/sysctl.conf.
From
kernel.sem = 250 32000 100 128
To
kernel.sem = 250 32000 100 200

3. # /sbin/sysctl -p

这里建议的是将kernel.sem修改为250X200,,但是中间的32000未改变,
但是根据在support.redhat.com 上的文档
How to increase the number of semaphores:

将sysctl.conf中设置为
kernel.sem = 250 64000 100 256
并sysctl -p ,解决该问题。

根据此文档建议将 kernel.sem 设置为 10240 335534080 10240 32767 然后 sysctl -p 生效后重启数据库便可以正常启动了。

当然,根据网络上的建议将 process 重新改小也可以启动,但是改多小不好评估,由于时间关系这里便没有展开测试。最后看一下各个内核参数的大概意义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@JiekeXu ~]# sysctl -p
fs.aio-max-nr = 1048576  #异步IO请求数目 推荐值是:1048576 其实它等于 1024*1024 也就是 1024K 个
fs.file-max = 6815744  #打开的文件句柄的最大数量,防止文件描述符耗尽的问题
kernel.shmall = 2097152 #共享内存总量 页为单位,内存除以4K所得
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128  #SEMMSL: 每个信号集的最大信号数量 SEMMNS:用于控制整个 Linux 系统中信号的最大数 
# SEMOPM:内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量 SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量
net.ipv4.ip_local_port_range = 9000 65500  #用于向外连接的端口范围
net.core.rmem_default = 262144 #套接字接收缓冲区大小的缺省值
net.core.rmem_max = 4194304  #套接字接收缓冲区大小的最大值
net.core.wmem_default = 262144 #套接字发送缓冲区大小的缺省值
net.core.wmem_max = 1048576  #套接字发送缓冲区大小的最大值
fs.file-max = 6815744
kernel.watchdog_thresh = 30

当semmni和semmns参数值是官方文档默认值时,按业务要求设置process为8000,无法启动实例。将semmni和semmns参数值都设置为二倍值之后,再测试将process设置为16000时,同样无法启动实例。可以看到的确这个sem信号量和processes有着某种关联,而且此时启动到nomount状态,实际并没有用户连接,说明信号量是预先分配的。

设置 processes 值为默认值 150 时,ipcs 可以看到 NSEMS 的数值是 154,此时可以满足 150 的 processes;设置 processes 值为默认值 300 时,ipcs 可以看到 NSEMS 的数值是 152,此时可以满足 300 的 processes;设置 processes 值为 8000 时, ipcs 可以看到 NSEMS 的数值是 8004,此时可以满足 8000 的 processes;设置 processes 值为 16000 时,启动数据库则报错 ORA-27154,ORA-27300,ORA-27301,ORA-27302;根据这个也没法确定两者的关系,但确实两者之间有所关联,而且算法还不简单,现在已经太晚了,只能等后续有时间再看了,晚安,小伙伴们!

参考链接:

https://blog.csdn.net/dsc1245/article/details/80743753

https://www.cnblogs.com/jyzhao/p/9124373.html

Instance Startup Fails With Error ORA-27154,ORA-27300,ORA-27301,ORA-27302 (Doc ID 314179.1)

Database Startup Fails with ORA-27300: OS system dependent operation:semget failed with status: 28 (Doc ID 949468.1)


好咯,今天的分享就到这里了,如果本文对您有一丁点儿帮助,请多支持“在看”与转发,不求小费了哪怕是一个小小的赞,您的鼓励都将是我熬夜写文章最大的动力,让我有一直写下去的动力,最后一起加油,奥利给!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux基础指令与权限
一个工具 用于传输windows与linux机器通过XShell传输文件
2024/12/01
1180
Linux基础指令与权限
一份前端够用的 Linux 命令
你好,我是悦创。我用 VuePress 搭建博客,又实现了 GitHub 和 Gitee Pages 的自动部署,但我最终还是决定自己建站,而在建站的过程中,必不可少会用到 Linux 命令,所以此篇写一份基本够用的 Linux 命令,会涵盖博客搭建系列文章用到的各种命令,方便查询和学习使用。首发:https://bornforthis.cn/blog/vuepress/02.html
AI悦创
2022/10/18
4050
一份前端够用的 Linux 命令
Linux基本指令及周边(第一弹)
Linux基础指令比较多,面对这些指令该如何去记?不需要我们去死记硬背,经常使用即可,不知道的指令可以在网上搜索或者在Linux手册中查询,更多的是去理解Linux周边知识。在学习Linux指令时,可以和Windows系统进行结合,看看Linux的某些指令对应在Windows系统中的操作如何?
南桥
2024/01/26
1490
Linux基本指令及周边(第一弹)
掌握基本的命令行,迈向 Linux 第一步
当年我接触计算机时,微软的 Windows 系统还没有出现,所使用的操作系统是一张 5.25 吋软盘(容量 1.2MB)就能装下的 DOS 系统,自然没什么图形界面。所以,我是从学习各种命令,开始进入计算机世界的。拜技术的飞速发展所赐,Windows 很快取代 DOS,人们再也不用记那些繁杂的计算机命令,通过点点鼠标就可以操作电脑。Windows系统其实也带了一个命令行程序(包括最新的 Windows 10 系统),估计绝大多数人从来都没有打开过。
云水木石
2020/06/09
5950
【Linux操作系统】简学深悟启示录:Linux基本指令
本篇将开启 Linux 操作系统的全面学习,默认使用的是 CentOS 操作系统,使用 Xshell 进行远程登录服务器进行操作测试
DARLING Zero two
2025/07/14
770
【Linux操作系统】简学深悟启示录:Linux基本指令
如何将CDH集群JAVA升级至JDK8
大家都知道在安装CDH时默认安装的JDK版本为jdk1.7.0_67,部分企业开发环境为JDK8版本,这个时候可能会出现在本地开发的应用在集群中无法正常运行。那么如何将CDH集群中的JAVA版本升级至jdk8呢?本篇文章主要讲述如何将CDH集群的JAVA版本升级至JDK8。
Fayson
2018/03/29
3K0
如何将CDH集群JAVA升级至JDK8
Linux中40个最佳Find命令示例
Linuxfind命令是功能强大的工具,使系统管理员可以根据广泛的搜索条件来定位和管理文件和目录。它可以按名称,类型或扩展名,大小,权限等查找目录和文件。
shaonbean
2020/11/04
4.5K0
Linux 基础
在linux中经常会碰到 bashrc,rc.d,rc.local等带有rc的文件或目录,一般都是启动时需要加载的。
青山师
2023/05/05
6500
Linux 基础
【Linux】常用指令,带你快速上手
承接上文,本文将继续补充介绍一些Linux基本指令,以及探讨指令究竟是什么,又什么是权限?权限是 Linux 系统中非常重要的一部分,它决定了谁可以读取、写入或执行文件或目录。
_小羊_
2024/10/16
1010
【Linux】常见指令(二)
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件
平凡的人1
2022/11/15
3.4K0
【Linux】常见指令(二)
linux基本指令的补充
1.sort 指令 使用vim编辑器,在888.txt文件中输入内容 [yzq@VM-8-8-centos 6.6]$ vim 888.txt [yzq@VM-8-8-centos 6.6]$ cat 888.txt 1111 2222 3333 4444 444444 333333 8888 这里vim编辑器的用法先不用了解,记住 使用 a 后输入你想要打印的内容 最后使用 ESC :wq 退出vim编辑器sort ——升序 对应文本内容按行为单位进行排序 [yzq@VM-8-8-cent
lovevivi
2022/12/05
9010
linux基本指令的补充
Fastdfs + Nginx整合部署
记一次Fastdfs + Nginx整合部署 1、环境介绍 操作系统:CentOS Linux release 7.6.1810 (Core) Nginx编译安装,版本-nginx/1.18.0 Fastdfs编译安装,版本-fastdfs-5.11 server ip 用途 Nginx 10.110.10.110 Nginx/1.18.0 Fastdfs 10.110.10.110 Fastdfs/5.11 2、上传需要的安装包 [root@test-10 src]# pwd /usr/local/sr
染指流年
2023/03/13
5770
Fastdfs + Nginx整合部署
八.Linux文件查找与打包
locate让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。
对弈
2019/09/04
4.3K0
八.Linux文件查找与打包
Linux文件管理
相对路径:不以斜线开始,制定相对于当前工作目录活某目录的位置,可以作为一个简短的星矢制定一个文件名
鱼丸葱面
2020/12/09
4.1K0
Linux文件管理
Linux笔记(一):文件权限
修改用户组:chgrp li -R myFile.txt,【-R】表示执行递归目标文件夹的子文件,再次查看文件信息:
Ashen
2021/02/18
5100
Linux笔记(一):文件权限
Kibana 基础2
目录结构 [root@h101 kibana]# ll total 29700 drwxr-xr-x 10 cc games 4096 Dec 16 22:57 kibana-4.3.1-linux-x64 -rw-r--r-- 1 root root 30408272 Jan 8 23:18 kibana-4.3.1-linux-x64.tar.gz [root@h101 kibana]# ll kibana-4.3.1-linux-x64 total 44 drwxr-xr-x 2
franket
2022/02/10
5410
Linux 学习笔记之超详细基础linux命令 Part 9
---------------------------------接Part 8------------------------------
授客
2019/09/11
7440
Linux常用命令
  下载的tar.gz包装的软件可能是源码,但也有的地方把二进制码打包成tar.gz的。源代码包和二进制包是软件包的两种形式。 二进制包中包括了已经编译过的程序,只需要解包安装就可以使用。源代码包里面包括了程序原始的程序代码,需要进行编译后会出现一个可以运行的程序。
是小北a
2023/10/21
6730
Linux常用命令
一文厘清 Linux 文件管理指令!从创建、查看,到移动、删除,如 touch、cat、mv、rm 等指令的深度剖析。
功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信 息。
逆向-落叶
2025/01/20
2550
一文厘清 Linux 文件管理指令!从创建、查看,到移动、删除,如 touch、cat、mv、rm 等指令的深度剖析。
【linux-Ubuntu】更改用户@后主机名
首先我们使用hostname命令来查看当前的主机名。 也可以使用hostnamctl命令
小志biubiu
2025/02/27
1910
相关推荐
Linux基础指令与权限
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档