19 Kasım 2007 Pazartesi

SQL SERVER 2005 EXPRESS EDITON' da OTOMATİK YEDEKLEME

Son güncelleme tarihi: 17 Kasım 2007


Merhaba arkadaşlar,

Bu makalede sizlere anlatmak istediğim şey SQL Server 2005 Express Edition' da otomatik yedekleme sisteminizi nasıl oluşturabileceğiniz olacak.

SQL Server 2005 Express Edition, SQL Server 2005 serisinin ücretsiz sürümüdür. Aynen SQL Server 2000' deki MSDE gibi. Fakat SQL Server 2005' in altyapısıyla ve fazladan özelliklerle. Meselâ artık veritabanı boyutu sınırı 2GB değil, 4GB.

SQL Server 2005 Express Edition' da otomatik olarak yedek almak isteyeceğiniz zaman muhtemelen ilk önce SQL Server Agent servisinin olmadığını göreceksiniz. Belki bazıları da otomatik yedekleme ve diğer işlemler için Maintanence Plan' ı arayacaklar; fakat SQL Server Agent olmadığı için, bunu da bulamayacaklar.

SQL Server Agent servisi, SQL Server 2005' in Workgroup, Standard, Developer ve Enterprise sürümleriyle geliyor sadece. Ayrıca SQL Server 2005 Express Edition' da, SSIS (SQL Server Integration Services) da yok. SSIS, SQL Server 2000' deki DTS (Data Transformation Services)' in ardılı. Fakat SSIS tamamen baştan yazılmıştır ve DTS' e kıyasla çok güçlüdür. Visual Studio ile tamamen entegre edilmiştir.

Sonradan SQL Server 2005 Express Edition' ın bir versiyonu daha çıktı, bu da SQL Server 2005 Express Edition with Advanced Services. Bu sürümde, SQL Server 2005 Express Edition' a oranla bazı yeni özellikler var; fakat bunda da SQL Server Agent yok.

Not: Bu özelliklerden burada bahsetmeyeceğim, çünkü konumuzun dışında.

Peki bu yukarıda anlattıklarım, eğer SQL Server 2005 Express Edition kullanıyorsak zamanlanmış \ otomatik (Scheduled) yedek alamayacağımız anlamına mı geliyor? Tabii ki hayır! Her zaman bir yol vardır =)

Meselâ şöyle bir yol kullanabilirsiniz:

- Almak istediğiniz yedek ile ilgili bir T-SQL Script' i oluşturun.
- Script' i SQLCMD' ye aktararak, orada çalıştırın.
- Windows Zamanlanmış Görevler (Windows Scheduled Tasks) kullanarak bir görev zamanlayın.

T-SQL Script' ine örnek:
BACKUP DATABASE [test_2000] TO DISK = N'c:\test\test.bak' WITH NOFORMAT, INIT, NAME = N'test_2000-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO

Not: BACKUP komutu hakkında daha fazla bilgi almak için aşağıdaki adresi ziyaret edebilirsiniz:
http://msdn2.microsoft.com/en-us/library/ms186865.aspx

Not: T-SQL Script' inizi pratik yoldan oluşturmak:
SQL Server 2005 ile birlikte neredeyse her arayüz penceresinde Script' leme gibi bir özellik var. Meselâ aşağıdaki çizdiğim yolu takip ederseniz bunu göreceksiniz.

- SQL Server Management Studio Express Edition' ı çalıştırın. SQL Server Instance' ınıza bağlanın.
- Yedeğini almak istediğiniz veritabanı üzerinde farenin sağ tuşuna tıklayın ve açılan menüden de "Tasks" ardından da "Back Up..." öğelerine tıklayın.
- Açılan "Back Up Database" penceresinde gerekli yedekleme ayarlarınızı yaptıktan sonra, aynı pencerenin en üstünde yer alan iki düğme göreceksiniz. Bunlar: "Script" ve "Help" düğmeleridir.
- "Script" düğmesinin hemen yanındaki aşağı ok düğmeciğine tıklayın ve "Script Action to File" öğesini seçin. Sizden Script dosyasını bir yere kaydetmenizi isteyecek. Bu dosyayı, almak istediğiniz yedeği otomatikleştirmek için kullanacağız. Ona göre bir yere saklayın.

Not: Benim örneğimde ben bu dosyayı "c:\Test" klasörü altında "OtoYedek.sql" olarak saklayacağım.

- İsterseniz dosyayı kaydettikten sonra gidip dosyanın içeriğine bakabilir ve değiştirebilirsiniz.

SQLCMD:
SQLCMD.exe, SQL Server 2000' deki ve SQL Server 2005' dte de geriye dönük destek vermek için hâlâ bulunan OSQL.exe' nin halefi. Bu komut satırı uygulaması ile, SQL Server Instance' ınızda işlemler yapabilirsiniz. Meselâ biz bu makalemizde yukarıdaki örnekte oluşturduğumuz OtoYedek.sql dosyasını SQLCMD ile birlikte çalıştıracağız. SQLCMD uygulamasını da Windows Zamanlanmış Görevler ile çalıştıracağız ve böylece otomatik yedek almış olacağız.

Peki oluşturduğumuz OtoYedek.sql dosyasını SQLCMD ile nasıl çalıştıracağız? Şöyle:
- Bir komut satırı açın (Başlat\Çalıştır metin kutusuna "cmd" yazın ve Tamam düğmesine tıklayın.)
- Komut satırını açtıktan sonra, OtoYedek.sql dosyamız ile SQLCMD' nin nasıl çalıştığını görmek için şu komutu yazın: "SQLCMD -S Ekrem-PC\SQLEXPRESS -E -i C:\Test\OtoYedek.sql"

Not: Bu komuttaki -S anahtarı Sunucu adını temsil ediyor. Bendeki sunucu adı "Ekrem-PC". Ayrıca kullandığım SQL Server Instance' ı bir "Named Instance". Eğer Default Instance olsaydı, o zaman sadece sunucu adını yazmam yeterli olacaktı. -E anahtarı ise Güvenli Bağlantı (yani Windows Authentication' ı) ' yı temsil ediyor. Eğer SQL Server' da yetkilendirme için Windows Authentication değil de, SQL Server Login kullanıyorsanız o zaman -E anahtarını kullanmayı, -U anahtarı ile kullanıcı adınızı, -P anahtarı ile de şifrenizi girmeniz gerekecek. -i anahtarı ise, kullanmak istediğimiz T-SQL Script dosyasının yolunu tarif etmek içindir.

- Yukarıda vermiş olduğum satırı çalıştırdıktan sonra, Eğer siz de benimle aynı yoldan gittiyseniz, aynı isimli klasör ve dosyaları kullandıysanız (ki daha önceden "C:\Test" klasörünü oluşturmuş olmanız gerekiyor, yoksa hata alırsınız) "C:\Test" klasöründe "test.bak" isimli bir dosyanın oluştuğunu göreceksiniz.

Not: SQLCMD hakkında daha fazla bilgi edinmek istiyorsanız ve diğer anahtarlarını da öğrenmek istiyorsanız, komut satırındayken "SQLCMD - ?" yazıp Enter tuşuna basabilirsiniz.

Şimdi sıra Windows Zamanlanmış Görevler' e geldi.

Zamanlanmış Görevler:
- Denetim Masası \ Zamanlanmış Görevler
- Zamanlanmış Görev Ekle
- Zamanlanmış Görev Sihirbazından: Gözat düğmesine tıklayın ve SQLCMD dosyasın bulun (Benim test makinemdeki yeri ve varsayılan yeri örnek olarak şöyledir: "C:\Program Files\Microsoft SQL Server\90\Tools\Binn")
- İhtiyacınıza göre zamanı ayarlayın,
- Görevin çalışmasını sağlayacak ve yeterli yetkilere sahip bir kullanıcı hesabının bilgilerini girin
- Görevi oluşturduktan sonra görevin özelliklerine girin ve Çalıştır mtin kutusundaki "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.exe" yazan satıra, yukarı kullandığımız anahtarları da ekleyin. (Örn: "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.exe -S Ekrem-PC\SQLEXPRESS -E -i C:\Test\OtoYedek.sql"


Özet:
Özetle, Windows Görev Zamanlayıcısından zamanladığınız görevi, SQLCMD' nin yazdığınız TSQL Script' ini çalıştırması için kullanarak veritabanınıza ait veri ve log dosyalarının yedeklerini alabilirsiniz.

"Neden veritabanı dosyalarımın (mdf, ndf, ldf vs.) yedeklerini doğrudan NTBackup ile alamıyorum?" diye sorabilirsiniz, alamazsınız çünkü kullanımda olan veritabanı dosyaları kopyalanamaz. Bu işlem için ilk önce veritabanının bağını çözmeniz (Detach) gerekir. Bu da, veritabanınızın bir süreliğine de olsa kullanılamaz hale gelmesi demektir. Ayrıca yedekleme sistemini otomatikleştirmesiyle de alâkası yoktur ve hiç pratik değildir.


Ekrem Önsoy

4 yorum:

UfukArt dedi ki...

Üstadım çok teşekkürler... Faydalı ve pratik bir uygulama...

ali haydar dedi ki...

Peki yedeği klasöre sürekli aynı dosya ismiylemi alıyor yoksa yıl, gün, ay ve saat bilgileriyle her birine farklı bir isim mi veriyor

ali haydar dedi ki...

Dosya isimlerini yıl, gün, ay ve saat bilgileriyle verdiği soya ismiylemi kaydediyor peki?

Ekrem Önsoy dedi ki...

T-SQL Script' ine örnek:
BACKUP DATABASE [test_2000] TO DISK = N'c:\test\test.bak' WITH NOFORMAT, INIT, NAME = N'test_2000-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO


Yukarıdaki adımdaki örnek en temel ve sade haliyle yazıldı. Bu Script'teki dosya adı bölümüne elbette tarih bilgisi de eklenebilir, böylece her dosya eşsiz olur ve üst üste yazılmaz. Tabii ki bu durumda da diskin dolmasını engellemek için gerekli tedbirlerin alınması atlanmamalı.