Oracle DUMP auf NAS
Hallo,
ich versuche gerade die Sicherung meiner Oracle-DB (Version 11.2g) unter Windows Server 2019 über ein Script auf einem NAS einzurichten. Bisher lief das Ganze auf dem Umweg über lokale Festplatte und danach xcopy auf den NAS-Share. Offenbar fehlt es dem expdp-Prozess an Zugriffsrechten auf den NAS. Das Script läuft unter dem Administrator Account. Entsprechende Rechte auf den Backup-Ordner sind gesetzt und bis auf den expdp laufen alle Befehle fehlerfrei einschl. Erstellung und Ausführung einzelner SQLPLUS-Scripte.
Hier das Script:
set logdatei=\\nas\backup\MD_DMP_Sicherungslog.txt
REM Wochentag ermitteln. Geht nicht mit CMD-Befehlen, daher VBS.
echo Wscript.Echo WeekdayName(Weekday(now,0),false,0) > %~n0.vbs
FOR /F "usebackq" %%a IN (`cscript.exe %~n0.vbs //nologo`) DO set weekday=%%a
del %~n0.vbs
set BackupFolder=\\nas
echo dummy > dummy.txt
xcopy dummy.txt %Backupfolder% /Y
ping -n 5 localhost
echo %date% %time% MD Sicherung > %logdatei%
echo %date% %time% Beginn der Sicherung >> %logdatei%
rem -- bilde restrict.sql
echo shutdown immediate > %BackupFolder%\Backup\restrict.sql
echo STARTUP RESTRICT >> %BackupFolder%\Backup\restrict.sql
echo exit >> %BackupFolder%\Backup\restrict.sql
echo %date% %time% restrict.sql gebildet >> %logdatei%
rem -- bilde restart.sql
Echo shutdown immediate > %BackupFolder%\Backup\restart.sql
Echo startup >> %BackupFolder%\Backup\restart.sql
Echo alter system disable restricted session; >> %BackupFolder%\Backup\restart.sql
echo exit >> %BackupFolder%\Backup\restart.sql
echo %date% %time% restart.sql gebildet >> %logdatei%
rem -- bilde unrestrict.sql
Echo alter system disable restricted session; > %BackupFolder%\Backup\unrestrict.sql
echo exit >> %BackupFolder%\Backup\unrestrict.sql
echo %date% %time% unrestrict.sql gebildet >> %logdatei%
rem -- bilde down.sql
Echo alter system disable restricted session; > %BackupFolder%\Backup\down.sql
Echo shutdown immediate >> %BackupFolder%\Backup\down.sql
echo exit >> %BackupFolder%\Backup\down.sql
echo %date% %time% down.sql gebildet >> %logdatei%
rem -- END SQL-Scripts
REM * Anlegen des Verzeichnis Sicherung falls nicht vorhanden *
echo %date% %time% bereite Sicherungsverzeichnis vor >> %logdatei%
echo dummy > dummy.txt
xcopy dummy.txt %BackupFolder% /Y
echo %date% %time% dummy.txt nach %BackupFolder% kopiert >> %logdatei%
REM *setzen des Exportverzeichnisses für DUMP *
echo CREATE or REPLACE DIRECTORY exp_dir AS '%BackupFolder%\Sicherung\%weekday%'; > %BackupFolder%\Backup\sic.sql
echo CREATE or REPLACE DIRECTORY expdp_dir AS '%BackupFolder%\Sicherung\%weekday%'; >> %BackupFolder%\Backup\sic.sql
echo GRANT READ, WRITE ON DIRECTORY exp_dir TO mduser; >> %BackupFolder%\Backup\sic.sql
echo GRANT READ, WRITE ON DIRECTORY expdp_dir TO mduser; >> %BackupFolder%\Backup\sic.sql
echo exit >> %BackupFolder%\Backup\sic.sql
echo %date% %time% Scripte gebildet >> %logdatei%
REM Ausführung der sic.sql
sqlplus sys/ as sysdba @%BackupFolder%\Backup\sic.sql
echo %date% %time% sic.sql ausgeführt (Export-Verzeichnisse gebildet) >> %logdatei%
REM *Datenexport (DUMP) *
echo %date% %time% schalte DB in restrict mode >> %logdatei%
REM Ausführung restrict.sql
sqlplus sys/ as sysdba @%BackupFolder%\backup\restrict.sql
echo %date% %time% DB in restrict mode geschaltet >> %logdatei%
echo %date% %time% initialisiere Datenoutput aus ORACLEBASIS (EXPORT) >> %logdatei%
REM DMP-File erzeugen
expdp system/ directory=expdp_dir dumpfile=MD.dmp logfile=MD.log FULL=YES reuse_dumpfiles=y
REM *Ausgabe des DUMPLogs nach MSSicherungslog.txt *
echo %date% %time% Datenoutput aus ORACLEBASIS (EXPORT) - Beendet >> %logdatei%
REM Ausführung unrestricted.sql
sqlplus sys/ as sysdba @%BackupFolder%\Backup\unrestrict.sql
echo %date% %time% DB restrict mode OFF >> %logdatei%
echo %date% %time% beende Datenbank und Stoppe Dienste >> %logdatei%
REM Oracle beenden
sqlplus sys/ as sysdba @%BackupFolder%\Backup\down.sql
net stop OracleServiceMD
echo %date% %time% Oracle-Dienste beendet.(down.sql) >> %logdatei%
REM Restart Oracle
sqlplus sys/ as sysdba @%BackupFolder%\Backup\restart.sql
echo %date% %time% Restart der Datenbank nach Dienststart ausgeführt >> %logdatei%
echo %date% %time% Dienste gestartet. >> %logdatei%
exit
Und hier der Fehler:
Angemeldet bei: Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
ORA-39002: Ung³ltiger Vorgang
ORA-39070: Log-Datei kann nicht ge÷ffnet werden.
ORA-29283: Ung³ltiger Dateivorgang
ORA-06512: in "SYS.UTL_FILE", Zeile 536
ORA-29283: Ung³ltiger Dateivorgang
Kennt jemand eine Lösung?
Danke
ich versuche gerade die Sicherung meiner Oracle-DB (Version 11.2g) unter Windows Server 2019 über ein Script auf einem NAS einzurichten. Bisher lief das Ganze auf dem Umweg über lokale Festplatte und danach xcopy auf den NAS-Share. Offenbar fehlt es dem expdp-Prozess an Zugriffsrechten auf den NAS. Das Script läuft unter dem Administrator Account. Entsprechende Rechte auf den Backup-Ordner sind gesetzt und bis auf den expdp laufen alle Befehle fehlerfrei einschl. Erstellung und Ausführung einzelner SQLPLUS-Scripte.
Hier das Script:
set logdatei=\\nas\backup\MD_DMP_Sicherungslog.txt
REM Wochentag ermitteln. Geht nicht mit CMD-Befehlen, daher VBS.
echo Wscript.Echo WeekdayName(Weekday(now,0),false,0) > %~n0.vbs
FOR /F "usebackq" %%a IN (`cscript.exe %~n0.vbs //nologo`) DO set weekday=%%a
del %~n0.vbs
set BackupFolder=\\nas
echo dummy > dummy.txt
xcopy dummy.txt %Backupfolder% /Y
ping -n 5 localhost
echo %date% %time% MD Sicherung > %logdatei%
echo %date% %time% Beginn der Sicherung >> %logdatei%
rem -- bilde restrict.sql
echo shutdown immediate > %BackupFolder%\Backup\restrict.sql
echo STARTUP RESTRICT >> %BackupFolder%\Backup\restrict.sql
echo exit >> %BackupFolder%\Backup\restrict.sql
echo %date% %time% restrict.sql gebildet >> %logdatei%
rem -- bilde restart.sql
Echo shutdown immediate > %BackupFolder%\Backup\restart.sql
Echo startup >> %BackupFolder%\Backup\restart.sql
Echo alter system disable restricted session; >> %BackupFolder%\Backup\restart.sql
echo exit >> %BackupFolder%\Backup\restart.sql
echo %date% %time% restart.sql gebildet >> %logdatei%
rem -- bilde unrestrict.sql
Echo alter system disable restricted session; > %BackupFolder%\Backup\unrestrict.sql
echo exit >> %BackupFolder%\Backup\unrestrict.sql
echo %date% %time% unrestrict.sql gebildet >> %logdatei%
rem -- bilde down.sql
Echo alter system disable restricted session; > %BackupFolder%\Backup\down.sql
Echo shutdown immediate >> %BackupFolder%\Backup\down.sql
echo exit >> %BackupFolder%\Backup\down.sql
echo %date% %time% down.sql gebildet >> %logdatei%
rem -- END SQL-Scripts
REM * Anlegen des Verzeichnis Sicherung falls nicht vorhanden *
echo %date% %time% bereite Sicherungsverzeichnis vor >> %logdatei%
echo dummy > dummy.txt
xcopy dummy.txt %BackupFolder% /Y
echo %date% %time% dummy.txt nach %BackupFolder% kopiert >> %logdatei%
REM *setzen des Exportverzeichnisses für DUMP *
echo CREATE or REPLACE DIRECTORY exp_dir AS '%BackupFolder%\Sicherung\%weekday%'; > %BackupFolder%\Backup\sic.sql
echo CREATE or REPLACE DIRECTORY expdp_dir AS '%BackupFolder%\Sicherung\%weekday%'; >> %BackupFolder%\Backup\sic.sql
echo GRANT READ, WRITE ON DIRECTORY exp_dir TO mduser; >> %BackupFolder%\Backup\sic.sql
echo GRANT READ, WRITE ON DIRECTORY expdp_dir TO mduser; >> %BackupFolder%\Backup\sic.sql
echo exit >> %BackupFolder%\Backup\sic.sql
echo %date% %time% Scripte gebildet >> %logdatei%
REM Ausführung der sic.sql
sqlplus sys/ as sysdba @%BackupFolder%\Backup\sic.sql
echo %date% %time% sic.sql ausgeführt (Export-Verzeichnisse gebildet) >> %logdatei%
REM *Datenexport (DUMP) *
echo %date% %time% schalte DB in restrict mode >> %logdatei%
REM Ausführung restrict.sql
sqlplus sys/ as sysdba @%BackupFolder%\backup\restrict.sql
echo %date% %time% DB in restrict mode geschaltet >> %logdatei%
echo %date% %time% initialisiere Datenoutput aus ORACLEBASIS (EXPORT) >> %logdatei%
REM DMP-File erzeugen
expdp system/ directory=expdp_dir dumpfile=MD.dmp logfile=MD.log FULL=YES reuse_dumpfiles=y
REM *Ausgabe des DUMPLogs nach MSSicherungslog.txt *
echo %date% %time% Datenoutput aus ORACLEBASIS (EXPORT) - Beendet >> %logdatei%
REM Ausführung unrestricted.sql
sqlplus sys/ as sysdba @%BackupFolder%\Backup\unrestrict.sql
echo %date% %time% DB restrict mode OFF >> %logdatei%
echo %date% %time% beende Datenbank und Stoppe Dienste >> %logdatei%
REM Oracle beenden
sqlplus sys/ as sysdba @%BackupFolder%\Backup\down.sql
net stop OracleServiceMD
echo %date% %time% Oracle-Dienste beendet.(down.sql) >> %logdatei%
REM Restart Oracle
sqlplus sys/ as sysdba @%BackupFolder%\Backup\restart.sql
echo %date% %time% Restart der Datenbank nach Dienststart ausgeführt >> %logdatei%
echo %date% %time% Dienste gestartet. >> %logdatei%
exit
Und hier der Fehler:
Angemeldet bei: Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
ORA-39002: Ung³ltiger Vorgang
ORA-39070: Log-Datei kann nicht ge÷ffnet werden.
ORA-29283: Ung³ltiger Dateivorgang
ORA-06512: in "SYS.UTL_FILE", Zeile 536
ORA-29283: Ung³ltiger Dateivorgang
Kennt jemand eine Lösung?
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1213267851
Url: https://administrator.de/contentid/1213267851
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
8 Kommentare
Neuester Kommentar
Was meinst Du mit "systemweit"? Läuft der Export nun unter dem o.g. Konto oder wird er mit diesem Konto nur ausgelöst und läuft dann unter dem (einem) System-Konto? Falls letzteres, dann könnte auch einfach das die Ursache sein. Dann müsste nicht nur der auslösende Administrator Schreibrechte auf dem NAS-Pfad haben sondern auch das betreffende System-Konto.
Der User stößt es an, der Export selber läuft aber als lokaler Dienst. Bei iSCSI kein Problem, da ein Systemlaufwerk. Hängt anscheinend aber auch von der Installation ab: https://docs.oracle.com/en/database/oracle/oracle-database/18/ntqrf/abou ...
Unter Linux hätte man das Problem nicht
Wie fügt man Local System auf einem NAS hinzu?
Unter Linux hätte man das Problem nicht
Wie fügt man Local System auf einem NAS hinzu?
Wenn NAS und Windows Computer in einer AD-Domäne sind, dann muss man nur dem Computerkonto des Windows Computers die entsprechenden Rechte erteilen.