PowerShell SQL Server Backup Otomasyonu – Full Script

Tolga CEYHAN
7 Min Read
PowerShell SQL Server Backup

PowerShell SQL Server Backup Otomasyonu – Full Script

PowerShell SQL Server backup otomasyonu, kurumsal ortamlarda SQL Server veritabanlarının düzenli, tutarlı ve geri yüklenebilir şekilde yedeklenmesini sağlayan en pratik yöntemlerden biridir. Özellikle birden fazla SQL Server instance bulunan yapılarda, PowerShell SQL Server backup yaklaşımı ile yedekleme sürecini script tabanlı ve merkezi yönetilebilir hale getirmek mümkündür.

PowerShell SQL Server backup yaklaşımıyla, tüm SQL yedekleme sürecini script tabanlı, sürüm kontrol edilebilir ve merkezi yönetilebilir hale getirmek mümkündür. Özellikle birden fazla SQL Server instance bulunan ortamlarda bu yaklaşım ciddi operasyonel avantaj sağlar.

Bu yazıda, tek script ile tüm SQL veritabanlarını yedekleyen, log tutan ve zamanlanabilir profesyonel bir PowerShell SQL Server backup otomasyonu hazırlayacağız.

Neden PowerShell tabanlı SQL yedekleme ?

Kurumsal ortamlarda SQL Server yedekleme stratejisi yalnızca “backup alınıyor mu?” sorusuyla sınırlı değildir. Asıl önemli olan; yedeklerin güvenli, izlenebilir, geri yüklenebilir ve standart olmasıdır.

SQL Server Agent job’ları zamanla aşağıdaki problemleri doğurabilir:

  • Job’ların GUI üzerinden yönetilmesi

  • Standart dışı yapılandırmalar

  • Versiyon kontrolünün zor olması

  • Hata ve log takibinin dağınık hale gelmesi

PowerShell SQL Server backup otomasyonu ile:

  • Tüm SQL Server’larda aynı script kullanılabilir

  • Değişiklikler Git ile versiyonlanabilir

  • Loglama merkezi hale gelir

  • Otomasyon süreçleri dokümante edilir

Neden SQL Server Agent Yerine PowerShell?

SQL Server Agent job’ları küçük ve tekil ortamlarda iş görse de, kurumsal yapılarda yönetimi zorlaşır. Farklı sunucularda farklı job’lar oluşur ve zamanla bu job’ların kim tarafından oluşturulduğu, ne amaçla çalıştığı belirsizleşir.

PowerShell tabanlı SQL Server backup yaklaşımı:

  • Taşınabilir

  • Okunabilir

  • Otomasyon sistemlerine entegre edilebilir

Bu sayede yedekleme süreci kişiye bağımlı olmaktan çıkar, kurumsal bir standarda dönüşür.

PowerShell ile SQL Server Yönetiminin Sağladığı Avantajlar

PowerShell SQL Server backup otomasyonu sayesinde:

  • Tüm veritabanlarını otomatik yedekleyebilirsiniz

  • Yedekleri tarih damgalı klasörlerde saklayabilirsiniz

  • Detaylı log dosyaları oluşturabilirsiniz

  • Windows Task Scheduler ile tamamen otomatik bir yapı kurabilirsiniz

Bu yapı özellikle lab, test ve küçük–orta ölçekli üretim ortamlarında son derece etkilidir.

Ön Gereksinimler

SQL Server yedekleme script’ini kullanmadan önce aşağıdaki bileşenlerin hazır olması gerekir:

  • PowerShell 5.1 veya üzeri

  • SQL Server Management Studio (SSMS) veya SMO bileşenleri

  • Yedeklerin yazılacağı yeterli disk alanı (örneğin D:\SQLBackups)

  • Script’i çalıştıran kullanıcının SQL Server üzerinde sysadmin yetkisine sahip olması

SMO nesnelerini kullanacağımız için aşağıdaki .NET assembly’leri yüklenecektir:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null

PowerShell ile SQL Server Backup Otomasyon Script’i

PowerShell SQL Server backup otomasyonu script örneği

 

Aşağıdaki script:

  • Belirtilen SQL instance’a bağlanır

  • tempdb hariç tüm veritabanlarını FULL backup alır

  • Günlük tarihli klasörler oluşturur

  • Her veritabanı için .bak dosyası üretir

  • Log dosyasına tüm işlemleri yazar

⚠️ Script aynen korunmuştur.

<#
.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"
)

$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"

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null

$Server = New-Object Microsoft.SqlServer.Management.Smo.Server $SqlInstance
$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ı."

Bu script’i örneğin C:\Scripts\SqlFullBackup.ps1 olarak kaydedebilirsin.

Script Nasıl Çalışır? (Adım Adım)

Script çalıştığında önce tarih bazlı bir backup klasörü oluşturur. Ardından SMO nesneleri aracılığıyla SQL Server instance’a bağlanır ve sistem veritabanları hariç tüm veritabanlarını listeler.

Her veritabanı için ayrı bir .bak dosyası oluşturulur, checksum doğrulaması yapılır ve tüm işlemler log dosyasına yazılır. Bu yapı, hem manuel hem de zamanlanmış çalışmalarda sürecin izlenebilir olmasını sağlar.

PowerShell SQL Server Yedekleme Neden Her Senaryoda Yeterli Değildir?

PowerShell SQL Server backup script’leri güçlüdür ancak her üretim senaryosu için yeterli değildir.

Bu script örneğinde:

  • Backup dosyaları şifrelenmemektedir

  • Yedekler yalnızca local disk üzerinde tutulmaktadır

  • Ransomware, disk arızası veya silinme senaryolarına karşı ek koruma yoktur

Bu nedenle PowerShell SQL Server backup otomasyonu genellikle ilk katman çözüm olarak değerlendirilmelidir.

Sık Karşılaşılan PowerShell SQL Backup Hataları ve Çözümleri

Access Denied Hatası
Script’i çalıştıran kullanıcının SQL Server üzerinde sysadmin yetkisi kontrol edilmelidir.

Backup Device Failure
Yedek alınan diskte yeterli boş alan yoksa backup başarısız olur.

SMO Assembly Load Error
SMO bileşenleri yüklü değilse script çalışmaz. SSMS veya SQL Feature Pack kurulmalıdır.

Bu hataların log dosyasında tutulması, özellikle zamanlanmış görevlerde kritik öneme sahiptir.

PowerShell Script mi, Profesyonel SQL Backup Çözümü mü?

ÖzellikPowerShell ScriptProfesyonel Çözüm
Encryption
Monitoring
Cloud / Offsite
Merkezi Yönetim

PowerShell script’leri lab ve küçük ortamlar için idealdir. Ancak büyük ve kritik sistemlerde profesyonel SQL backup çözümleri tercih edilmelidir.

Zamanlanmış Görev ile Otomatik Çalıştırma

Script’i her gece saat 02:00’de çalıştırmak için:

schtasks /create /sc daily /st 02:00 /tn "SQLFullBackup" /tr "powershell.exe -File C:\Scripts\SqlFullBackup.ps1"

Bu sayede PowerShell kullanarak SQL Server backup otomasyonu tamamen insan müdahalesi olmadan çalışır.

PowerShell tabanlı SQL yedekleme, SQL altyapısını daha standart, dokümante, versiyonlanabilir ve kolay yönetilebilir hale getirir. Script tabanlı yaklaşım, otomasyon kültürünü güçlendirir ve operasyonel hataları azaltır.

Ancak üretim ortamlarında güvenlik, izleme ve felaket kurtarma senaryoları mutlaka profesyonel çözümlerle desteklenmelidir. Bu script, sağlam bir temel sunarak SQL Server yönetiminde otomasyonun ilk adımını oluşturur.

PowerShell ve SQL Server yönetimi konusunda resmi ve güncel dokümantasyonlara erişmek, script tabanlı çözümlerin doğru ve güvenli şekilde uygulanması açısından önemlidir. Microsoft tarafından sağlanan resmi kaynaklar, PowerShell SQL Server backup senaryoları için referans niteliğindedir.

Detaylı Bilgi İçin Microsoft Learn
Bu makaleyi paylaş
Takip et:
Tolga CEYHAN, bilgi teknolojilerini severek takip eder ve BT üzerine hali hazırda aktif olarak çalışmaktadır. 2006 yılından 2017 yılına kadar web tasarım yazılım üzerine çalışmalar yaptım. Şuan ise Windows Sistem ve Sistem Güvenliği alanında çalışmalarımı sürdürmekteyim.
Yorum Yap

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir