Bildiğiniz gibi SQL
Server Express kullanıcıları için backupları otomatikleştirmek çok büyük
problemdir. Bugün sizlere bu backupları otomatikleştirecek bir powershell
uygulamasından bahsetmek istiyorum.
Bildiğiniz gibi
DBAler için bir çok işlemi otomatikleştirmek çok önemlidir. Aşağıdaki
PowerShell scripti değiştirerek sadece Backup işlemlerini değil bir çok işlemi
otomatik hale getirebiliriz. Bunlara örnek olarak upgrade işlemi, hotfix veya
service pack işlemleri olabilir.
Öncelikle powershell
scriptimizi yazıyoruz. Bunun için Windows PowerShell ISE kullanabiliriz. Sonra
bu dosyayı kaydediyoruz.
param(
$serverName,
$backupDirectory,
$daysToStoreBackups
)
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") |
Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") |
Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") |
Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") |
Out-Null
$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server") $serverName
$dbs = $server.Databases
foreach ($database in $dbs | where
{ $_.IsSystemObject
-eq $False })
{
$dbName = $database.Name
$timestamp = Get-Date -format
yyyy-MM-dd-HHmmss
$targetPath = $backupDirectory + "\"
+ $dbName + "_"
+ $timestamp + ".bak"
$smoBackup = New-Object ("Microsoft.SqlServer.Management.Smo.Backup")
$smoBackup.Action
= "Database"
$smoBackup.BackupSetDescription
= "Full Backup of " + $dbName
$smoBackup.BackupSetName
= $dbName + "
Backup"
$smoBackup.Database
= $dbName
$smoBackup.MediaDescription
= "Disk"
$smoBackup.Devices.AddDevice($targetPath, "File")
$smoBackup.SqlBackup($server)
"backed up $dbName ($serverName) to $targetPath"
}
Copy-Item C:\Backup\Backups\* Z:\SQLYEDEKLEME
Get-ChildItem "$backupDirectory\*.bak" |? { $_.lastwritetime -le
(Get-Date).AddDays(-$daysToStoreBackups)} |% {Remove-Item $_ -force }
"removed all previous backups older
than $daysToStoreBackups days"
Dosyamız dışarıdan 3
tane parametre alacak. Çalıştıracağımız zaman 3 tane parametre gönderiyoruz.
Bunlar ServerName adını verdiğimiz SQLSERVER Instance Name, Backup alacağımız
Directory ve Backupları saklama günümüz.
powershell C:\Backup\Tools\Backup.ps1 -serverName
"SQLSERVER" -backupDirectory "C:\Backup\Backups"
-daysToStoreBackups 2 >> C:\Backup\Logs\%date%.log
Ben
scripte ayrıca yedekleri diğer bir storage kopyaladığım için Copy-Item scriptinide ekledim.