将SQL Server远程服务器的数据库备份到目标机(转)
2009-07-10 11:19
363 查看
将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就可以了。
使用前,必须在目标机上开通一个可写访问的共享文件夹。
存储过程内容如下:
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
'命令完成。'
RETURN 1
GO
调用这个存储过程,那就很方便了,可以在目标机上(可以是本地),也可以在远程服务器上,当然也可以是别的机子,只不过,在目标机或本地或别的机子上调用这个存储过程时,要为远程服务器添加一个SQL Server注册,然后使用<这个注册名>.master.dbo.Sp_Backup_To_Remote就可以了。
相关文章推荐
- 将SQL Server远程服务器的数据库备份到目标机(转)
- SQL SERVER将远程服务器的数据库备份到本地文件夹
- sql server 文件夹下的所有txt文件内容导入到数据库表中;远程备份到服务器
- SQL Server 多个数据库远程备份到另一台服务器
- sql server 2000 数据库远程备份
- 从SQL Server向Oracle迁移的技术实现方案(十)连接远程的数据库(包括不同服务器)
- SQL SERVER 2008 R2 远程备份数据库
- 本地数据库(SQL Server)远程连接服务器端服务器----改变了默认端口
- 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器保存
- 用作业实现自动备份MSSQL数据库到远程服务器
- 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器保存
- 远程SQL SERVER服务器备份数据到客户机
- 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器
- 将本地数据库备份到远程服务器
- SQL Server 2005维护计划远程备份数据库操作
- 本地数据库(SQL Server)远程连接服务器端服务器
- windows 下mysql自动备份数据库 并备份入远程服务器
- 用作业实现自动备份MSSQL数据库到远程服务器
- 远程备份SQL Server 2005数据库
- SQL Server 2005 自动远程数据库备份