Powershell – Wysyłanie Full 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 (.bak) 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. Druga część dotycząca wysyłania logów bazy MSSQL tutaj.

0. Dane początkowe i przygotowanie AzCopy

Zanim przejdziemy do samego skryptu, trzeba przygotować środowisko.

Pobranie AzCopy

Narzędzie AzCopy można pobrać bezpośrednio z Microsoft:

👉 Download AzCopy v10

Plik dostarczany jest w postaci archiwum .zip.

Instalacja

  1. Rozpakuj pobrane archiwum.
  2. Skopiuj plik azcopy.exe do katalogu, np.:

3. Dodaj ścieżkę do zmiennej środowiskowej PATH, aby można było wywoływać azcopy z dowolnego miejsca, lub poprzez zmienne środowiskowe GUI – sekcja System variables -> Path, kliknij New i dodaj C:\azcopy (lub inną ścieżkę).

Dodanie ścieżki do azcopy: C:\azcopy

4. Zweryfikuj poprawność instalacji:

Powinieneś zobaczyć numer wersji (np. 10.25.0).

1. Parametry wejściowe skryptu

Na początku definiujemy parametry, które można dopasować do własnego środowiska:

Na początku definiujemy parametry, które można dopasować do własnego środowiska:

  • SourceFolder – katalog z lokalnymi plikami .bak.
  • DestinationContainer – docelowy kontener w Azure Storage (zmień nazwę na własną).
  • SASToken – token SAS umożliwiający dostęp do kontenera (wygeneruj swój).
  • LogFolder – ścieżka do katalogu, w którym zapisywane będą logi przesyłania.
  • MaxCapMbps – maksymalne obciążenie łącza sieciowego podczas przesyłania.
  • BlockSize – rozmiar bloku danych przesyłanych do chmury.
  • KeepLogsDays – liczba dni, przez które trzymamy lokalne pliki logów.

Dodatkowo ustawiamy zmienną środowiskową AZCOPY_CONCURRENCY_VALUE, aby kontrolować liczbę równoległych wątków przesyłania.

Parametry pozwalają kontrolować źródło danych, miejsce docelowe, limity transferu oraz retencję logów.

2. Tworzenie katalogu logów i pliku logu

Skrypt sprawdza, czy istnieje folder logów, a jeśli nie – tworzy go.
Następnie generuje plik logu z unikalną nazwą opartą o datę i godzinę uruchomienia.

3. Wysyłanie plików .bak do Azure Blob Storage

  1. Skrypt wyszukuje wszystkie pliki .bak w katalogu źródłowym.
  2. Każdy plik jest przesyłany do wskazanego kontenera w Azure przy użyciu AzCopy.
  3. Proces przesyłania jest logowany – zarówno sukcesy, jak i błędy.
  4. Pod koniec generowane jest podsumowanie liczby przesłanych plików.

Ważne:
Użyta opcja --overwrite=false zapobiega nadpisywaniu istniejących plików w chmurze. Czyli raz wysłany plik .bak nie zostanie ponownie wysłany, a jedynie sprawdzony, czy istnieje.

Dzięki parametrowi --overwrite=false unikamy przypadkowego nadpisania plików w chmurze.

4. Usuwanie starych backupów w Azure

Po przesłaniu plików, skrypt sprawdza zawartość kontenera w Azure i wyszukuje pliki .bak, które mają w nazwie datę w formacie backup_YYYY_MM_DD.

Jeśli plik ma więcej niż 10 dni – zostaje automatycznie usunięty.
Dzięki temu w magazynie Azure nie zalegają stare kopie, które tylko zajmowałyby miejsce.

5. Czyszczenie starych logów lokalnych

Ostatnim etapem działania skryptu jest porządkowanie plików logów.
Jeśli znajdą się logi starsze niż zdefiniowane w parametrze $KeepLogsDays (np. 7 dni), to są one kasowane.

To pozwala uniknąć sytuacji, w której katalog z logami rozrasta się bez końca.

6. Rezultat działania

Po uruchomieniu skryptu otrzymujemy:

  • przesłane pliki .bak do Azure Blob Storage,
  • usunięte stare kopie w Azure,
  • czysty katalog logów,
  • pełną historię działań zapisaną w pliku .txt.

7. Dlaczego warto?

Ten skrypt:

✅ Automatyzuje proces archiwizacji,
✅ Optymalizuje transfer sieciowy,
✅ Utrzymuje porządek w Azure Blob Storage,
✅ Dba o czystość logów lokalnych,
✅ Daje pełny wgląd w przebieg procesu.

8. Kompletny skrypt

Zapisz plik z rozszerzeniem .ps1


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