11 Mayıs 2017 Perşembe

PowerShell Script Dili Kullanarak SQL Server Yedekleme

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.

Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...