Microsoft Azure

SQL Server Database Yedeklerini Azure Blob Storage Üzerine Alma

Merhaba,

Bu makalede SQL Server Database’lerinin yedeklerinin otomatik olarak Azure Blob Storage’a nasıl alındığını anlatıyor olacağım.

Herhangi bir felaket ya da saldırı sonunda veri kaybeden firmalara baktığımızda eskiden yedeklerinin olmadığını görüyorduk. Şimdilerde ise  yedekler var ancak bir şekilde offline ya da bulut yedeği olmadığı için yedek almasına rağmen yedeklerinin de olmadığını görüyoruz.

İşte bu noktada Azure Blob Storage üzerine alınacak yedekler bir alternatif olabilir. Burada yedekler default olarak 7 gün olarak saklanmakta, istenirse 35 güne kadar saklanabilmektedir.

Siz hem yerel sunucunuza hem de Azure Blob Storage üzerine yedek alabilirsiniz.

Başlayalım

Şimdi sıfırdan bir Azure blob storage oluşturarak işe başlayalım.

Azure portalda arama ekranına storage yazıyoruz ve storage accounts’u seçiyoruz.

Karşımıza önceden oluşturduğumuz storage account’lar var ise onların listesi geliyor.

Biz Create diyerek yeni bir storage account oluşturacağız.

Burada Resource Group’u defaultta bırakabiliriz. Ayrıca storage account name kısmına bir isim vermemiz gerekiyor. Bu isim size özel olacağı için kendinize göre bir isim verebilirsiniz. Ben backupstorageomer ismini verdim.

Basic bir işlem yaptığımız için advanced sekmesini default değerlerinde bırakabiliriz.

Networking kısmını da default değerlerinde bırakıyoruz.

Data protection kısmında bazı parametreler var.Burada days to retain deleted  Blobs, containers ve shares kısmında herhangi bir silinme durumunda 7 güne kadar silinen datayı tutabiliyoruz. Burada bu parametreyi değiştirebiliriz.

Create diyerek Storage Account’umuzu oluşturuyoruz.

Deployment işlemi tamamlandı. Şimdi go to resource diyoruz.

Gelen ekranda containers’a tıklayarak yeni bir container oluşturacağız.

Burada sqlbackup isimli bir container oluşturuyoruz. Public Access level kısmını private olarak seçiyoruz.

Upload butonuna tıklayarak bir dosya upload edelim.

Görüldüğü gibi bir dosyayı upload edebildik.

Ama bizim amacımız SQL backuplarını buraya otomatik olarak aldırmak. Bunun için Backupstorageomer isimli storage account umuza tekrar gidiyoruz ve burada Access Keys linkine tıklıyoruz. Burada bir key oluşturacağız ve sunucumuz bu key vasıtası ile yedeklerini Azure Blob’a alacak.

Karşımıza çıkan ekranda keyleri görebilmek amacı ile Show keys butonuna tıklıyoruz.

Burada örneğin ilk sıradaki key i kopyalayalım ve management studio ya geliyoruz.

Burada bir Credential oluşturuyoruz ki SQL Server bunu kullanarak Azure Blob üzerine yedek alabilsin.

CREATE CREDENTIAL AzureBlobCredential 
WITH IDENTITY = 'backupstorageomer' , 
SECRET = '4yCO9Gv7S3RVbep*********************************************************';

Şimdi yedek alma işlemini yapabiliriz. Tabi  biz yedeğimizi artık yerel diske almayıp doğrudan Azure üzerine aldığımız için

“backup database to disk” değil “backup database to url” komutunu kullanacağız. Tabi ihtiyacımız olan şey bir de URL.

Bu URL’i aşağıdaki gibi alabilirsiniz.

Önce containers’a tıklıyoruz.

Sonra oluşturduğumuz container’a tıklıyoruz.

Properties’e tıklıyoruz.

URL’miz göründü.

Örneğin benim hesabım için olan URL aşağıdaki gibi.

https://backupstorageomer.blob.core.windows.net/sqlbackup

Bu container’a yedek almak için aşağıdaki script güzel olacaktır. Bu scriptte URL alanımız nasıl oluşturduğumuzu yukarıda gösterdim.

Şimdi Azure Portal’dan container’ımıza bakalım. Görüldüğü gibi 207 MB’lık AdventureWorks database imizin yedeği alınmış ve buraya yüklenmiş durumda.

Şimdi de management studio dan bakalım.

Önce management studio üzerinden connect Azure Storage diyoruz.

Sign In diyerek Azure account umuz ile login oluyoruz.

Storage Account ve container bilgileri de geldi.

Görüldüğü gibi container’ın içeriğini burada görebiliyoruz.

Otomatik backup planı oluşturma

Buraya kadar basitçe bir Azure Blob Storage Account oluşturup burada oluşturduğumuz container’a nasıl yedek alacağımızdan bahsettik. Şimdi ise bu işi nasıl otomatik şekilde alacağımızdan bahsediyor olacağım. Bu işi yapmanın bir yolu maintanance plan kullanmak ancak ben burada script ile yapıyor olacağım.

OIması gerekenler şu şekilde.

  • Sistem periyodik olarak yedek almalıdır. (O zaman bir job işimizi görecektir.)
  • Sistem istenilen her database için yedek almalıdır. (Bunun için bir procedure oluşturup dbname parametresini kullanabiliriz.)
  • Sistem her alınan yedek için DBAdı_YYYYMMDD_HHMMSS.bak şeklinde dosya oluşturmalıdır. (Bunu da script ile yapabiliriz)
  • Sistem eski yedekleri silmelidir. (Bu işlemi bizim yerimize Azure Blob Storage yapabilir. Zira en başa dosyaları tutma süresi olarak 7 gün belirlemiştik.)
  • İnternet üzerine yedek aldığımız için sistem sıkıştırarak yedek almalıdır. (SQL Backup komutunda Compression parametresini kullanabiliriz.)

Aşağıdaki stored procedure bu amaçları karşılamaktadır.

Procedure scriptini burada bulabilirsiniz.

Şimdi de bu procedure’ü kullanarak Azure’a yedek alalım.

Exec BackupToAzureBlob 'AdventureWorks'

Yedek alma işlemi yaklaşık 30 saniye sürdü. Şimdi portala bakalım.

Görüldüğü gibi dosya adı db adı, tarih ve saat bilgisi ile oluştu. Ayrıca sıkıştırma parametresi kullanıldığı için 207 MB 48 MB’a inmiş durumda.

Şimdi de management studio’dan bakalım. Burada da yedek dosyamız görülmekte.

Şimdi bir job oluşturalım iki database imizi Azure’a günde iki kez yedek alacak şekilde ayarlayalım.

Bunun için önce SQL Server Agent’a gidiyoruz ve yeni bir job oluşturuyoruz.

Job’ımızın ismini Backup to Azure Blob olarak giriyoruz.

Steps kısmına geliyoruz ve new step diyoruz.

Oluşturduğumuz yeni adıma Backup to Azure Blob ismini veriyoruz ve command kısmında yedek almak istediğimiz databaselerimizi

Exec BackupToAzureBlob 'AdventureWorks'
Exec BackupToAzureBlob 'Test'

Şeklinde yazıyoruz.

Schedule kısmına gelip new diyoruz ve günde 2 kez çalışacak şekilde bir schedule tanımlıyoruz.

Başka bir makalede görüşmek dileğiyle.

Sağlıcakla…

İlgili Makaleler

5 Yorum

Bir yanıt yazın

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

Başa dön tuşu