Бэкап MS SQL (в том числе Express) баз данных с помощью Powershell скрипта
В бесплатной версии Microsoft SQL Server - Express - нет возможности настроить резервное копирование баз данных по расписанию. Однако вы можете настроить бэкап с помощью Powershell-скриптов и планировщика задач Windows.
Ниже - пример скрипта, как это делаю я. Скрипт не удаляет старые бэкапы. Но почитайте мою статью Удаление старых файлов и папок на Powershell, она вам поможет. И еще - Запускаем Powershell-скрипты в планировщике задач.
Обратите внимание на выделенные строки - там надо прописать ваш путь к бэкапам и инстанс SQL-сервера.
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.ConnectionInfo'); [void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Management.Sdk.Sfc'); [void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO'); # Requiered for SQL Server 2008 (SMO 10.0). [void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMOExtended'); $Server = "server\instance"; # SQL Server Instance. $Dest = "F:\backup\"; # Backup path $srv = New-Object Microsoft.SqlServer.Management.Smo.Server $Server; # If missing set default backup directory. If ($Dest -eq "") { $Dest = $server.Settings.BackupDirectory + "\" }; Write-Output ("Started at: " + (Get-Date -format yyyy-MM-dd-HH:mm:ss)); # Full-backup for every database foreach ($db in $srv.Databases) { If($db.Name -ne "tempdb") # Non need to backup TempDB { $timestamp = Get-Date -format yyyy-MM-dd-HH-mm-ss; $backup = New-Object ("Microsoft.SqlServer.Management.Smo.Backup"); $backup.Action = "Database"; $backup.Database = $db.Name; $backup.Devices.AddDevice($Dest + $db.Name + "_full_" + $timestamp + ".bak", "File"); $backup.BackupSetDescription = "Full backup of " + $db.Name + " " + $timestamp; $backup.Incremental = 0; # Starting full backup process. $backup.SqlBackup($srv); # For db with recovery mode <> simple: Log backup. If ($db.RecoveryModel -ne 3) { $timestamp = Get-Date -format yyyy-MM-dd-HH-mm-ss; $backup = New-Object ("Microsoft.SqlServer.Management.Smo.Backup"); $backup.Action = "Log"; $backup.Database = $db.Name; $backup.Devices.AddDevice($Dest + $db.Name + "_log_" + $timestamp + ".trn", "File"); $backup.BackupSetDescription = "Log backup of " + $db.Name + " " + $timestamp; #Specify that the log must be truncated after the backup is complete. $backup.LogTruncation = "Truncate"; # Starting log backup process $backup.SqlBackup($srv); }; }; }; Write-Output ("Finished at: " + (Get-Date -format yyyy-MM-dd-HH:mm:ss));
powershell (ru), скрипт, sql (ru), sql (en)
- Просмотров: 9530
Вот тут - коллекция всех баз данных сервера. Можно их отфильтровать по условнию, например как-то так:
$databases = $srv.Databases | ?{$_.Name -like "*sample_name*"}
Сделать это надо перед 14й строкой, а в 14-й строке $srv.Databases заменить на $databases.
Только проверьте, что в $databases все правильно попало.