Seiten

Donnerstag, 27. November 2014

ORA-01041 - eine Frage der Zeit

Betreibt man einen RAC , kann man aus heiterem Himmel einen ORA-01041 (ORA-01041: Interner Fehler: hostdef-Erweiterung ist nicht vorhanden) bekommen, wenn man sich auf dem Knoten über die Betriebssystemauthentifizierung mit der DB verbinden möchte.
Zum Beispiel:
c:\rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on So Nov 23 06:00:01 2014

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: Initialisierung des internen Recovery Manager Packages nicht erfolgreich
RMAN-04005: Fehler aus Zieldatenbank: 
ORA-01041: Interner Fehler: hostdef-Erweiterung ist nicht vorhanden
Mit sqlplus bietet sich das gleiche Bild.
Ein "normaler" connect auf die DB ist hingegen möglich und die Anwendungen auf der DB sind nicht beeinträchtigt.
Eine Ursache des Problems ist möglicherweise die Systemzeit auf dem Server.
Wenn man einen WindowsServer für die RAC-Installation einrichtet, sind Einstellungen in der Registry zu treffen, die verhindern, dass die Zeit zurückgestellt werden kann. ("Set the value for MaxNegPhaseCorrection to 0.": http://docs.oracle.com/cd/E14848_01/doc/install.112/e10817/prewin.htm#BABJBHFH)
Wenn die Uhr des Servers nun etwas zu schnell läuft und vorgeht, kann der Windowsdienst die Uhr nicht mehr korrigieren.
Irgendwann geht die Uhr des Servers mehr als 5min vor und dann passiert folgendes:
Der Server fliegt aus der Domäne. (http://support.microsoft.com/kb/884776/de) Ohne Domäne funktioniert die OS-Authentifizierung nicht mehr und der ORA-01041 kommt.
Dann hilft nur Clusterware stoppen, Zeit stellen, Clusterware starten.
  1. c:\>crsctl stop crs
  2. c:\>net stop w32time
  3. c:\>net start w32time
  4. c:\>w32tm /resync
  5. c:\>crsctl start crs
In einem anderen, neueren Dokument ist Oracle mit dem Wert für MaxNegPhaseCorrection übrigens nicht so restriktiv. Hier sind auf einmal 600s erlaubt:
https://docs.oracle.com/cd/E11882_01/install.112/e48194/prewin.htm#BAJHCEDG