19 Oca by Faruk Erdem

SQL Express Edition Backup Job

SQL Server Express Edition da 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.

 “.\” kendi localinizde ki instance’a bağlanmanız için kullanılır.

 

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

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir