SQL Express'ten Scheduled Backup Almak

0 dakikada yazıldı

25353 defa okundu

Düzenle

Blogu yazarkenki hikayalerim bitmiyor değil mi? :) Eh uzun süredir rahat rahat her noktasındaki taktiklerden bahsedebileceğim kendimce özgür bir proje yazdım :) Genelde müşterilere yapınca projelerin içlerinden birşeyler paylaşmak mümkün olmuyor. Neyse gelelim konumuza. Şimdi benim blog arkada bir SQL 2008 R2 Express kullanıyor. SQL'in Express sürümleri ile beraber bir Agent yapısı gelmiyor ve Schedulede Backup almak doğal olarak dert oluyor. Bunun için ufak bir takniği devreye alıp Windows'un kendi Scheduler'ını kullanabiliriz aslında. Nasıl mı?

[T-SQL]

declare @DBFileName varchar(256)  \ \ set @DBFileName = 'C:\backups\myblog\' + datename(dd, getdate()) + \         datename(m, getdate()) + datename(yy, getdate()) + '-MyBlog.bak'\ select @DBFileName\                        \ BACKUP DATABASE myblog TO  DISK = @DBFileName \ WITH RETAINDAYS = 30, NAME = N'Blog Backup', SKIP\ \ GO

İlk olarak yukarıdaki gibi bir T-SQL komutunu bir text dosyasına yazıp diskte güzel bir yere yerleştiriyoruz. Bu T-SQL içerisindeki komut ile veritabanından bir full backup alınacak diskte uygun klasöre tarih bilgisi dosya adı olarak atanarak yerleştiriliyor. Ben çılgınlık yapıp günlük backup alıyorum :) Backup file'ların ayrı ayrı olmasını istedim çünkü başka bir scheduled task bu dosyalardan her gün yaratılan ayrı bir FTP sunucuya atıyor. Dediğim gibi eğer bu kodu ayrı bir dosyaya kaydettiyseniz sıra geldi eski tarz bir BAT dosyası yaratmaya.

[BAT]

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S .\SQLExpress -i C:\backups\backup.sql

Bat dosyamız içerisindeki komut SQL Server ile beraber gelen SQLCMD.EXE'ye instance adını ve çalıştırılacak T-SQL komutlarının bulunduğu dosyanın adresini veriyor. Böylece bu komut çalıştırıldığında bizim SQLExpress'te biraz önce kaydettiğimiz dosyadaki T-SQL çalıştırılarak istediğimiz yere backup alınmış olacak. Şimdi sıra geldi bu BAT dosyasının Windows Scheduler ile ayarlanmasına.

Server'da Task Scheduler diye aratırsanız hemen bulup ayar ekranını karşınıza getirebilirsiniz. Task Scheduler Library içerisindeki sağ panelden "Create Task" diyerek aşağıda ekrana ulaşabiliyoruz.

Task'ı Login olmasak da çalışacak hale
getirelim.Task'ı Login olmasak da çalışacak hale getirelim.

Task'ın ayarlarının bulunduğu ilk "General" sekmesinde "Run whether user is logged or not" diyerek logon olmuş olmasak da taskın çalıştırılmasını sağlıyoruz. Bu task artık sizin kullanıcı adınız ve şifrenizi de kaydederik sizin kullanıcınızın hakları ile login olmasanız da çalışacak.

Task'ımızın ne zaman çalışacağına karar
verelim.Task'ımızın ne zaman çalışacağına karar verelim.

Ayarlar kısmında ikinci sekme olan "Triggers"a girdiğimiz hemen "New" düğmesine basıp yeni bir tetikleyici ayarlayabiliyoruz. Burada ne zaman ve ne aralıklarla taskın çalıştırılacağını belirtebilirsiniz. Eğer siz de benim gibi günlük backup alacaksanız sitenizin en az ziyaret aldığı bir saat aralığını seçmenizde fayda var.

Task ne
yapacak?Task ne yapacak?

Son olarak artık taskımızın ne yapacağına karar vermemiz gerek. Çalıştırılacak program olarak BAT dosyamızı diskten taskımıza gösteriyoruz. Böylece belirlediğimiz aralıklarda BAT dosyamız çalışacak ve T-SQL'imiz de backup'ı almış olacak. Tüm yapmanız gereken bu kadar. Artık Scheduled bir backup process'iniz var hem de ücretsiz SQL Express ile ;)

Hepinize kolay gelsin.