SQL Express'ten Scheduled Backup Almak

0 dakikada yazıldı

25594 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.