[SQL]SQL Server Express透過 工作排程 + sqlcmd 來完成資料庫的備份

當您的SQL Server是Express版本,要如何做資料庫備份呢?
我們可以透過 工作排程 + sqlcmd 來完成哦!

最近有台SQL Server Express需要備份資料庫,但因為Express版不能使用Agent(其實可透過其他非Express版本的SQL Server Agent來備份它也可以)。

所以可以透過Windows的工作排程器 + sqlcmd 來完成資料庫的備份。

1.準備要備份的Script,如下,

SET QUOTED_IDENTIFIER OFF
SET NOCOUNT ON

PRINT 'Process Name :  Full SQL Server System & Application DBs Backup  to BAK file'

DECLARE 
  @FIRST_BACKUP INTEGER,
  @DB_NAME VARCHAR(128),
  @CMD_LINE VARCHAR(512),
  @BACKUP_PATH VARCHAR(64),
  @DB_REOCVERY_MODE NVARCHAR(128),
  @DB_STATUS NVARCHAR(128)


-- Must change @BACKUP_PATH
-- 指定存放備份檔的路徑
SET @BACKUP_PATH = 'E:\DB_Backup\'


--取得要備份的資料庫資料,一些練習用的資料庫可以不用備份
DECLARE SERVER_DB_CURSOR CURSOR
FOR
SELECT 
  name
  ,convert(nvarchar(128),(DATABASEPROPERTYEX ( name , 'Recovery' )))
  ,convert(nvarchar(128),(DATABASEPROPERTYEX ( name , 'Status' )))   
FROM master..sysdatabases (nolock)
WHERE name != 'tempdb' and name != 'pubs' and name != 'Northwind'  and name != 'model'
ORDER BY dbid

 
-- 開始依CURSOR 執行備份
 
OPEN SERVER_DB_CURSOR
FETCH NEXT FROM SERVER_DB_CURSOR INTO @DB_NAME, @DB_REOCVERY_MODE, @DB_STATUS

WHILE ( @@FETCH_STATUS != -1 )
  BEGIN
    SELECT "Backup Process Begin At" = GETDATE(), "Backup DB Is " = @DB_NAME

    IF ( @DB_STATUS = 'ONLINE' )
      BEGIN
        IF (@DB_REOCVERY_MODE = 'SIMPLE')
          BEGIN
            SELECT @CMD_LINE = 'BACKUP DATABASE ' + @DB_NAME + ' TO DISK = ' + '''' + @BACKUP_PATH + @DB_NAME + '.BAK' + '''' + ' WITH INIT, SKIP'
            PRINT (@CMD_LINE)
            EXEC (@CMD_LINE)
          END
        ELSE
          BEGIN
            SELECT @CMD_LINE = 'BACKUP DATABASE ' + @DB_NAME + ' TO DISK = ' + '''' + @BACKUP_PATH + @DB_NAME + '.BAK' + '''' + ' WITH INIT, SKIP'
            PRINT (@CMD_LINE)
            EXEC (@CMD_LINE)
            SELECT @CMD_LINE = 'BACKUP LOG ' + @DB_NAME + ' TO DISK = ' + '''' + @BACKUP_PATH + @DB_NAME + '.TRN' + '''' + ' WITH INIT, SKIP'
            PRINT (@CMD_LINE)
            EXEC (@CMD_LINE)
          END
      END
    SELECT "Process End at" = GETDATE()
    FETCH NEXT FROM SERVER_DB_CURSOR  INTO @DB_NAME, @DB_REOCVERY_MODE, @DB_STATUS
  END

CLOSE SERVER_DB_CURSOR
DEALLOCATE SERVER_DB_CURSOR

SET QUOTED_IDENTIFIER ON
SET NOCOUNT OFF
GO

 

2.建立sqlcmd(sqlcmd用法請參考:使用 sqlcmd 執行 Transact-SQL 指令碼檔案 )的command檔(比如我存成RunDBBackup.cmd,設定要執行的script file 及 輸出的檔名),如下,

sqlcmd -i d:\backup.sql -o E:\DB_Backup\result.txt

PS.這裡可試著執行看看是否OK,沒問題的話,就可以透過 工作排程器 建立工作。

 

3.透過 工作排程器 建立工作,如下,

image

image

image

image

image

image

image

設定完成後,可以執行看看是否OK!

 

image

image

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^