暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库的启动——Nomount案例两则

原创 eygle 2019-12-19
947

Nomount案例两则

在创建数据库时,如果在这一步骤就出现问题,那么通常可能是系统配置(如内核参数等)存在问题,你需要检查是否分配了足够的系统资源等。

案例一

以下是一个启动到nomount状态可能会遇到的常见错误:

$ export ORACLE_SID=julia
$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Wed Feb 28 09:55:24 2007
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.

SQL> startup nomount;
ORA-00600: internal error code, arguments: [OSDEP_INTERNAL], [], [], [], [], [], [], []
ORA-27302: failure occurred at: skgpwreset1
ORA-27303: additional information: invalid shared ctx
ORA-27146: post/wait initialization 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: sskgpsemsper

(注意:ORA-00600是Oracle内部错误的一个集合,其具体含义要看后面的参数提示,数据库出现ORA-00600错误应当引起DBA的充分重视,很多600错误可能会导致数据损失。)

在Nomount状态就出现问题,通常是系统问题,OS类错误一般说明是系统资源不足,这在Linux/Unix下和信号量等参数设置有关,多出现在同一主机运行多个数据库实例的情况(在Solaris上需要修改/etc/system文件中的内核参数,重起系统后修改生效)。

在这个错误提示中,600错误的第一个参数是OSDEP_INTERNAL,我们大致可以猜测到这是一个OS Dependent/Internal Error。很多Oracle的提示可以根据缩写猜到大致的含义,但是如果是错误号那就要依赖Oracle的文档来寻找答案。

此外错误提示OS相关的操作是:semget 。这是一个标准的操作系统调用,通过手册可以获得其含义信息,可以看到这是和信号量相关的系统调用:

bogon:Eygle eygle$ man semget

SEMGET(2)                   BSD System Calls Manual                  SEMGET(2)

NAME
     semget -- obtain a semaphore id

SYNOPSIS
     #include <sys/sem.h>

     int
     semget(key_t key, int nsems, int semflg);

具体就可以判断,问题和操作系统的内核参数设定有关,可能是信号量设置不足导致的,根据不同的操作系统找到相应的参数,调整之后即可解决问题。

这个案例给我们的提示是:应该认真细致的阅读每一行错误提示信息,往往从直接的提示就可以找到真实的错误原因

案例二

在另外一个客户现场,遭遇过另外一个案例,当时客户的服务器异常断电,当系统重新启动后,数据库无法启动(提示:重启主机对于DBA来说应当极其慎重,很多隐藏的故障可能在重启时爆发出来,在没有做好充分准备之前,不要贸然从事)。

数据库的症状是,启动主机到Nomount状态后,后台进程会立即将实例中止,也就是说数据库实例都无法稳定创建,告警日志文件信息如下:

Mon Dec  3 14:24:30 2007
Errors in file /oraclehx/app/admin/sxlss/bdump/sxlss_pmon_360454.trc:
ORA-07445: exception encountered: core dump [] [] [] [] [] []
PSP0 started with pid=3, OS id=422106
MMAN started with pid=4, OS id=303332
DBW0 started with pid=5, OS id=299324
......... 
SMON started with pid=11, OS id=278882
RECO started with pid=12, OS id=319898
CJQ0 started with pid=13, OS id=295404
MMON started with pid=14, OS id=303428
MMNL started with pid=15, OS id=438776
Mon Dec  3 14:24:33 2007
PSP0: terminating instance due to error 472
Instance terminated by PSP0, pid = 422106 

综合前面介绍的知识,如果实例都无法创建,那通常是在OS方面存在问题,这些问题在系统重新启动后才体现出来,经过检查,发现客户系统是AIX操作系统补丁应用不完全,最后导致了数据库无法启动,应用完整的系统补丁后,数据库恢复正常:

instfix -i|grep ML
All filesets for 5.3.0.0_AIX_ML were found.
All filesets for 5300-01_AIX_ML were found.
All filesets for 5300-02_AIX_ML were found.
All filesets for 5300-03_AIX_ML were found.
All filesets for 5300-04_AIX_ML were found.
All filesets for 5300-05_AIX_ML were found.
Not all filesets for 5300-06_AIX_ML were found. 

这个案例给我们的经验是:当进行OS补丁应用时一定要认真确认,对关键补丁应当进行服务器重启验证,不能掉以轻心

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论