Powershell i SQL 05 – Backup i restore

1-lip-2015

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

Komentarze są wyłączone

Autor: Rafał Kraik