SQL Express Edition Backup Job
SQL Express Edition Backup Job , agent olmadığından dolayı job, alert, mail gibi araçları kullanamıyoruz. Bu özellikleri kullanabilmemiz için SQL Server Express Edition dışında ki Editionları kullanmamız gerekmektedir ya da Powershell, .bat uzantılı dosyalar gibi araçları kullanarak Windows üzerinden Job,alert veya mail gibi olayları yapmamız gerekmektedir. Bu makale de .bat uzantılı dosya ve Task Scheduler yardımı ile SQL Express sürümünde Job tanımlayacağız.
Backup Job’ı tanımlamak için ilk başta procedure oluşturacağız.
USE [master] GO /****** Object: StoredProcedure [dbo].[BackupAllDBs] Script Date: 01/15/2017 15:01:34 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE PROCEDURE [dbo].[BackupAllDBs] -- Add the parameters for the stored procedure here AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @p_path VARCHAR(250) SET @p_path='D:\backup\' --- burada backup alınacak path belirtiliyor. --SET @p_path='C:\Backup\2012' SET NOCOUNT ON; DECLARE @dateString CHAR(12) DECLARE @dayStr CHAR(2) DECLARE @monthStr CHAR(2) DECLARE @hourStr CHAR(2) DECLARE @minStr CHAR(2) DECLARE @ident INT DECLARE @sql VARCHAR(1000) DECLARE @dbname VARCHAR(200) DECLARE @path VARCHAR(100) DECLARE @with VARCHAR(50) --month variable IF (SELECT LEN(CAST(MONTH(GETDATE()) AS CHAR(2))))=2 SET @monthStr=CAST(MONTH(GETDATE()) AS CHAR(2)) ELSE SET @monthStr= '0' + CAST(MONTH(GETDATE()) AS CHAR(2)) --day variable IF (SELECT LEN(CAST(DAY(GETDATE()) AS CHAR(2))))=2 SET @dayStr=CAST(DAY(GETDATE()) AS CHAR(2)) ELSE SET @dayStr='0' + CAST(DAY(GETDATE()) AS CHAR(2)) --hour variable IF (SELECT LEN(DATEPART(hh, GETDATE())))=2 SET @hourStr=CAST(DATEPART(hh, GETDATE()) AS CHAR(2)) ELSE SET @hourStr= '0' + CAST(DATEPART(hh, GETDATE()) AS CHAR(2)) --minute variable IF (SELECT LEN(DATEPART(mi, GETDATE())))=2 SET @minStr=CAST(DATEPART(mi, GETDATE()) AS CHAR(2)) ELSE SET @minStr= '0' + CAST(DATEPART(mi, GETDATE()) AS CHAR(2)) --name variable based on time stamp SET @dateString=CAST(YEAR(GETDATE()) AS CHAR(4)) + @monthStr + @dayStr + @hourStr + @minStr --========================================================================================== --Set @dateString = '' --path variable Backup Path SET @path = @p_path + replace(@@SERVERNAME,'\','_') +'_' print @path SELECT @ident=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND NAME NOT IN ('ReportServer$SQLTEST1','ReportServer$SQLTEST1TempDB') WHILE @ident IS NOT NULL BEGIN SELECT @dbname = NAME FROM SYS.DATABASES WHERE database_id = @ident /*Change disk location here as required*/ /*Database Backups FULL */ SELECT @sql = 'BACKUP DATABASE ['+@dbname+'] TO DISK = '''+@path+@dbname+'_db_'+ @dateString +'D.BAK''' EXEC (@sql) SELECT @ident=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND database_id>@ident AND NAME NOT IN ('TEMPDB'); END END GO
Yukarıdaki scripti çalıştırdıktan sonra backup procedürümüzü oluşturduk ve Master\Programmability\Stored Procedures sekmesinin altında prosedürü gördükten sonra SQL Server Management Studio üzerinden bazı konfigürasyonları yapıyoruz ve ”.Bat” uzantılı dosya hazırlayıp bunu belli aralıklarla çalıştırmak için Windows ile beraber gelen Task Scheduler(görev zamanlayıcısı) kullanmamız gerekiyor.
Başlamadan önce SQL üzerinden procedure çalıştıracağımız için aşağıda ki konfigürasyonları yapmamız gerekir.
sp_configure 'Show advanced options',1 reconfigure; sp_configure 'xp_cmdshell',1 reconfigure;
Yeni not defteri açarak aşağıda ki scripti yazıyoruz.
SQLCmd -S .\SQLEXPRESS -Q “Execute master.dbo.BackupAllDBs”-S parametresinden sonra backup alınmasını istediğiniz instance adını aşağıda ki script yardımıyla öğrenerek yazıyoruz.
select @@SERVICENAME
-Q parametresi ise çalıştırılacak Sql scriptini belirtir.
Not defterine bunu yazdıktan sonra aşağıda ki şekilde uzantısı “.bat” olacak şekilde değiştirerek kaydediyoruz.
Task Scheduler (Görev Zamanlayıcı)
Task Schedular(Görev Zamanlayıcısı) kullanarak oluşturduğumuz “.bat” uzantılı dosyamızı belirli aralıklarla çalıştıracağız.
Task Schedular(Görev Zamanlayıcısı)’nı açtıktan sonra Görev Zamanlayıcısı sekmesini üstüne gelerek Görev oluştur sekmesine tıklıyoruz.
Açılan pencere de Görev adını yazıyoruz ve Güvenlik seçeneğinde aşağıda ki gibi ikinci seçeneği işaretleyerek devam ediyoruz.
Yukarıdaki sekme de Tetikleyiciler kısmına geliyoruz ve hangi aralıklarla çalışacağını belirtiyoruz.Burada istediğiniz zamanlarla başlatabilirsiniz ben her gün 10:09 başlayacak şekilde ayarlama yapıyorum.
Eylem kısmına gelerek oluşturduğumuz “.bat” uzantılı dosyayı burada belirtiyoruz.
Bu işlem tamamladıktan sonra tamam diyerek çıkıyoruz ve görev tanımlamamız bitmiş oluyor.
İşlemler bittikten sonra Backup görevimiz oluşturulmuş mu kontrol edelim. Görev Zamanlayıcı Kitaplığını tıklıyoruz ve görevimiz oluşturulmuş. Sağlıklı şekilde çalışıp çalışmadığını kontrol etmek için el ile başlatalım.
Çalıştırdıktan sonra procedürün içinde belirttiğimiz path’e backup alınmış mı kontrol edelim.
Yukarı da görüldüğü üzere SQLEXPRESS instancen da bulunan veritabanlarının hepsinin Backup’ı alınmış.
Bazen iş yoğunluğundan dolayı backupları kontrol edemiyoruz.Sonra ki makalem de SQL Express Edition da en son ne zaman backup alındığını mail atması için gerekli ayarlamaları yapıyoruz.