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