Bonny.Wong
  
  在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\'


   

分类:

技术点:

相关文章:

  • 2021-10-04
  • 2021-04-13
  • 2021-11-20
  • 2021-05-17
  • 2021-11-12
  • 2021-05-20
  • 2021-05-21
猜你喜欢
  • 2021-12-03
  • 2022-12-23
  • 2021-11-15
  • 2021-09-22
  • 2021-10-24
  • 2022-01-30
  • 2022-01-02
相关资源
相似解决方案