摘要:[SQL]手動設定SQL排成備份
常常會遇到客戶要用免費版的SQL Server,
這時會遇到一個狀況是無法排程備份,
但是用另一種方式卻可以達到同樣的效果,
首先在要備份的Server下執行一個Procedure,
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_BackupDatabase]
@databaseName sysname, @backupType CHAR(1)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sqlCommand NVARCHAR(1000)
DECLARE @dateTime NVARCHAR(20)
SELECT @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),111),'/','') +
REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')
IF @backupType = 'F'
SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +
' TO DISK = ''C:\Backup\' + @databaseName + '_Full_' + @dateTime + '.BAK'''
IF @backupType = 'D'
SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +
' TO DISK = ''C:\Backup\' + @databaseName + '_Diff_' + @dateTime + '.BAK'' WITH DIFFERENTIAL'
IF @backupType = 'L'
SET @sqlCommand = 'BACKUP LOG ' + @databaseName +
' TO DISK = ''C:\Backup\' + @databaseName + '_Log_' + @dateTime + '.TRN'''
EXECUTE sp_executesql @sqlCommand
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_BackupDatabase]
@databaseName sysname, @backupType CHAR(1)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sqlCommand NVARCHAR(1000)
DECLARE @dateTime NVARCHAR(20)
SELECT @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),111),'/','') +
REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')
IF @backupType = 'F'
SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +
' TO DISK = ''C:\Backup\' + @databaseName + '_Full_' + @dateTime + '.BAK'''
IF @backupType = 'D'
SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +
' TO DISK = ''C:\Backup\' + @databaseName + '_Diff_' + @dateTime + '.BAK'' WITH DIFFERENTIAL'
IF @backupType = 'L'
SET @sqlCommand = 'BACKUP LOG ' + @databaseName +
' TO DISK = ''C:\Backup\' + @databaseName + '_Log_' + @dateTime + '.TRN'''
EXECUTE sp_executesql @sqlCommand
END
有個要注意的地方是Procdure中的C:\Backup\,可以改成要備份的目錄夾,記得要先建立資料夾,然後執行這個Procedure,
接著建立一個SQL Script,在此範例為Backup.sql,裡面內容如下:
sp_BackupDatabase '資料庫名稱', 'F'
GO
QUIT
GO
QUIT
接下來就是新增排程的方法,
(1)「開始\所有程式\附屬應用程式\系統工具\排定的工作」,新增一個新的排程,按「下一步」
(2)隨意選擇任一個應用程式
(3)選擇排程名稱和執行的區間
(4)設定執行時間
(6)再來這裡才是重點,當新增完成後,再去對已新增的排程按兩下滑鼠左鍵,如圖
這裡分成兩部分處理(如圖示的1,2),
1.要把server名稱打上,而後面的D:\DB_BACKUP\Backup.sql,則為前面存放那個SQL Script的位置
2.開始的位置則為SQL執行工具的位置,需檢查一下是否與本機相同
sqlcmd -S Server名稱 -E -i D:\DB_BACKUP\Backup.sql
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn"
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn"
若要測試是否成功,可以對那個排程按下滑鼠右鍵,選「執行」,若有產生備份檔,就表示成功