启动一个新的Oracle从进程,数据库就连不上了!(ORA-27303)

简介: 一线的工程师反映,一个客户在安装了我们公司的产品后,客户的数据库突然出现客户端无法连接的现象!

现象

一线的工程师反映,一个客户在安装了我们公司的产品后,客户的数据库突然出现客户端无法连接的现象!

检查错误日志发现,每隔1到2秒就出现一次ORA-27303的错误,下面是第一次出现ORA-27303错误时候的记录。


Thu Dec 31 15:49:14 2020
Archived Log entry 1248193 added for thread 1 sequence 1248219 ID 0x348d2cd1 dest 1:
Thu Dec 31 15:49:39 2020
Errors in file /odata/oracle/app/diag/rdbms/wind/WIND/trace/WIND_j000_125990.trc:
ORA-27140: attach to post/wait facility failed
ORA-27300: OS system dependent operation:invalid_egid failed with status: 1
ORA-27301: OS failure message: Operation not permitted
ORA-27302: failure occurred at: skgpwinit6
ORA-27303: additional information: startup egid = 1000 (dba), current egid = 1001 (oinstall)
Thu Dec 31 15:49:40 2020


检查Red Hat 7的系统日志,发现第一次出现ORA-27303错误时候正好是我们的软件第一次启动的时候。从时间上看好像是我们的软件造成的,但我们的软件已经非常稳定了,之前从未出现类似的问题,。

相应的trace文件中的信息:


Trace file /odata/oracle/app/diag/rdbms/wind/WIND/trace/WIND_j000_348517.trc
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
ORACLE_HOME = /odata/oracle/app/oracle/product/12.1.0/dbhome_1
System name:    Linux
Node name:      db1-gss
Release:        3.10.0-693.el7.x86_64
Version:        #1 SMP Thu Jul 6 19:56:57 EDT 2017
Machine:        x86_64
Instance name: WIND
Redo thread mounted by this instance: 1
Oracle process number: 0
Unix process pid: 348517, image:
*** 2020-12-31 16:36:56.427
Unexpected error 27140 in job slave process
ORA-27140: attach to post/wait facility failed
ORA-27300: OS system dependent operation:invalid_egid failed with status: 1
ORA-27301: OS failure message: Operation not permitted
ORA-27302: failure occurred at: skgpwinit6
ORA-27303: additional information: startup egid = 1000 (dba), current egid = 1001 (oinstall)


分析

从现象上看,客户的数据库正好是我们的产品第一次安装的时候了问题,所以客户怀疑是我们的软件问题,但我们对自己的软件又信心,当然怀疑是客户的环境问题。从数据库系统的日志看数据库上次启动时间距今已经9个月没有了。

从trace记录里面分析,oracle进程9个月前启动的时候egid(有效组id)是1000 (dba),当前是1001 (oinstall)。

检查oracle执行文件的属性


$ ls -l /odata/oracle/app/oracle/product/12.1.0/dbhome_1/bin/oracle
-rwsr-s--x. 1 oracle oinstall 323649840 Dec 27  2019 /odata/oracle/app/oracle/product/12.1.0/dbhome_1/bin/oracl

发现组是oinstall。

再检查正在运行的oracle进程,发现组号是1000


[root@db1-gss ~]# ps -eo pid,stat,pri,uid,gid,cmd |grep oracle
 56474 Ss    19  1000  1000 oracleXXXX (LOCAL=NO)
 72953 S     19     0     0 su - oracle
 97310 S+    19     0     0 grep --color=auto oracle
...


检查oracle用户,主组是1000(dba)


# id oracle
uid=1000(oracle) gid=1000(dba) groups=1000(dba),1001(oinstall)
[root@db1-gss ~]#

结论

文件系统里面的oracle执行程序的组是oinstall,而当前oracle用户的组是dba,因此当我们的软件启动的时候需要产生一个从进程(spawn jobq slave process)是dba,和之前的进程组oinstall不同,造成冲突。


解决过程

将oracle用户的主组从dba改成oinstall:


# id oracle
uid=54321(oracle) gid=54322(dba) groups=54322(dba),54321(oinstall),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)
# usermod -g  oinstall -G dba oracle

结果关闭数据库失败!


SQL> shutdown immediate;
ERROR:
ORA-27140: attach to post/wait facility failed
ORA-27300: OS system dependent operation:invalid_egid failed with status: 1
ORA-27301: OS failure message: Operation not permitted
ORA-27302: failure occurred at: skgpwinit6
ORA-27303: additional information: startup egid = 1000 (dba), current egid =
1001 (oinstall)


修改oracle用户成错误的组号后再关闭关数据库还是一样的失败,再把oracle执行程序的用户组改成错误的,才能关闭数据库。

再重新把Oracle组和oracle执行程序的用户组改成正确的,再启动数据库,成功!

完成后客户连接不进来,原来监听的进程也是同样的问题,组号不对,重新启动后解决。


回顾

又是帮客户背锅,他们启动了数据库后修改了组ID,自己忘记了,我们的产品启动了一个从进程就闯祸了!

相关文章
|
1月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
40 7
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
28 6
|
1月前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
23 5
|
2月前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
2月前
|
监控 Oracle 关系型数据库
Oracle数据库性能优化
【10月更文挑战第16天】Oracle数据库性能优化是
32 1
|
22天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1
|
24天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
37 4
|
2月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
67 3
Mysql(4)—数据库索引
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
176 1
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
89 2

推荐镜像

更多