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:
- 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.
- Klik Dua Kali (Double Klik) Add Scheduled Task.
- Dalam Wizard Scheduled Task, klik Next.
- Klik Browse, klik file batch yang Anda buat pada langkah B, dan kemudian klik Open.
- Ketik SQLBACKUP untuk nama tugas, klik Daily, dan kemudian klik Next.
- Tentukan informasi untuk jadwal untuk menjalankan tugas. (Sebaiknya Anda menjalankan tugas ini minimal satu kali setiap hari.) Kemudian, klik Next.
- 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.
- Klik Next, dan kemudian klik Finish.
- 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 :)