stevesh
Goto Top

Dateien packen und verschieben

Hallo @,

ich habe folgendes Problem und bin leider kein großer Skript Schreiber.
Vielleicht kann mir jemand bei dem Problem helfen.

Ich möchte folgendes via Skript (batch oder PS) ausführen lassen:

Das Quellverzeichnis beinhaltet mehrer Unterordner (je Datenbank) mit SQL Backupdateien, diese sollen auf ein Netzlaufwerk in der gleichen Struktur verschoben werden.
Die Dateien in den Unterordnern sollen dabei einzeln gepackt werden (7zip) und der Dateiname jeder Datei soll erhalten bleiben. (Damit man gezielt bei Problemen die richtige Datei raussuchen kann.)


Beispiel:

Quelle: SQL-Server\DB_Backup\Anwendung1\backup20210702_1030.bak Ziel: \\NAS\DB_Backup\Anwendung1\backup20210702_1030.7z
Quelle: SQL-Server\DB_Backup\Anwendung2\backup20210702_0930.bak Ziel: \\NAS\DB_Backup\Anwendung1\backup20210702_0930.7z


Hat da vielleicht jemand schon was passendes rumliegen oder zaubert kurz ein Skript für mich?

Vielen Dank.

Steve

Content-ID: 881876396

Url: https://administrator.de/contentid/881876396

Ausgedruckt am: 08.11.2024 um 09:11 Uhr

NordicMike
NordicMike 02.07.2021 um 10:54:25 Uhr
Goto Top
Die Dateien der SQL Datenbanken sind immer offen. Ich würde sie nicht mit einem Script weg kopieren, sondern mit einem Backup Programm, das die Log Files vorher purged. Veeam Community Edition ist kostenlos. Dort stellt man dann "Application Aware Processing ein", dann wird die Datenbank auch "healthy" gesichert.
SteveSH
SteveSH 02.07.2021 aktualisiert um 11:09:17 Uhr
Goto Top
Oh da habe ich mich falsch ausgedrückt, im Quellverzeichnis liegen in den Unterordnern DB.bak Datei, die durch einen Wartungsplan mit Backup über Nacht erstellt wurden.

Daher sind die Dateien geschlossen.
148934
148934 02.07.2021 aktualisiert um 12:47:28 Uhr
Goto Top
@echo off
set "sevenzip=D:\Tools\7z.exe"  
set "source=D:\SQL-Server\DB_Backup"  
set "target=\\NAS\DB_Backup"  
for /f "delims=" %%a in ('dir /b /s /a-d "%source%\*.bak"') do (  
    if not exist "%target%%%~pa" md "%target%%%~pa" >nul  
    "%sevenzip%" a "%target%%%~pna.7z" "%%a"  
)
em-pie
em-pie 02.07.2021 aktualisiert um 19:39:07 Uhr
Goto Top
Moin,

und wenn es aus dem Hause "Powershell" sein darf:
$src = "c:\test\*.bak"  
$dst = "C:\test\zip"  
$7z = "C:\Program Files\7-Zip\7z.exe"  

## Mit CmdLet und der 2GB Grenze
Get-ChildItem -Path $src | ForEach-Object {Compress-Archive -Path $_.FullName -DestinationPath $dst"\"$($_.BaseName)".zip" -CompressionLevel Optimal}  

## Mit 7zip ohne Limit und höchster Kompressionsstufe
Get-ChildItem -Path $src | ForEach-Object {& $7z a "-mx=9" $dst"\"$($_.BaseName)".7z" $_.FullName}  

HINWEIS:
die *.bak-Dateien dürfen nicht größer als 2GB sein, ansonsten 7zip nehmen
The Compress-Archive cmdlet uses the Microsoft .NET API System.IO.Compression.ZipArchive to compress files. The maximum file size is 2 GB because there's a limitation of the underlying API.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...

Gruß
em-pie