SQL Server Express Scheduled Backup Alma ve Rapor Gönderimi
Merhaba;
Bilindiği üzere SQL Server Express Editionda SQL Agent bulunmuyor. Yani herhangi bir Scheduled Job oluşturamıyoruz.
Ve bazen canlı sistemlerde de express edition kullanabiliyoruz.
Ben scheduled backup işlemi için bir script hazırladım; Bu script server üzerindeki tüm veritabanlarının (sistem veritabanları da dahil) yedeğini alıp, verilen gün sayısından eski backup dosyalarını siliyor. Bu şekilde disk boyutunu da kontrol altında tutmuş oluyoruz. Yedekleme sonucunu da bir log dosyasına yazıyor. Ve istersek logu mail olarak verdiğimiz adreslere atıyor.
Hazırladığım scripti “SQLCMD” ile Windows Scheduled Tasks ile zamanlayacağız. Aşağıdaki scripti "backup.sql" adında bir dosyaya kaydedelim.
DECLARE @path varchar(100)
DECLARE @day int
DECLARE @date varchar(30)
DECLARE @cmd varchar(250)
DECLARE @DeleteDate datetime
---- PARAMETRE TANIMLAMALARI ----
SET @path = 'C:\SQL_Backup' -- 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:\SQL_Backup\Log klasörüne yazacak. Bu komutuda "SQLBackup.cmd" isminde bir command file'a kaydediyoruz.
SQLCMD -S localhost -E -i backup.sql -o C:\SQL_Backup\Log\SQLBackup.log
Şimdi de bu cmd dosyasını windows scheduled taske ekliyoruz. Task sql serverda backup alabilecek yetkiye sahip bir kullanıcı tarafından çalıştırılmalıdır.

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. İndirdiğiniz .zip dosyasının içindeki Full klasöründeki tüm dosyaları biraz önce kaydettiğimiz cmd dosyasının blunduğ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 backuplar otomatik alınacak ve ardından işlem sonucu mail adresinize gönderilecektir.