SQL Server Express Otomatik Yedekleme ve Rapor Maili Gönderimi

En Basit Haliyle SQL Server Express Otomatik Yedek Alma ve Otomatik Rapor Maili Gönderimi Nasıl Yapılır?

Bildiğiniz üzere SQL Server Express Edition sürümünde SQL Agent olmadığı için Scheduled Job oluşturamıyoruz. Yani otomatik yedek almak gibi bir kural tanımı yapılamıyor. Bunun için başka bir yazımda konu edeceğim SQL Backup araçları olmasına rağmen ben en çok bunu kullanmayı tercih ediyorum. Daha özelleştirilebilir ve uygulanması kolay.

Script, server üzerindeki tüm veritabanlarının yedeğini almak üzere kurgulandı. Siz bunu elbette özelleştirebilirsiniz.

Ayrıca yedekleme hedefiniz (harici disk,storage vs.) şişmesin diye belirttiğimiz gün sayısından eski yedekleri siliyor. Böylece son 10 günün yedeğini al diyebiliyorsunuz.

Script yedekleme işlemi hakkında text bir log dosyası oluşturuyor. İşlem her yapıldığında oluşturulan log dosyasını tanımladığınız mail adreslerine gönderebiliyor.

Evet şimdi bu scripti nasıl kullanabiliriz bir göz atalım ;

Script metnini kopyalayıp bir metin editöründe (tercihen notepad++) “otoyedek.sql” adında kaydedin.

Şimdide bu işlemi Windows Scheduled Tasks ile zamanlayalım.

DECLARE @path varchar(100)
DECLARE @day int
DECLARE @date varchar(30)
DECLARE @cmd varchar(250)
DECLARE @DeleteDate datetime

—- PARAMETRE TANIMLAMALARI —-
SET @path = ‘C:\SQLYEDEK’ — Backupların saklanacağı klasör yolu. (Sonunda slash(\) olmamalı)
SET @day = 5 — Verilen gün sayısından önceki backuplar silinir.
—- PARAMETRE TANIMLAMALARI —-

SET @date = CONVERT(varchar(16),GETDATE(), 120)
print ‘Server: ‘+@@servername +’ – ‘+ CONVERT(varchar(500),SERVERPROPERTY(‘productversion’)) +’ ‘+ CONVERT(varchar(500),SERVERPROPERTY(‘edition’)) +’
Date: ‘+ @date
print ”
SELECT @date = REPLACE(@date,’:’,”)
SELECT @date = REPLACE(@date,’ ‘,”)
SELECT @date = REPLACE(@date,’-‘,”)
SET @cmd = ‘IF DB_ID(”?”)<>2 BACKUP DATABASE [?] TO DISK = ”’ + @path + ‘\?_backup_’ + @date + ‘.bak” WITH INIT, RETAINDAYS = ‘ + CONVERT(varchar(10),@day)
EXEC sp_msforeachdb @cmd
SET @DeleteDate = DateAdd(day, -@day, GetDate())
EXECUTE master.sys.xp_delete_file 0, @path, N’bak’, @DeleteDate, 0
GO

SQLCMD komutumuzu yazıyoruz. Servera bağlanıp kaydettiğimiz scripti çalıştıracak ve sonucunu C:\SQLYEDEK\Log klasörüne yazacak.  Bu komutuda “otoyedek.cmd” isminde bir command file’a kaydediyoruz.

SQLCMD -S localhost -E -i otoyedek.sql -o C:\SQLYEDEK\Log\otoyedek.log

Şimdi de bu cmd dosyasını windows scheduled task ‘a ekliyoruz.

Unutmayın! Task sql serverda backup alabilecek yetkiye sahip bir kullanıcı tarafından çalıştırılmalıdır.

cmd ekleme

Test için sağ tıklayıp RUN diyoruz. Log çıktısı şöyle;

——————————–

Server: TestServer – 10.50.2500.0 Express Edition (64-bit)
Date: 2011-11-10 09:33

Processed 376 pages for database ‘master’, file ‘master’ on file 1.
Processed 2 pages for database ‘master’, file ‘mastlog’ on file 1.
BACKUP DATABASE successfully processed 378 pages in 0.644 seconds (4.584 MB/sec).
Processed 184 pages for database ‘model’, file ‘modeldev’ on file 1.
Processed 2 pages for database ‘model’, file ‘modellog’ on file 1.
BACKUP DATABASE successfully processed 186 pages in 0.265 seconds (5.468 MB/sec).
Processed 1840 pages for database ‘msdb’, file ‘MSDBData’ on file 1.
Processed 5 pages for database ‘msdb’, file ‘MSDBLog’ on file 1.
BACKUP DATABASE successfully processed 1845 pages in 1.579 seconds (9.125 MB/sec).
Processed 21304 pages for database ‘AdventureWorks’, file ‘AdventureWorks_Data’ on file 1.
Processed 1 pages for database ‘AdventureWorks’, file ‘AdventureWorks_Log’ on file 1.
BACKUP DATABASE successfully processed 21305 pages in 8.230 seconds (20.224 MB/sec).
Processed 416 pages for database ‘Northwind’, file ‘Northwind’ on file 1.
Processed 1 pages for database ‘Northwind’, file ‘Northwind_log’ on file 1.
BACKUP DATABASE successfully processed 417 pages in 0.277 seconds (11.761 MB/sec).

——————————–

Eğer bu çıktının mail olarak gönderilmesini istersek BLAT toolunu kullanabiliriz.

Bunun için http://www.blat.net adresinden son versiyonu indirin.

Alternatif Link » https://yadi.sk/d/F3Prx-3y3DrMn3

İndirdiğiniz .zip/.rar dosyasının içindeki Full klasöründeki tüm dosyaları biraz önce kaydettiğimiz cmd dosyasının bulunduğu dizine kopyalayın.

Ve CMD dosyasında sqlcmd komutumuzun altına şu komutları yapıştırın. (Komutu kendi sistem bilgileriniz ile güncelleyin)

——————————–

@ECHO OFF
set RECEPLIST=<Gönderilecek Mail Adresi>
set SMTPSERVER=<SMTP Server Adresi>
set BLAT=”<BLAT.EXE Dosya yolu>\blat.exe”

for /f %%i in (‘dir /b C:\SQL_Backup\Log\*’) do (
%blat% -t %RECEPLIST% -server %SMTPSERVER% -f %computername%@DOMAINADI.com -s “SQL Backup” -bodyF C:\SQL_Backup\Log\%%i
)

——————————–

Artık yedeklerimiz otomatik alınacak ve ardından işlem sonucu mail adresinize gönderilecektir.

Leave a Comment

Your email address will not be published.