启动一个新的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,自己忘记了,我们的产品启动了一个从进程就闯祸了!

相关文章
|
4月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
458 93
|
3月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
266 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
380 8
|
6月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
353 11
|
6月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
6月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
6月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
184 0
|
9月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
2006 28
|
7月前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。
|
9月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
338 9

推荐镜像

更多