-->

23 Oktober 2012

Bagaimana menjadwalkan dan mengotomatisasi backup database SQL Server di SQL Server atau SQL Server Express


Anda harus ikuti tiga langkah untuk mendukung database SQL Server Anda dengan menggunakan Windows Task Scheduler:

Langkah A: Gunakan SQL Server Management Studio atau SQL Server Management Studio Express atau SQLCMD untuk membuat prosedur yang tersimpan dalam database berikut master Anda:


USE [master] 
GO 
/****** Object:  StoredProcedure [dbo].[sp_BackupDatabases] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

-- ============================================= 
-- Author: Microsoft 
-- Create date: 2010-02-06
-- Description: Backup Databases for SQLExpress
-- Parameter1: databaseName 
-- Parameter2: backupType F=full, D=differential, L=log
-- Parameter3: backup file location
-- =============================================

CREATE PROCEDURE [dbo].[sp_BackupDatabases]  
            @databaseName sysname = null,
            @backupType CHAR(1),
            @backupLocation nvarchar(200) 
AS 

       SET NOCOUNT ON; 
           
            DECLARE @DBs TABLE
            (
                  ID int IDENTITY PRIMARY KEY,
                  DBNAME nvarchar(500)
            )
           
             -- Pick out only databases which are online in case ALL databases are chosen to be backed up
             -- If specific database is chosen to be backed up only pick that out from @DBs
            INSERT INTO @DBs (DBNAME)
            SELECT Name FROM master.sys.databases
            where state=0
            AND name=@DatabaseName
            OR @DatabaseName IS NULL
            ORDER BY Name
           
            -- Filter out databases which do not need to backed up
            IF @backupType='F'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
                  END
            ELSE IF @backupType='D'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE IF @backupType='L'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE
                  BEGIN
                  RETURN
                  END
           
            -- Declare variables
            DECLARE @BackupName varchar(100)
            DECLARE @BackupFile varchar(100)
            DECLARE @DBNAME varchar(300)
            DECLARE @sqlCommand NVARCHAR(1000) 
        DECLARE @dateTime NVARCHAR(20)
            DECLARE @Loop int                  
                       
            -- Loop through the databases one by one
            SELECT @Loop = min(ID) FROM @DBs

      WHILE @Loop IS NOT NULL
      BEGIN

-- Database Names have to be in [dbname] format since some have - or _ in their name
      SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'

-- Set the current date and time n yyyyhhmmss format
      SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' + REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')  

-- Create backup filename in path\filename.extension format for full,diff and log backups
      IF @backupType = 'F'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'D'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'L'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'

-- Provide the backup a name for storing in the media
      IF @backupType = 'F'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full backup for '+ @dateTime
      IF @backupType = 'D'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' differential backup for '+ @dateTime
      IF @backupType = 'L'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup for '+ @dateTime

-- Generate the dynamic SQL command to be executed

       IF @backupType = 'F' 
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
                  END
       IF @backupType = 'D'
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END
       IF @backupType = 'L' 
                  BEGIN
               SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END

-- Execute the generated SQL command
       EXEC(@sqlCommand)

-- Goto the next database
SELECT @Loop = min(ID) FROM @DBs where ID>@Loop

END



Langkah B: Dalam sebuah editor teks, membuat file batch yang bernama Sqlbackup.bat, dan kemudian menyalin teks dari salah satu contoh berikut ke dalam file tersebut, tergantung pada skenario Anda:

Contoh 1: Full backup semua database contoh didalam server dengan menggunakan Windows Authentication

// Sqlbackup.bat

SQL SERVER
sqlcmd -S . –E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"


SQL SERVER EXPRESS
sqlcmd -S .\EXPRESS –E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"


Contoh 2 : Differential backup semua database contoh didalam server dengan menggunakan SQL Login dan password

// Sqlbackup.bat
SQL SERVER
sqlcmd -U SQLLogin -P password -S . -Q "EXEC sp_BackupDatabases @backupLocation ='D:\SQLBackups', @BackupType='D'"

SQL SERVER EXPRESS
sqlcmd -U SQLLogin -P password -S .\SQLEXPRESS -Q "EXEC sp_BackupDatabases @backupLocation ='D:\SQLBackups', @BackupType='D'"

Catatan : SQL Login harus memiliki setidaknya peran Operator Backup di SQL Server.


Contoh 3 : Log backup semua database dalam hal nama lokal SQLEXPRESS dengan menggunakan Windows Authentication

// Sqlbackup.bat

SQL SERVER
sqlcmd -S . -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\',@backupType='L'"

SQL SERVER EXPRESS
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\',@backupType='L'"


Contoh 4 : Full backup DB USER database dalam contoh bernama SQL EXPRESS lokal dengan menggunakan Windows Authentication

// Sqlbackup.bat

SQL SERVER
sqlcmd -S . -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName=’darwanlns’, @backupType='F'"

SQL SERVER EXPRESS
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName=’darwanlns’, @backupType='F'"


Demikian pula, Anda dapat membuat cadangan diferensial darwanlns dengan menyisipkan di 'D' untuk @backupTypeparameter dan cadangan log darwanlns dengan menyisipkan dalam 'L' untuk @backupType parameter.


Langkah C : Jadwal pekerjaan dengan menggunakan Windows Task Scheduler untuk menjalankan file batch yang Anda buat di langkah B. Untuk melakukan hal ini, ikuti langkah berikut:

  1. Pada komputer yang menjalankan SQL Server Express, klik Start  arahkan ke All Programs  ke Accessories titik, arahkan ke System Tools, dan kemudian klik Scheduled Tasks.
  2. Klik Dua Kali (Double Klik) Add Scheduled Task.
  3. Dalam Wizard Scheduled Task, klik Next.
  4. Klik Browse, klik file batch yang Anda buat pada langkah B, dan kemudian klik Open.
  5. Ketik SQLBACKUP untuk nama tugas, klik Daily, dan kemudian klik Next.
  6. Tentukan informasi untuk jadwal untuk menjalankan tugas. (Sebaiknya Anda menjalankan tugas ini minimal satu kali setiap hari.) Kemudian, klik Next.
  7. Dalam Enter the user name  ketik nama pengguna, dan kemudian ketik password di kolom Enter the password.

    Catatan Pengguna ini setidaknya harus diberikan peran BackupOperator di tingkat SQL Server jika Anda menggunakan salah satu batch file dalam contoh 1, 3, atau 4.
  8. Klik Next, dan kemudian klik Finish.
  9. Jalankan tugas yang dijadwalkan setidaknya satu kali untuk memastikan bahwa cadangan berhasil dibuat.


Catatan folder untuk dieksekusi SQLCMD umumnya dalam variabel Path untuk server setelah SQL Server terinstal, tetapi jika variabel Path tidak mencantumkan folder ini, Anda dapat menemukannya di bawah <Install lokasi>\90\Tools\Bin (Untuk contoh: C:\Program Files\Microsoft SQL Server\90\Tools\ Bin).

Sadarilah berikut saat Anda menggunakan prosedur yang didokumentasikan dalam artikel ini:


  • Windows Task Scheduler layanan harus berjalan pada waktu itu pekerjaan dijadwalkan untuk berjalan. Kami menyarankan agar Anda mengatur jenis startup untuk service as Automatic  Hal ini memastikan bahwa layanan akan berjalan bahkan pada restart.
  • Harus ada banyak ruang pada drive yang backup sedang ditulis. Kami merekomendasikan bahwa Anda membersihkan file lama di folder backup secara teratur untuk memastikan bahwa Anda tidak kehabisan ruang disk. Script tidak mengandung logika untuk membersihkan file lama.



Selamat Mencoba :)

Tidak ada komentar:

Posting Komentar