記一次Windows下啟動錯誤故障

realkid4發表於2011-10-16

 

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

 

 

當前日期是1011,而alert_log中的最後的記錄是在924。說明最起碼在啟動當天,使用工作管理員啟動根本就沒有觸及到啟動的過程。

 

結合使用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部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-709211/,如需轉載,請註明出處,否則將追究法律責任。

相關文章