Skrypty PowerShell automatyzują zadania administracyjne SQL Server, od backupów po kontrolę stanu instancji.
PowerShell jako narzędzie automatyzacji SQL Server
Skrypty PowerShell mogą sterować zadaniami administracyjnymi w Microsoft SQL Server, ponieważ pozwalają uruchamiać polecenia systemowe, wykonywać zapytania T-SQL, odczytywać wyniki i reagować na błędy. Do pracy z SQL Server często używa się modułu SqlServer, który udostępnia między innymi polecenie Invoke-Sqlcmd. Może ono połączyć się z określoną instancją, wykonać pojedyncze zapytanie albo uruchomić cały plik zawierający instrukcje T-SQL.
Przykładowy skrypt może przyjmować nazwę serwera, instancji i bazy jako parametry, a następnie sprawdzać dostępność połączenia oraz wykonywać zaplanowaną operację. W zależności od konfiguracji połączenie może korzystać z uwierzytelniania Windows albo uwierzytelniania SQL Server. Uprawnienia konta powinny być ograniczone do czynności wymaganych przez konkretny skrypt; samo uruchomienie PowerShell nie nadaje automatycznie praw administratora w SQL Server.
Backup bazy danych wykonywany z PowerShell
Jednym z typowych zastosowań jest wywołanie instrukcji BACKUP DATABASE dla pełnej kopii bazy SQL Server. Skrypt może wyznaczyć nazwę pliku zawierającą datę i godzinę, przekazać ją do polecenia T-SQL, sprawdzić kod zakończenia oraz zapisać wynik do dziennika. Lokalizacja pliku kopii musi być dostępna dla procesu usługi SQL Server, ponieważ to silnik SQL Server zapisuje backup, a nie komputer, na którym interaktywnie uruchomiono PowerShell.
Administrator może również automatyzować backupy dziennika transakcji za pomocą BACKUP LOG, ale ta operacja wymaga modelu odzyskiwania FULL albo BULK_LOGGED. W modelu SIMPLE backup dziennika transakcji nie jest dostępny. Sam skrypt powinien kontrolować, czy poprzednia kopia zakończyła się powodzeniem, czy plik został utworzony i czy dostępne jest wystarczająco dużo miejsca. Utworzenie pliku backupu nie oznacza jeszcze, że kopia jest możliwa do odtworzenia, dlatego okresowo należy wykonywać testowe przywracanie przy użyciu RESTORE VERIFYONLY lub pełnego procesu RESTORE DATABASE w środowisku testowym.
Kontrola stanu instancji i zadań SQL Server Agent
PowerShell może sprawdzać stan usługi systemowej SQL Server, korzystając z poleceń takich jak Get-Service. Dla nazwanej instancji nazwa usługi ma zwykle postać MSSQL$NazwaInstancji, natomiast dla instancji domyślnej używana jest usługa MSSQLSERVER. Taki test informuje, czy proces usługi działa, ale nie potwierdza jeszcze, że instancja przyjmuje połączenia i poprawnie wykonuje zapytania. Dlatego praktyczny skrypt wykonuje także kontrolne zapytanie, na przykład odczytujące @@VERSION lub SERVERPROPERTY('ProductVersion').
Moduł SqlServer umożliwia także pracę z obiektami SQL Server Agent, między innymi odczytywanie informacji o zadaniach i ich historii. Skrypt może wykrywać nieudane wykonania zadań backupu, konserwacji indeksów albo kontroli integralności. Do sprawdzania integralności bazy SQL Server służy między innymi DBCC CHECKDB; jest to polecenie uruchamiane przez silnik bazy, dlatego automatyzacja powinna uwzględniać czas jego wykonania i obciążenie serwera. Wyniki kontroli warto zapisywać wraz z nazwą instancji, nazwą bazy, czasem rozpoczęcia, czasem zakończenia i informacją o błędzie.
Bezpieczne uruchamianie i obsługa błędów w skryptach
Skrypt administracyjny powinien jawnie sprawdzać parametry wejściowe, rozróżniać błąd połączenia od błędu wykonania T-SQL i kończyć się odpowiednim kodem wyjścia. Przy użyciu Invoke-Sqlcmd można włączyć zatrzymywanie wykonania po błędzie, a w PowerShell warto obsłużyć wyjątki za pomocą konstrukcji try, catch i finally. Należy także unikać składania zapytań przez bezpośrednie wstawianie niezweryfikowanych danych tekstowych. Nazwy baz, ścieżki i parametry przekazywane do T-SQL powinny być walidowane, a wartości używane w zapytaniach należy przekazywać w sposób ograniczający ryzyko błędnej interpretacji.
W automatyzacji nie powinno się umieszczać haseł wprost w pliku .ps1. Można użyć uwierzytelniania Windows, bezpiecznie przechowywanych poświadczeń systemowych albo mechanizmu przeznaczonego dla środowiska uruchomieniowego. Trzeba też uwzględnić politykę wykonywania skryptów PowerShell, podpisywanie kodu i uprawnienia konta uruchamiającego zadanie. Diagnostyka problemów obejmuje sprawdzenie logu skryptu, historii SQL Server Agent, dziennika błędów SQL Server, dostępności ścieżki backupu, miejsca na dysku oraz poprawności uprawnień do bazy i systemu plików.