将SQL Server远程服务器的数据库备份到目标机(转)

来源:互联网 发布:数据库开发前景 编辑:程序博客网 时间:2024/05/16 04:15
将SQL Server远程服务器的数据库备份到目标机(转)

使用前,必须在目标机上开通一个可写访问的共享文件夹。
存储过程内容如下:
CREATE PROCEDURE Sp_Backup_To_Remote
        (
                @Database VARCHAR(128), -- 要备份的数据库名  
                 @RemoteIP VARCHAR(15), -- 备份到目标机的IP地址  
                 @ShareName VARCHAR(128), -- 目标机的共享名  
                 @SharePath VARCHAR(128), -- 目标机的共享中的路径,将备份到这里  
                 @UserName VARCHAR(20), -- 连接目标机共享的用户,此用户必须具有对该共享的写权限  
                 @Password VARCHAR(20), -- 连接目标机共享的密码  
                 @BackupFile VARCHAR(128) -- 备份到目标机的文件名 
        )
        AS
        DECLARE @ResultINT
        DECLARE @ErrorMessageVARCHAR(512)

        /** 添加使用的备份设备 */
        -- 备份设备名称
 
        DECLARE @DeviceNameVARCHAR(128)
        SET @DeviceName = @UserName+ '@' + @RemoteIP + '/' + @ShareName + '/' + @SharePath+ '/'
        -- 备份设备路径 
        DECLARE @DevicePathVARCHAR(512)
        SET @DevicePath ='//' + @RemoteIP+ '/' + @ShareName + '/' + @SharePath + '/' + @BackupFile
        -- 添加备份设备 
        EXEC @Result =Sp_AddumpDevice 'Disk' , @DeviceName, @DevicePath 
        IF @Result = 1
        BEGIN
                SET @ErrorMessage ='添加备份设备失败。名为 ' +'''' + @DevicePath+ '''' + ' 的物理设备已经存在,为保证成功备份,请手工删除 master.dbo.sysdevices 表中列phyname值为 '+ '''' + @DevicePath + '''' + ' 的设备。'  
                RAISERROR (@ErrorMessage, 16, 1)
                RETURN 0
        END

        /** 添加共享连接 */
        -- 添加共享连接命令
 
        DECLARE @AddShareVARCHAR(512)
        SET @AddShare ='NET USE //' + @RemoteIP+ '/' + @ShareName + ' ' + @Password + ' /USER:' + @UserName + '@' + @RemoteIP
        -- 执行添加共享连接 
        EXEC @Result =xp_cmdshell @AddShare
        IF @Result = 1
        BEGIN
                SET @ErrorMessage ='添加共享连接失败,备份失败。'
                RAISERROR (@ErrorMessage, 16, 1)
                RETURN 0
        END

        /** 备份数据库 */
        BACKUP DATABASE @DatabaseTO @DeviceName
        
        /** 删除共享连接 */
        -- 删除共享连接命令
 
        DECLARE @DeleteShareVARCHAR(512)
        SET @DeleteShare ='NET USE //' + @RemoteIP+ '/' + @ShareName + ' /DELETE' 
        -- 执行删除共享连接 
        EXEC @Result =xp_cmdshell @DeleteShare
        IF @Result = 1
        BEGIN
                SET @ErrorMessage ='删除共享连接失败。'
                RAISERROR (@ErrorMessage, 16, 1)
                RETURN 0
        END

        /** 删除使用的备份设备 */
        EXEC @Result =Sp_DropDevice @DeviceName
        IF @Result = 1
        BEGIN
                SET @ErrorMessage ='删除备份设备失败。请手工删除 master.dbo.sysdevices 表中列phyname值为 '+ '''' + @DevicePath + '''' + ' 的设备。'
                RAISERROR (@ErrorMessage, 16, 1)
                RETURN 0
        END
        PRINT'命令完成。'

        RETURN 1
        GO


  调用这个存储过程,那就很方便了,可以在目标机上(可以是本地),也可以在远程服务器上,当然也可以是别的机子,只不过,在目标机或本地或别的机子上调用这个存储过程时,要为远程服务器添加一个SQL Server注册,然后使用<这个注册名>.master.dbo.Sp_Backup_To_Remote就可以了。

原创粉丝点击