• 将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就可以了。
  • 相关阅读:
    C语言inline函数(转)
    C++ 输入ctrl+z 不能再使用cin的问题
    VMware无法识别USB设备
    python manage.py 命令
    求二叉树的最小深度
    Vim的分屏功能(转)
    一些Python的惯用法和小技巧:Pythonic
    Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs)
    Docker(十四)-Docker四种网络模式
    Docker(十三)-Docker save and load镜像保存
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/525139.html
Copyright © 2020-2023  润新知