Powershell – Wysyłanie Diff Backupu MS SQL do Azure (Azcopy)

W dzisiejszym wpisie pokażę, jak przygotować kompletny skrypt PowerShell, który automatycznie przesyła pliki backupów SQL Server (.trn) do Azure Blob Storage, a następnie czyści starsze kopie zarówno w chmurze, jak i lokalne pliki logów. Dzięki temu możemy zachować porządek i kontrolę nad miejscem w magazynie danych. Jest to kontynuacja poprzedniego wpisu, który wysyła pełny backup (.bak) dla MSSQL.

Automatyczny upload kopii zapasowych do Azure Blob Storage z PowerShell i AzCopy

W codziennej administracji serwerami jednym z kluczowych elementów jest bezpieczne przechowywanie kopii zapasowych poza lokalną infrastrukturą. Coraz częściej wybieranym rozwiązaniem jest Azure Blob Storage, który oferuje wysoką dostępność, skalowalność i niskie koszty przechowywania danych.

W tym wpisie pokażę Ci kompletny skrypt PowerShell, który:

  • automatycznie przesyła pliki .trn (logi transakcyjne SQL Server) do Azure Storage,
  • loguje cały proces (sukcesy, błędy, postęp),
  • usuwa stare pliki z chmury (np. starsze niż 2 dni),
  • utrzymuje porządek w logach — zachowując tylko określoną liczbę najnowszych raportów.

Wymagania wstępne

Zanim uruchomisz skrypt, przygotuj:

  1. Zainstalowane narzędzie AzCopy.
    — służy do szybkiego przesyłania danych między lokalnym systemem a Azure Blob Storage.
  2. Konto Storage Account w Azure z utworzonym kontenerem (np. backup).
  3. Wygenerowany SAS Token z odpowiednimi uprawnieniami (read, write, list, delete).
  4. PowerShell 5.1 lub nowszy (zalecane PowerShell 7+).

Skrypt PowerShell

Skrypt:

  • przesyła wszystkie pliki .trn z katalogu C:\backup\,
  • ogranicza przepustowość do 19 Mb/s (aby nie przeciążyć łącza),
  • wykorzystuje bloki o rozmiarze 25 MB dla lepszej wydajności przesyłania dużych plików,
  • zapisuje logi w folderze C:\scripts\Logs_VM01,
  • utrzymuje maksymalnie 96 najnowszych logów.

Przesyłanie plików .trn

Skrypt wykorzystuje AzCopy do przesyłania danych:

W czasie działania:

  • postęp przesyłania jest wyświetlany w konsoli,
  • każde zdarzenie (start, sukces, błąd) jest logowane do pliku tekstowego.

Automatyczne czyszczenie starych kopii

Po przesłaniu danych skrypt wykonuje czyszczenie zasobnika w Azure — usuwa wszystkie pliki .trn starsze niż 2 dni.
Mechanizm opiera się na analizie daty w nazwie pliku, np.:

Pliki spełniające kryterium są automatycznie kasowane komendą:

Utrzymywanie porządku w logach

Ostatni etap to czyszczenie lokalnych logów.
Skrypt zachowuje tylko najnowsze $KeepLogs (domyślnie 96) i usuwa starsze raporty:

Dzięki temu katalog logów nie rozrasta się bez końca.

Wskazówki i dobre praktyki

Bezpieczeństwo SAS Tokena:
Nigdy nie publikuj tokena w repozytoriach lub otwartych plikach!
Zamiast tego możesz go przechowywać w zmiennej środowiskowej lub zaszyfrowanym pliku JSON.

Testy przed wdrożeniem:
Uruchom skrypt z parametrem testowym (np. folder z małymi plikami), aby upewnić się, że połączenie i token działają poprawnie.

Harmonogram zadań (Task Scheduler):
Skrypt możesz dodać jako zadanie w harmonogramie Windows, np. co godzinę lub po każdej kopii SQL.

Monitorowanie:
W logach znajdziesz pełny raport z każdego przesłania – przydatne do audytu i diagnostyki.

Pełny skrypt

Kompletny skrypt do pobrania TUTAJ.


Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.

Link do formularza tutaj: https://beitadmin.pl/pomysly

Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).

Dodaj komentarz

beitadmin.pl - Droga Administratora IT