SQL Server数据库备份(异机)

简单的远程异机备份数据库功能,通过这个存储过程,讲远程其他机器上的数据库备份到本地。其主要原理为:

1.通过XP_CMDSHELL执行Windows命令,将本机的共享目录映射为远程机器的网络驱动器。

2.通过SQL脚本将数据库备份到网络驱动器中。

3.通过XP_CMDSHELL执行命令删除映射的网络驱动器。

使用的时候注意开启XP_CMDSHELL配置(见存储过程注释部分)。

/******************************************************************************************************

**  功能:远程异机备份数据库

**  作者: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

 

你可能感兴趣的:(SQL Server)