Neden PowerShell SQL Server Backup Otomasyonu?
Kurumsal ortamlarda SQL Server veritabanlarının düzenli ve tutarlı şekilde yedeklenmesi kritik bir ihtiyaçtır. Bunu sadece SQL Server Agent job’larına bıraktığınızda karmaşık yapılar ve GUI bağımlılığı ortaya çıkabilir.
Powershell sql server backup yaklaşımıyla, tüm SQL yedekleme sürecini script tabanlı ve sürüm kontrol edilebilir hale getirmek mümkündür.
PowerShell ile SQL Server yönetimi sayesinde:
Tüm veritabanlarını otomatik yedekleyebilir,
Yedekleri tarih damgalı klasörlerde saklayabilir,
Log dosyası oluşturabilir,
Windows Task Scheduler ile zamanlanmış backup sistemi kurabilirsiniz.
Bu yazıda, tek script ile tüm SQL veritabanlarını yedekleyen profesyonel bir otomasyon hazırlayacağız.
Ön Gereksinimler
PowerShell SQL Server backup script’ini kullanmadan önce aşağıdaki bileşenlerin hazır olması gerekir:
SQL Server Management Studio (SSMS) veya SMO bileşenlerinin kurulu olması
PowerShell 5.1 veya üzeri
Yedeklerin yazılacağı disk alanı (örneğin
D:\SQLBackups)Script’in çalıştığı kullanıcı hesabının SQL Server üzerinde yeterli yetkiye sahip olması (genellikle
sysadmin)
SMO nesnelerini kullanacağımız için aşağıdaki .NET assembly’leri yüklenecek:
PowerShell ile SQL Server Backup Otomasyon Script’i
Aşağıdaki script:
Belirlediğiniz SQL instance’a bağlanır
tempdbhariç tüm veritabanlarını FULL backup alırHer gün için tarihli klasör oluşturur
Her veritabanı için
.bakdosyası üretirLog dosyasına işlemleri yazar
<#
.SYNOPSIS
PowerShell SQL Server backup otomasyon script’i
.DESCRIPTION
Belirtilen SQL instance üzerindeki tüm veritabanlarını (tempdb hariç)
günlük klasörlere FULL backup olarak yedekler ve log dosyası oluşturur.
#>
param(
[string]$SqlInstance = "localhost\SQLEXPRESS",
[string]$BackupRoot = "D:\SQLBackups"
)
# Log ayarları
$DateTag = Get-Date -Format "yyyyMMdd"
$BackupPath = Join-Path $BackupRoot $DateTag
$LogFile = Join-Path $BackupPath "BackupLog_$DateTag.txt"
if (-not (Test-Path $BackupPath)) {
New-Item -Path $BackupPath -ItemType Directory | Out-Null
}
function Write-Log {
param([string]$Message)
$time = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$time - $Message" | Out-File -FilePath $LogFile -Append
}
Write-Log "PowerShell SQL Server backup işlemi başlatıldı. Instance: $SqlInstance"
# SMO assembly'lerini yükle
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
# SQL Server'a bağlan
$Server = New-Object Microsoft.SqlServer.Management.Smo.Server $SqlInstance
# Veritabanlarını listele
$Databases = $Server.Databases | Where-Object { $_.IsSystemObject -eq $false -and $_.Name -ne "tempdb" }
foreach ($Db in $Databases) {
try {
$DbName = $Db.Name
$BackupFile = Join-Path $BackupPath ("{0}_{1}.bak" -f $DbName, $DateTag)
Write-Log "Veritabanı yedekleme başlıyor: $DbName"
$Backup = New-Object Microsoft.SqlServer.Management.Smo.Backup
$Backup.Action = "Database"
$Backup.Database = $DbName
$Backup.Devices.AddDevice($BackupFile, "File")
$Backup.Initialize = $true
$Backup.Checksum = $true
$Backup.ContinueAfterError = $false
$Backup.SqlBackup($Server)
Write-Log "Yedekleme tamamlandı: $DbName -> $BackupFile"
}
catch {
Write-Log "HATA: $DbName için yedekleme başarısız. Ayrıntı: $($_.Exception.Message)"
}
}
Write-Log "Tüm veritabanları için PowerShell SQL Server backup işlemi tamamlandı."
Write-Host "Backup işlemi tamamlandı. Ayrıntılar log dosyasında: $LogFile"Zamanlanmış Görev ile Otomatik Çalıştırma
Script’i her gece saat 02:00’de otomatik çalıştırmak için Windows Task Scheduler üzerinden aşağıdaki komutu kullanabilirsiniz:
Bu sayede powershell kullanarak sql server backup otomasyonu tamamen insan müdahalesi olmadan çalışır hale gelir.
Diğer Powershell Scriptler İçin Yazılar
Detaylı Bilgi İçin Microsoft Learn
https://learn.microsoft.com/en-us/sql/powershell/sql-server-powershell?view=sql-server-ver16
https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/backup-database-transact-sql?view=sql-server-ver16
https://learn.microsoft.com/en-us/sql/ssms/scripting/sql-server-management-objects-smo-programming?view=sql-server-ver16
Bu makalede, powershell yardımıyla sql server backup sürecini tam otomasyonla nasıl yöneteceğini gördün. SMO kullanarak tüm veritabanlarını FULL backup alabilir, günlük klasörlere tarihli yedekler oluşturabilir, log dosyası tutabilir ve Task Scheduler ile bu süreci tamamen otomatik hale getirebilirsin.
Bu yaklaşım, SQL Server altyapını daha standart, dokümante, versiyonlanabilir ve kolay yönetilebilir hale getirir. Bir sonraki powershell script serisinde görüşürüz.

