SQL Server數據庫備份(異機)

簡單的遠程異機備份數據庫功能,經過這個存儲過程,講遠程其餘機器上的數據庫備份到本地。其主要原理爲:sql

1.經過XP_CMDSHELL執行Windows命令,將本機的共享目錄映射爲遠程機器的網絡驅動器。數據庫

2.經過SQL腳本將數據庫備份到網絡驅動器中。網絡

3.經過XP_CMDSHELL執行命令刪除映射的網絡驅動器。dom

使用的時候注意開啓XP_CMDSHELL配置(見存儲過程註釋部分)。spa

/******************************************************************************************************
**  功能:遠程異機備份數據庫
**  做者:Danny,Li
**  日期:2013-09-04
**    ---------------------------------------------------------------------------------------------------
**    eg:EXEC [proc_RemoteBackupDB] 'DataBaseName','\\DannyPc\ShareFolder','domain\danny','123456'
**    
*******************************************************************************************************/
CREATE PROCEDURE [dbo].[proc_RemoteBackupDB]
    @databaseName varchar(50),            -- 須要備份的數據庫名稱
    @shareFolderPath varchar(250),        -- 共享目錄路徑(如:\\DannyPc\ShareFolder)
    @shareFolderAccount varchar(50),    -- 共享目錄讀寫權限賬戶名(如:domain\danny)
    @shareFolderPassword varchar(50)    -- 共享目錄讀寫權限賬戶密碼
AS
BEGIN
    -- 啓用 XP_CMDSHELL 配置
    --SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 1
    --RECONFIGURE
    --GO
    --SP_CONFIGURE 'XP_CMDSHELL', 1
    --RECONFIGURE
    --GO
    
    DECLARE @sqlStr VARCHAR(1000);
    
    -- 映射網絡驅動器
    SET @sqlStr = 'EXEC MASTER..XP_CMDSHELL ''NET USE L: '+ @shareFolderPath +' "'+ @shareFolderPassword +'" /USER:'+ @shareFolderAccount +''';';
    
    -- 備份數據庫
    DECLARE @BackupFile VARCHAR(200);
    SET @BackupFile = @databaseName + CONVERT(VARCHAR(100), GETDATE(), 12) + '.BAK';
    SET @sqlStr = @sqlStr + ' BACKUP DATABASE '+ @databaseName +' TO DISK = ''L:\'+ @BackupFile +''' WITH INIT;';
    
    -- 刪除網絡驅動器映射
    SET @sqlStr = @sqlStr + ' EXEC MASTER..XP_CMDSHELL ''NET USE L: /DELETE'';';
    
    -- 執行SQL語句
    PRINT(@sqlStr);
    EXEC(@sqlStr);
END
相關文章
相關標籤/搜索