Etiket: backup

  • PowerShell SQL Server Backup Otomasyonu – Full Script

    PowerShell SQL Server Backup Otomasyonu – Full Script

    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ü?

    Özellik PowerShell Script Profesyonel Çö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
  • CMD ile Driver Yedek Alma

    CMD ile Driver Yedek Alma

    CMD ile Driver Yedekleme

    Merhaba bu yazımızda hiçbir program kullanmadan CMD ile driver yedek alma yöntemiyle bilgisayarınızın driverlarını nasıl yedeklersiniz onu anlatacağım.

    Öncelikle bu bizim ne işimize yarar ondan bahsedelim. Bilgisayarınıza format atmanız gerekiyor ve internet bağlantınız yok format sonrası driverlarınızı yükleyemeyeceksiniz. Böyle durumlarda bu CMD komutlarını kullanarak Windowsun DSIM komutu ile driverlarınızı format öncesi yedekleyip kurulumdan sonra yükleyebilirsiniz.

    • E sürücümüz varsa “Drivers” isimli bir klasör oluşturalım.
    • CMD yi yönetici olarak çalıştıralım. Ve aşağıdaki komutu yazıp uygulayalım.
    dism /online /export-driver /destination:D:Drivers

    Komutumuzda bulunan “E:Drivers”  yolu sürücü yedeklerimizin alınacağı klasördür. Bu yolu dilediğimiz gibi düzenleyebiliriz. Harici disk veya flash bellek de olabilir.

    CMD ile Driver Yedek Alma

    ” /online /export-driver “ komutu ile DSIM işletim sisteminiz içerinde bulunan “C:WindowsSystem32DriverStore” klasöründeki sürücüleri tarayarak yedekleme işlemini başlatır.

    CMD ile Driver

    Programsız Driver yedeklememizi bitirdikten sonra artık yeni bir Windows kurduğumuzda işletim sistemi için gerekli sürücülerimizi yedeklemiş olduğumuz sürücü klasöründen yükleyebiliriz.

    NOT: Bu yöntem Windows 7 sürümünde çalışmaz. Desteklenen sürümler Win8,Win10,Win11 dir.

    Aygıt yöneticisinde yüklü olmayan driverları yüklemek için dosya yolu kısmında yedeğin olduğu klasörü göstererek yapabilirsiniz. Umarım işinize yaramıştır. Herkese iyi çalışmalar dilerim. Kolay gelsin.