好吧;我用BACK EXEC备份数据库到一台HP服务器的时候老是失败,估计是什么BUG造成的,和它做斗争近1周无效。每次都备份到失败。找不到原因。现在只能用老办法写一个AGENT执行,记录下来备用

作用:备份SQL数据库到本地,然后移动备份成功的文件到远程,如果执行成功则删除远程路径上过期的文件。过期时间可以自定义

 

 

 
  
  1. --打开高级设置 
  2. EXEC sp_configure 'show advanced options', 1 
  3. RECONFIGURE 
  4. --打开xp_cmdshell扩展存储过程 
  5. EXEC sp_configure 'xp_cmdshell', 1 
  6. RECONFIGURE 
  7.  
  8. declare @strdirname varchar(100)   --目标文件名称 
  9. declare @RemotePathstr varchar(100)   --远程路径名 
  10. declare @RemotePathBase varchar(100)  --远程共享名称 
  11. declare @LocalPathstr varchar(100)    --本机路径名 
  12. declare @DBName varchar(100)  --待备份数据库名称 
  13. declare @RetentionPeriod smallint --备份文件保留期限,超过后删除超期文件. 
  14. declare @strRetentionPeriod varchar(100) --设置过期的文件名称已便删除 
  15.  
  16. set @RetentionPeriod = 7 
  17. set @DBName='wlaccdata' 
  18. set @RemotePathBase = '\\xmerp\wlaccerp' 
  19. --设置待备份数据库名称 
  20. set @strdirname=@DBName+replace(substring(convert(varchar(20),getdate(),120),1,10),'-',''
  21. --设置过期数据库备份文件名称 
  22. set @strRetentionPeriod = @DBName + replace(substring(convert(varchar(20),getdate()-@RetentionPeriod,120),1,10),'-',''
  23.  
  24. --设置备份文件名 
  25. set @RemotePathstr = @RemotePathBase + '\' + @strdirname + '.bak' 
  26. set @LocalPathstr = 'D:\\backuptemp\\'+@strdirname+'.bak'   --设置远程备份保存目标 
  27. set @strRetentionPeriod = @strRetentionPeriod + '.bak' 
  28.  
  29. --实施备份 
  30. backup database @DBName to disk=@LocalPathstr 
  31.  
  32. --映射网络路径 
  33. declare @cmd_map varchar(100) 
  34. set @cmd_map = 'net use z: ' + @RemotePathBase + ' /user:sqluser "password"'  
  35. PRINT @cmd_map 
  36. exec xp_cmdshell @cmd_map 
  37.  
  38. ---移动备份文件到网络路径. 
  39. DECLARE @result int 
  40. declare @cmd varchar(100) 
  41. set @cmd = 'move '+ @LocalPathstr+' z:\' 
  42. exec @result = master..xp_cmdshell  @cmd 
  43.  
  44. --如果移动文件执行成功则删除过期的文件 
  45. if(@result = 0)  
  46.     BEGIN 
  47.         PRINT 'SUCESS!' 
  48.         declare @cmd_del varchar(100) 
  49.         set @cmd_del = 'del z:\' + @strRetentionPeriod 
  50.         exec master..xp_cmdshell @cmd_del 
  51.     END 
  52. ELSE 
  53.         PRINT 'MOVE BACKUP FAILED!' 
  54.  
  55.  
  56. --删除映射网络路径 
  57. set @cmd_map = 'net use z: /delete' 
  58. PRINT @cmd_map 
  59. exec xp_cmdshell @cmd_map 
  60.  
  61.  
  62. --关闭xp_cmdshell扩展存储过程、高级设置 
  63. EXEC sp_configure 'xp_cmdshell', 0 
  64. RECONFIGURE 
  65. EXEC sp_configure 'show advanced options', 0 
  66. RECONFIGURE