Vor gut einem Jahr habe ich bereits an dieser Stelle eine Batchdatei publiziert, die den Import der MEDISTAR-SQL-Sicherung automatisiert. Den gleichen Job erledigt das nachfolgende Powershell-Skript noch ein bisschen komfortabler.
Das Skript importiert den Datenbank-Dump (ORACLE_EXP.DMP) und kopiert die ISAM-Datenbankdateien in die entsprechenden Ordner.
Die Angaben in den ersten beiden Zeilen müssen individuell angepasst werden.
MSImport.ps1
# Zweck: Importiert ISAM-Datenbanken und Oracle-Dump in eine bestehende # MEDISTAR-Installation. Vorhandene Daten werden überschrieben. $DumpFolder = "T:\Sicherung" $Password = "XXXXXXXX" $DumpFile = "ORACLE_EXP.DMP" $MediStar = "${env:MEDISTARDIR}" $ErrorActionPreference = "SilentlyContinue" $Host.UI.RawUI.WindowTitle = "Wiederherstellung der MEDISTAR-SQL-Sicherung" Function Script-Exit {param([string]$Msg, $Sec) "`n"; For ($Sec; $Sec -ge 0; $Sec --) {Write-Host "`r$Msg Skript wird beendet ($Sec)" -NoNewline; Start-Sleep 1}; Exit} If (!(Test-Path -path $DumpFolder\$DumpFile)) { # 16 = Desktop, 17 = Computer, 18 = Netz $DumpFolder = 17; $Description = "Bitte wählen Sie den Ordner aus,`n" + ` "der die Datei $DumpFile enthält."} Else {$Description = "$DumpFile befindet sich im Ordner $DumpFolder.`n" + ` "Sie können den Import starten. Klicken Sie auf OK."} $Object = New-Object -comObject Shell.Application $Folder = $Object.BrowseForFolder(0, $Description, "&H200", $DumpFolder) If ($Folder -eq $null) {Script-Exit -Msg "Abbruch durch Benutzter." -Sec 3} Else {$DumpFolder = $Folder.Self.Path; Write-Host "DumpFolder: $DumpFolder"} If (!(Test-Path -path $DumpFolder\$DumpFile)) {Script-Exit -Msg "$DumpFile nicht gefunden!" -Sec 3} Else {Write-Host "$DumpFile gefunden."} $Message = "Beim Restore werden die vorhandenen Daten gelöscht!" $Object = New-Object -comObject wscript.shell $Result = $Object.Popup($Message, 0, $myInvocation.MyCommand.Name, 1) If ($Result -eq 2) {Script-Exit -Msg "Abbruch durch Benutzter." -Sec 3} $CopyFrom = Get-Childitem $DumpFolder | where {$_.psIsContainer -eq $true} ForEach ($Item in $CopyFrom) { $Item = -join ($DumpFolder, "\", $Item, "\*.*") $Folder = Split-Path (Split-Path $Item) -leaf If (Test-Path "$MediStar\$Folder") { Copy-Item -path $Item -dest $MediStar\$Folder -force -passthru}} $SqlFile = "${env:temp}\Temp.sql" @" drop user msuser cascade; commit; CREATE or REPLACE DIRECTORY imp_dir AS '$DumpFolder'; exit; "@ | Set-Content $SqlFile sqlplus sys/$Password as sysdba '@'$SqlFile impdp system/$Password directory=imp_dir dumpfile=$DumpFile full=yes ` logfile=imp_medistar.log "shutdown immediate;", "startup;", "exit;" -join "`n" | Set-Content $SqlFile sqlplus sys/$Password as sysdba '@'$SqlFile Remove-Item -Path $SqlFile Write-Host "Fertig. $DumpFolder\imp_medistar.log wird gestartet." Invoke-Expression $DumpFolder\imp_medistar.log
Sie können die Datei auch herunterladen.

Kommentare