SMO Fehler beim Clonen oder Restore/Recovery
SnapManager für Oracle leidet unter dem gleichen Problem wie viele andere Produkte aus den USA - wenn die Sprache nicht Englisch ist, kommen lustige Fehler.
Das Problem tritt mit SMO 3.x dann auf, wenn man beim Installieren das OS auf DEUTSCH (bzw. nicht ENGLISCH) installiert hat. Der Fehler ist insofern irreführend, als ob es aussieht, dass ein Prozess - in diesem Fall SQLPLUS ein Problem verursacht. In Wirklichkeit sucht SMO nach ENGLISCHEN Meldungen, und findet diese nicht, weil auch die SQLPLUS Meldungen in Deutsch kommen.
Beispiel für den Fehler:
--[ERROR] EXE-00005: Cannot read input stream from spawned process for command [ RECOVER AUTOMATIC DATABASE UNTIL CANCEL PARALLEL 1;]. Error: [Assertion failed] - this expression must be true
--[ERROR] EXE-00003: Killing spawned process for command: [ RECOVER AUTOMATIC DATABASE UNTIL CANCEL PARALLEL 1;]
--[ERROR] EXE-00004: Cannot read error stream from spawned process for command [ RECOVER AUTOMATIC DATABASE UNTIL CANCEL PARALLEL 1;]. Error: Stream closed
--[ERROR] EXE-00003: Killing spawned process for command: [ RECOVER AUTOMATIC DATABASE UNTIL CANCEL PARALLEL 1;]
--[ INFO] SMO-03065: End of Database Recovery
--[ERROR] SMO-13032: Cannot perform operation: Backup Restore. Root cause: ORACLE-00001: Error executing SQL: [ RECOVER AUTOMATIC DATABASE UNTIL CANCEL PARALLEL 1;]. The command returned:
SQL*Plus: Release 12.1.0.2.0 Production on Mon Apr 18 17:29:50 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL> Connect durchgefuhrt.
Die Lösung
Die Lösung ist, dass man sicherstellt, dass SQLPLUS Meldungen in ENGLISCH kommen. Da der SMO Server als Service läuft, reicht es nicht, NLS_LANG nur im Environment zu setzen. Der zielführende Weg ist, es im "smo_server" init Script einzubauen.
vi /etc/init.d/smo_server
#fuegen Sie die folgenden Zeilen am Begin des Scripts ein, wo auch andere Variablen definiert werden:
NLS_LANG=American_America
export NLS_LANG
NLS_TERRITORY=America
export NLS_TERRITORY
Sobald Sie diese Zeilen eingefügt haben, müssen Sie nur das SMO Service neu starten.
/etc/init.d/smo_server restart