Jeśli chcesz zautomatyzować backup możesz korzystać z SQL Server Agenta, poleceń linii komend połączonych z sqlcmd i wielu innych ale między innymi skorzystać można z poleceń modułu sqlps. Zaczynamy więc od załadowania modułu:
Import-Module sqlps
Od tej pory masz do dyspozycji polecenie Backup-SQLDatabase. Oto przykład, w którym wykonujemy backup bazy danych AdventureWorks2014 na lokalnej domyślnej instancji SQL. Wykonywany jest pełny backup bazy do pliku:
Backup-SqlDatabase -ServerInstance localhost -Database "AdventureWorks2014" ` -BackupAction Database -BackupFile c:\temp\aw2014.bak
Ale niby dlaczego mamy korzystać z powershell, skoro jest tyle innych metod. Jeśli znasz już trochę powershella, to wiesz jak łatwo np utworzyć nazwę pliku pobierając datę, nazwę hosta itp. Oto przykład, w którym backup ma być wykonany do pliku, którego nazwa odpowiada dacie backupu:
$date = Get-Date -Format yyyyMMdd $file = 'c:\temp\aw2014_'+$date+".bak" Backup-SqlDatabase -ServerInstance localhost -Database "AdventureWorks2014" ` -BackupAction Database -BackupFile $file
A jeśli chcesz wykonać backup dla większej ilości baz (może nawet dla wszystkich – porównaj z artykułem wykonywanie czynności dla każdej bazy danych) możesz przesyłać do Backup-SqlDatabase nazwę bazy również dynamicznie.
$dbname = 'AdventureWorks2014' $date = Get-Date -Format yyyyMMdd $file = 'c:\temp\'+$dbname+'_'+$date+".bak" Backup-SqlDatabase -ServerInstance localhost -Database $dbname ` -BackupAction Database -BackupFile $file
A jak odtworzyć bazę danych? Tak – masz polecenie Restore-SqlDatabase. Ale pamiętaj, że administratorzy często przed odtworzeniem bazy, muszą zakończyć procesy aktywnych użytkowników i przełączyć bazę danych w tryb Single User. Oto, jak mogłoby wyglądać odtwrzanie bazy danych:
$SqlServer.KillAllProcesses($dbname) $db.UserAccess = [Microsoft.SqlServer.Management.Smo.DatabaseUserAccess]::Single $db.Alter() Restore-SqlDatabase -ServerInstance localhost -Database $dbname ` -ReplaceDatabase -BackupFile $file -RestrictedUser