ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 记一次Windows下启动错误故障

记一次Windows下启动错误故障

原创 Linux操作系统 作者:realkid4 时间:2011-10-16 20:01:55 0 删除 编辑

 

Oracle数据库最早是构建在Unix/Linux环境下,提供企业级应用。所以,其中很多的配置和架构体系都是依存在Unix/Linux思路。

 

1、  故障症状

 

一台项目组内部使用的数据库服务器断电停机了,重启之后就数据库没有自动启动。在任务管理器中,使用重新启动数据库服务OracleServiceOrcl,启动过程中没有错误报出。监听器服务启动,检查监听器服务状态如下:

 

 

LSNRCTL> status

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=acca-119hs63yxc)(PORT=1521)

))

LISTENER 的 STATUS

------------------------

别名                      LISTENER

版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production

启动日期                  11-10月-2011 12:35:32

正常运行时间              0 天 0 小时 0 分 21 秒

跟踪级别                  off

安全性                    ON: Local OS Authentication

SNMP                      OFF

监听程序参数文件          C:\tool\oracle\oracle\product\10.2.0\db_1\network\admin\listener.ora

监听程序日志文件          C:\tool\oracle\oracle\product\10.2.0\db_1\network\log\listener.log

监听端点概要...  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=acca-119hs63yxc)(PORT=1521)))

监听程序不支持服务

命令执行成功

 

 

数据库没有启动,那么尝试手工命令行登录。

 

 

C:\Documents and Settings\Administrator>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 11 12:36:03 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

ERROR:

ORA-12641: 验证服务无法初始化

 

SQL> conn sys/sys as sysdba

ERROR:

ORA-12641: 验证服务无法初始化

 

 

登录无法实现。

 

2、问题分析

 

从监听器的情况看,监听器是在运行,但是没有注册的服务传入进来。起码证明数据库实例Instance的没有启动或者启动中断。另外一个疑点在于即使实例没有启动,单独使用本机用户进行服务器端验证也无法登陆。

 

那么,首先排除一下是不是在Instance启动过程中出现什么问题,检查AlertLog。下面是抽取到的日志最后记录。

 

 

Fri Sep 23 15:46:13 2011

Thread 1 advanced to log sequence 1428

  Current log# 2 seq# 1428 mem# 0: C:\TOOL\ORACLE\ORACLE\PRODUCT\10.2.0\ORADATA\OTS\REDO02A.LOG

  Current log# 2 seq# 1428 mem# 1: C:\TOOL\ORACLE\ORACLE\PRODUCT\10.2.0\ORADATA\OTS\REDO02B.LOG

Sat Sep 24 06:00:09 2011

Thread 1 advanced to log sequence 1429

  Current log# 3 seq# 1429 mem# 0: C:\TOOL\ORACLE\ORACLE\PRODUCT\10.2.0\ORADATA\OTS\REDO03A.LOG

  Current log# 3 seq# 1429 mem# 1: C:\TOOL\ORACLE\ORACLE\PRODUCT\10.2.0\ORADATA\OTS\REDO03B.LOG

 

 

当前日期是10月11日,而alert_log中的最后的记录是在9月24日。说明最起码在启动当天,使用任务管理器启动根本就没有触及到启动的过程。

 

结合使用sqlplus不能登陆的现象,说明在启动之前,使用当前用户进行验证登录是失败的。

 

 

[oracle@bspdev ~]$ oerr ora 12641

12641, 00000, "Authentication service failed to initialize"

// *Cause:  The authentication service failed during initialization.

// *Action: Enable tracing to determine the exact error.

 

 

那么,整个问题的焦点就集中到空闲实例登录验证机制上。因为即使是使用任务管理器进行实例启动,实现机制无外于由OS使用当前用户进行登录。所以,下一步的检查目标是验证机制配置文件tnsnames.ora。

 

打开该文件,发现如下配置。

 

 

SQLNET.AUTHENTICATION_SERVICES = (ALL)

 

 

该参数确定的是是否使用操作系统验证机制。在Windows平台上,配置工具netca将这个参数默认设置为NT。取值NT的含义是专门用于Windows平台的验证机制。在官方文档上,Windows平台设置为ALL也是可以进行OS验证的。

 

3、问题解决

 

理论上没有问题,但是笔者尝试将其修改为NT,看看实际的效果。

 

 

SQLNET.AUTHENTICATION_SERVICES = (NT)

 

 

尝试进行sqlplus连接。

 

 

SQL> conn sys/acca as sysdba

已连接到空闲例程。

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  419430400 bytes

Fixed Size                  1249368 bytes

Variable Size              83890088 bytes

Database Buffers          331350016 bytes

Redo Buffers                2940928 bytes

数据库装载完毕。

数据库已经打开。

 

 

启动成功,监听器状态如下。

 

--篇幅原因,有省略……

LSNRCTL> status

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=acca-119hs63yxc)(PORT=1521)

))

LISTENER 的 STATUS

------------------------

监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=acca-119hs63yxc)(PORT=1521)))

服务摘要..

服务 "OTSXDB" 包含 1 个例程。

  例程 "ots", 状态 READY, 包含此服务的 1 个处理程序...

服务 "OTS_XPT" 包含 1 个例程。

  例程 "ots", 状态 READY, 包含此服务的 1 个处理程序...

服务 "ots" 包含 1 个例程。

  例程 "ots", 状态 READY, 包含此服务的 1 个处理程序...

命令执行成功

 

 

alert_log中也出现了对应的启动过程日志,无故障。登录尝试也成功。

 

 

SQL> conn scott/tiger@otstest;

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Connected as scott

 

 

 

4、结论和反思

 

说明,在windows上尝试使用Oracle 10gR2(起码在笔者的服务器上尝试使用)ALL选项,会带来验证登录问题。

 

下面是该参数几个取值在验证上的效果。

 

 

SQLNET.AUTHENTICATION_SERVICES = (ALL)

 

SQL> conn / as sysdba

ERROR:

ORA-12641: 验证服务无法初始化

 

SQL> conn sys/acca as sysdba

ERROR:

ORA-12641: 验证服务无法初始化

 

 

取值NONE效果。

 

 

SQLNET.AUTHENTICATION_SERVICES = (NONE)

 

SQL> conn / as sysdba

ERROR:

ORA-01031: 权限不足

 

SQL> conn sys/acca as sysdba

已连接。

SQL>

 

 

取值NT效果。

 

 

SQLNET.AUTHENTICATION_SERVICES = (NT)

 

SQL> conn / as sysdba

ERROR:

ORA-01031: 权限不足

 

警告: 您不再连接到 ORACLE。

SQL> conn sys/acca as sysdba

已连接。

 

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17203031/viewspace-709211/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    8039116