在SQL Server中,我们一般都会创建自己的备份计划进行自动备份,或者手工备份. 在我们创建备份计划或者手工备份时,一般只能选择备份到本地磁盘. 如果我们需要备份到网络上另外一台机器上的磁盘,这时需要创建备份设备.
一.如何创建备份设备:
使用sp_addumpdevice存储过程,该存储过程的具体说明详见SQL Server在线帮助.例如我们需要创建一个名叫NetDevice_Northwind的备份设备,它的目的地在名叫BackServer的电脑的D盘SQLBack目录下,SQL语句如下:
EXEC sp_addumpdevice \'disk\',\'NetDevice_Northwind\',\'\\BackServer\D\SQLBack\Northwind.bak\'
执行后,我们可以在企业管理器/管理/备份中看到这个新添加的备份设备.
注意事项:
1.目标文件必须要指定文件名,扩展名随意;至于是否已经存在不要紧.
2.该网络路径应该是存在的,并且SQL Server代理的启动帐号具有读写该共享路径的权限;
3.执行sp_addumpdevice时不会验证该网络路径的有效性.
二.如何备份到该备份设备.
1.使用Sql語句:
BACKUP DATABASE Northwind to NetDevice_Northwind
2.用企业管理器:
选择需要备份的数据库,点右键菜单选择"全部作业/备份数据库",在备份对话框中清加备份设备"NetDevice_Northwind".
三.创建备份到网络路径的备份计划:
1.简单计划:
如上,使用企业管理器,在备份对话框中选取备份设备后,选择时间表,设定备份时间.
2.复杂计划:
简单计划的缺点是,备份设备是固定的,每次都是往同一个文件写.
如果我们有类似如下的需求:
a.每天00:00备份一次,文件名与年月日相关,例如Northwind_20040527.bak
b.保留三天的备份记录.
那么,我们要做的工作就多了些.
第一步:我们先创建两个存储过程ex_UpdateNetDevice 和 ex_DeleteOldBackup:
USE master
CREATE PROCEDURE ex_UpdateNetDevice @dbName sysname AS
BEGIN
DECLARE @vDate varchar(10)
DECLARE @Sql nvarchar(2000)
DECLARE @TmpNetDevice varchar(255)
DECLARE @TmpNetPath varchar(255)
SET @vDate=REPLACE(CONVERT(varchar(10),GETDATE(),120),\'-\',\'\')
SET @TmpNetDevice=\'NetDevice_\'+@dbName
SET @TmpNetPath=\'\\BackServer\D\SQLAutoBak\\'+@dbName+\'_db_\'+@vDate+\'.BAK\'
SET @Sql=N\'IF EXISTS(SELECT * FROM dbo.sysdevices WHERE name=@NetDevice)
EXEC sp_dropdevice @NetDevice
EXEC sp_addumpdevice \'\'disk\'\',@NetDevice,@NetPath\'
EXEC sp_executesql @Sql,
N\'@NetDevice varchar(255),@NetPath varchar(255)\',
@TmpNetDevice,
@TmpNetPath
END
USE master
CREATE PROCEDURE ex_DeleteOldBackup @dbName sysname AS
BEGIN
DECLARE @vDate varchar(10)
SET @vDate=REPLACE(CONVERT(varchar(10),GETDATE()-4,120),\'-\',\'\')
EXEC(\'xp_cmdshell \'\'del \\BackServer\D\SQLAutoBak\\'+@dbName+\'_db_\'+@vDate+\'.BAK\'\'\')
END
第二步:创建一个新的工作,在这个工作中创建一个新的步骤,将以下语句作为步骤的执行语句:
EXEC master.dbo.ex_UpdateNetDevice \'Northwind\'
BACKUP DATABASE [Northwind] TO [NetDevice_Northwind] WITH NOINIT,NOUNLOAD,NAME = N\'Backup Northwind\',NOSKIP,STATS = 10,NOFORMAT
IF @@ERROR=0
EXEC master.dbo.ex_DeleteOldBackup \'Northwind\'