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:
- Zainstalowane narzędzie AzCopy.
— służy do szybkiego przesyłania danych między lokalnym systemem a Azure Blob Storage. - Konto Storage Account w Azure z utworzonym kontenerem (np.
backup). - Wygenerowany SAS Token z odpowiednimi uprawnieniami (
read,write,list,delete). - PowerShell 5.1 lub nowszy (zalecane PowerShell 7+).
Skrypt PowerShell
Skrypt:
- przesyła wszystkie pliki
.trnz kataloguC:\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:
|
1 |
azcopy copy "C:\backup\plik.trn" "https://.../backup/VM01/plik.trn?<SAS>" --overwrite=false --cap-mbps=19 --block-size-mb=25<br> |
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.:
|
1 |
backup_2025_09_15_0100.trn → data = 2025-09-15 |
Pliki spełniające kryterium są automatycznie kasowane komendą:
|
1 |
azcopy remove <BlobURL> --recursive=false |
Utrzymywanie porządku w logach
Ostatni etap to czyszczenie lokalnych logów.
Skrypt zachowuje tylko najnowsze $KeepLogs (domyślnie 96) i usuwa starsze raporty:
|
1 2 |
Get-ChildItem -Path $LogFolder -Filter "*.txt" |Sort-Object LastWriteTime -Descending | Select-Object -Skip $KeepLogs | Remove-Item -Force <br> |
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:).