Manche Anwendungen mögen es nicht, wenn ihre Dateien während der Datensicherung in Benutzung sind. Automatische Backups sind dadurch nicht möglich oder können Dateien beschädigen. Ich hatte so einen Fall, bei dem in ca. 50% der Fälle die Datenbank der Anwendung beschädigt wurde.
Das Problem lässt sich einfach durch eine vorherige Prüfung des Serverdienstes auf geöffnete Dateien umgehen.
In dem folgenden VBScript wird geprüft ob in dem Verzeichnis D:\Data geöffnete Dateien sind. Falls ja, wird eine Meldung im Ereignis Log vorgenommen und das Backup nicht ausgeführt. Ansonsten wird das unter RUN_ON_SUCCESS angegebene Script ausgeführt.
Download check_lanmanserver_openfiles.vbs
' Fadil Karalic <fk@kworx.de> Option Explicit On Error Resume Next ' the last oRes is always an error :-( const CHECKOPEN="D:\Data" ' folder to check for open files const RUN_ON_SUCCESS="C:\scripts\backup.bat" ' backup_script ' Event Log const SUCCESS=0 const ERROR=1 const WARNING=2 const INFORMATION=4 const AUDIT_SUCCESS=8 const AUDIT_FAILURE=16 const SERVER="127.0.0.1" Dim oWinNt, oRes, wso Dim smsg Dim OPENFILES Dim ret Set oWinNT = GetObject("WinNT://" &SERVER & "/LanManServer") Set wso = CreateObject("WScript.Shell") OPENFILES=0 For Each oRes In oWinNT.Resources if(InStr(CStr(oRes.Path),CHECKOPEN,1))then OPENFILES=OPENFILES+1 sMsg = sMsg & CStr(oRes.User) & " - " sMsg = sMsg & CStr(oRes.Path) & vbCrLf end if Next if(OPENFILES>1)then ret=wso.LogEvent(WARNING,"Found " & OPENFILES & _ " open file(s). Backup aborted!" & _ vbCrLf & sMsg) ' do something else ret=wso.run(RUN_ON_SUCCESS,,true) ret=wso.LogEvent(SUCCESS,"Backup done. " & vbCrLf & ret) end if Set oWinNt = Nothing Set wso = Nothing |