PowerShell SQL Server Backup Otomasyonu – Full Script

Tolga CEYHAN
4 Min Read
PowerShell SQL Server Backup

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:

[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

Aşağıdaki script:

  • Belirlediğiniz SQL instance’a bağlanır

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

  • Her gün için tarihli klasör oluşturur

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

  • Log 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"

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

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:

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 hale gelir.

Diğer Powershell Scriptler İçin Yazılar

Detaylı Bilgi İçin Microsoft Learn

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.

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