Powershell ile SQL Yedeği Nasıl Alınır ? -DbaTools
  1. Anasayfa
  2. SQL Server

Powershell ile SQL Yedeği Nasıl Alınır ? -DbaTools

0

Bu makalede, Powershell’in gücünü ve açık kaynak olan DBATools modülünü kullanarak bir SQL Veritabanı Yedeğini nasıl alacağımızı inceleyeceğiz.

Her kuruluş, beklenmeyen aksama sürelerine karşı iş kaybını önlemek için bir Felaket Kurtarma planı hazırlamalıdır. Elektrik kesintisi, veri merkezi sorunları, siber saldırılar, doğal afet vb. olabilir. Bu tür olaylara hazırlamak için düzenli bir felaket tatbikatı yapmalıyız. Veritabanı yöneticileri de bu süreçlerde hayati rol oynamaktadır.

Herhangi bir veri kaybı olduğu durumda, veritabanı yedekleme yapınızın geçerli olduğuna ve geri dönüş senaryolarınızı hazır tutmanız gerekmektedir. Bu sebepten yedek almak ve yedekten dönme işlemleri farklı zamanlarda kontrol edilerek geri bu senaryo canlandırılmalıdır. Fakat belirli bir sıklıkta bu işlemi tekrarlamak bir zaman sonra sıkıcı olmaya başlayacaktır. Ayrıca bu geri dönüş senaryolarından sonra DBCC CHECKDB yaparak ilave bir tutarlılık kontrolüde yapmanız gerekiyor. Bu süreci özetleyecek olursak ;

  • Veritabanlarının düzenli olarak yedeklerinin alınması ve bu alınan yedekleri belirli periyotlarda geri yüklenmesi.
  • Geri yüklemeler sonrasında veritabanı tutarlılığının tespiti için DBCC CHECKDB işlemlerinin gerçekleştirilmesi.

SQL Server üzerinde yukarıdaki işlemleri gerçekleştirebilmek için T-SQL kodu yazabilir, Maintenance Plan oluşturabilir yada SSIS paketi hazırlayabilirsiniz. Fakat bu işlemleri gerçekleştirmek için ilave bilgiye ihtiyaç duyabilirsiniz. Bu bilgiye ihtiyaç duymadan veritabanı yedeklemesi (backup) ve geri yükleme (restore) işlemleri için DBATools kullanabilirsiniz. DBATools’u daha önce size bilgi vermiştim.

DBATools kullanmak için Azure Data Studio’da kullanabilirsiniz fakat biz Powershell üzerinden işlemlerimizi gerçekleştiriyor olacağız.

Powershell’i çalıştıyoruz. Get-Help komutunu kullanarak Backup geçen yapıları kontrol ediyoruz.

Resim-1

Yukarıdaki resimdeki gibi Get-Help *Backup* gibi basit bir kullanımı var.Eğer daha önce kullanmadıysanız Get-Help ile ilgili kendisini güncelleştirmek adına powershell kurulumlar gerçekleştirmek adına sizden onay istiyor. Benim gibi onay vererek işleme devam edebilirsiniz. Kurulumlarını tamamladıktan sonra uzunca bir liste gelecek, bizim ihtiyacımız modül bilgisi dbatools olan kısımlar, yani Resim-2 de göreceğiniz bölüm.

Resim-2

Gördüğünüz gibi içerisinde DBATools kullanarak içerisinde Backup geçen çok sayıda işlemi gerçekleştirecek function hazır.

Öncelikli olarak biz Get-DbaLastBackup komutunu kullanarak son veritabanı yedeklemeleri bir kontrol edelim. Tabi öncesinde yine Get-Help Get-DbaLastBackup komutunu çalıştırıp fonksiyonun nasıl çalıştığını öğrenelim.

Resim-3

Bu komutu örnek olarak ben kendi sunucumda çalıştıracağım.

Resim-4

Yukarıdaki resimde gibi bir çıktı ile daha önce hiç veritabanın yedeğini almadığımı görüyorum. Fakat ekran çıktısı çok hoşuma gitmediği için kullandığım Get-DbaLastBackup -SqlInstance localhost komutuna birde |Out-Gridview ekliyorum.

Resim-5

En azından yukarıdaki resim daha bir anlaşılır oldu. Şimdi ise hızlıca bir yedek alalım. Yedek almak için *Backup* dan dönenler içerisinde gördüğümüz Backup-DBaDatabase kullanacağız. Hemen bu komut için de yardım dosyasına bakalım.

Resim-6

Yardım dosyasının içeriğinde komutun kullanımı için ihtiyaç duyabileceğimiz herşey var aslında, Syntax şekli, örnek hazır komut kullanımları vs. Bu bilgilerden yola çıkarak ben yine localhost’um üzerinde var olan veritabanlarının yedeğini almak için aşağıdaki komutu yazıyorum.

Backup-DbaDatabase -SqlInstance localhost

Resim-7

Resimde gördüğünüz gibi çok basit bir komut kullanımı ile veritabanlarının yedeğini alıyorum. Buradaki en önemli kısım benim belirlediğim veritabanı yada veritabanları nereye alacağımı nasıl belirtebilirim ? Aslında bu sorunuzun cevabı da yardım dosyasındaki syntax içerisinde mevcut.

Öncelikli olarak istediğiniz bir veritabanı yedeğini nasıl alabilmeniz için ihtiyaç duyacağınız komutu paylaşayım. Aşağıdaki komut ile localhost üzerinde sadece master veritabanın yedeğini alırsınız.

Backup-DbaDatabase -SqlInstance localhost -Database master

Birden fazla veritabanı yedeğini almak isterseniz de aşağıdaki kod parçasını kullanabilirsiniz. ( master ve model veritabanları için yedek alır.)

Backup-DbaDatabase -SqlInstance localhost -Database master, model

Peki veritabanlarını belirledik ama nereye alacağımızı bildirmedik. Varsayılan olarak SQL Server Database Settings’de belirttiğiniz alana yedek almaktadır. Fakat değiştirmek isterseniz nasıl yapacaksınız ?

Aşağıdaki komut ile localhost’da bulunan master veritabanın yedeğini D:\SQLBackup dosya dizinine alabilirsiniz.

Backup-DbaDatabase -SqlInstance localhost -Database master -BackupDirectory D:\SQLbackup

Resim-8

Tekrar Get-DbaLastBackup komutunu kullanarak aldığımız yedekleri doğruluğunu kontrol edelim.

Resim-9

Komut kullanımında farklılık olarak Out-GridView ile sonuç kümesini grid yapısında görüntülenmesini sağladık.

Resim-10

Verileri kontrol ettiğimde sadece Full Backup aldığımı görüyorum, ben differantial yada log backup almak istesem nasıl alıyor olacağım? Veritabanı yöneticileri için diff ve log backup alabilmek tıpkı full backup alabilmek kadar önemlidir ve veritabanı yedekleme mimarisi içerisinde yer almalıdır.

DbaTools modülünü kullanarak full yedek aldığımız gibi aslında diff ve log backup da alabiliyoruz. Bunun için Backup-DbaDatabase komutu içerisinde Type parametresini kullanmamız gerekiyor.

Hemen bir örneğini yapalım ve localhost da MSHOWTO veritabanı için diff backup alalım. ( Tabi bu işlemi gerçekleştirebilmek için MSHOWTO veritabanın Full yedeğinin öncelikli olarak alınması gereklidir. Unutmayın!)

Backup-DbaDatabase -SqlInstance localhost -Database master -BackupDirectory D:\SQLBackup -Type Differential

Resim-11

Aklınıza hemen yedeğin aldığımız zamanın damgasını, veritabanı ismini, aldığımız veritabanı yedek türünün ne olduğunu gibi bilgilerin bulunduğu bir yedeği nasıl alabileceğiniz geldi değil mi ? Hadi hemen bu soruyu da cevaplayalım.

Zaman Damgalı, Farklı isimlendirmeli veritabanı yedeğini nasıl alabilirsiniz?

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName

Resim-12

Yukarıda gördüğünüz gibi yazdığımız komut ile işlemi başarılı bir şekilde gerçekleştirdik, fakat burada yeni gördüğümüz -ReplaceInName kullanımı var. Hemen açıklayayım. ReplaceInName ; backupfilename içindeki dizeleri gerçek değerlerle değiştirmek için bu komutu backup komutunda belirtmeliyiz. ReplaceInName kullanımı istediğimiz dbname,  timestamp bilgilerini aldığımız yedeğe verebildik. İsterseniz burada backuptype bilgisi de ekleyebilirdiniz. ( -BackupFileName instancename-dbname-backuptype-timestamp.bak )

Resim-13

Son olarak ise her bir veritabanını kendi isiminde bir klasöre yedeklemek isterseniz nasıl bir komut çalıştırmalısınız onu göstereyim. Aşağıdaki komutu çalıştıracak olursanız eğer localhost üzerinde MSHOWTO veritabanın D:\SQLBackup dosya yolunda MSHOWTO isimli bir klasör oluşturup yedeği onun içerisine almış olduğunu göreceksiniz.

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName -CreateFolder

Resim-14

Başarılı bir şekilde yedeği aldığını görüyoruz, fakat hemen kontrol edelim.

Resim-15

Gördüğünüz gibi D:\SQLBackup adresinde MSHOWTO isiminde bir klasör oluşturup bizim istediğimiz yedekleme isiminde başarılı bir yedek almış. Eğer dosya yolunda benzer isimli bir dosya var ise yeni bir klasör oluşturmaz ve sadece yedekleme işlemini gerçekleştirir.

Veritabanı yönetici olarak yedekleme işlemini gerçekleştirirken kullandığımız SQL Server versiyon bilgisine göre compress backup alabiliyoruz ve tabi ayrıca aldığımız yedeği doğruluğu içinde checksum ve verify ediyoruz. Bu işlemleri nasıl yapabiliriz bunları yapabilmeniz için ihtiyaç duyacağız kod blokları ise aşağıdaki gibidir.

Compress Backup ( Sıkıştırılmış backup ) almak için ;

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName -CreateFolder -CompressBackup

Aldığımız yedeğini doğruluğunu teyit etmek için ;

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName -CreateFolder                    –CompressBackup -Checksum -Verify

Yedekleme yapısını bozmadan CopyOnly backup almak için ;

Backup-DbaDatabase -SqlInstance localhost -Database MSHOWTO -BackupDirectory D:\SqlBackup -BackupFilename servername-instancename-dbname-timestamp.bak -ReplaceInName -CreateFolder                    –CompressBackup -Checksum -Verify -CopyOnly

Yukarıdaki komutlardan istediğiniz kullanıp ihtiyacınıza yönelik yedekleme şeklini belirleyebilirsiniz. Yedekleme ve aldığınız yedekten geri dönme konuları kuruluşunuz için çok büyük önem arz etmektedir. Powershell kullanarak SQL Server’da yedekleme ihtiyacınızı nasıl giderebileceğinizi anlattık,bir sonraki yazımda ise aldığımız bu yedekten nasıl geri dönebiliriz bunu anlatıyor oluruz. Yedeğe ihtiyaç duymayacağınız günleriniz olsun!

 

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
www.mshowto.org

www.fortinet.com

TAGs: dbatools, mshowto, otomatik yedek, powershell, powershell automation, powershell ile sql yedekleme, SQL Server

Bu İçeriğe Tepkin Ne Oldu?
  • 1
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Milenyumdan beri ilginç bir merak duygusu ile başlayan bilgisayar ve teknoloji dünyası merakı sayesinde eğitim yaşantımı doğup büyüdüğüm Düzce'de geçirdim. Sonrasında Düzce'nin kendimi geliştirmek adına yeterli imkanlara sahip olmadığından İstanbul'a gelip Bilge Adam Eğitim Kurumlarından Yazılım ve Veritabanı eğitimi aldım. Eğitimimi tamamlarken çeşitli Windows ve Web uygulamaları geliştirdim.Sırası ile Sentez Yazılım, Nebim Yazılım, Ciceksepeti, Doğan Holding, Kariyer.Net, TurkNet gibi firmalarında Yönetici / Müdür pozisyonlarında farklı ünvanlarda ( Yazılım Geliştirici / Raporlama ve Veritabanı Yöneticisi gibi) görev aldım. Şimdilerde ise DMC Bilgi Teknolojileri firmasının Kurucu Ortaklığını ve Veritabanı Danışmalığı Hizmeti vermekteyim.

Yazarın Profili
İlginizi Çekebilir

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

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