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

    技术2022-05-11  35

    将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 @Result INT         DECLARE @ErrorMessage VARCHAR(512)         /** 添加使用的备份设备 */         -- 备份设备名称          DECLARE @DeviceName VARCHAR(128)         SET @DeviceName = @UserName + '@' + @RemoteIP + '/' + @ShareName + '/' + @SharePath + '/'         -- 备份设备路径          DECLARE @DevicePath VARCHAR(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 @AddShare VARCHAR(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 @Database TO @DeviceName                  /** 删除共享连接 */         -- 删除共享连接命令          DECLARE @DeleteShare VARCHAR(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就可以了。


    最新回复(0)