用存储过程实现MSSQL数据的网络异地备份

  MSSQL的异地远程存储,SQLServer备到FileServer
环境:
win2k+sqlserver 2K SP3

 backup database msdb to disk=’computer estfilename.bak’ --(注意大小写)


如果SQL异地备份失败,归根结底是权限问题! H


 那么你的SQLServer的启动用户必须在FileServer上有足够的权限!


1SQLServer上新建一SQLUser用户权限大一点。


2FileServer上建同一用户对某一文件夹有足够权限,就是在两台机器上建相同的用户名和密码,然后与这个用户名登入电脑。


3、两机的SQLUser密码相同(方便一点)
4、将SQLServer改为SQLUser
启动
   (管理工具-->服务-->mssql-->属性-->指定用户及密码,是计算机的登入用户名)


5、backup database 数据库 to disk=’192.168.*.*文件夹ShareBak.Bak’就可以了。

作业:db_backup2pc @databaseName='databaseName',@filepath='filepath'

CREATE   PROCEDURE  dbo.db_backup2pc

@databaseName    nvarchar ( 100 =   null -- 数据库名
@filepath                 nvarchar ( 125 =   null    -- 文件保存路径(IP+隐藏共享+)

AS
BEGIN
DECLARE
 
@year1     varchar ( 4 ),
 
@month1     varchar ( 2 ),
 
@day1     varchar ( 2 ),
 
@flag     varchar ( 255 ),
 
@proc_result   tinyint ,   /*返回系统存储过程xp_cmdshell运行结果*/
 
@sqlstr     varchar ( 2000 ),
 
@createdir   varchar ( 255 )    /*建立文件备份的目录*/

begin
             
--  Get year & month &day fromat of the day before yesterday
--
 SET @year1 = substring(convert(varchar,datepart(yyyy,getdate()-2)),3,2)
  SET   @month1   = substring ( convert ( varchar , datepart (mm, getdate ())), 1 , 2 )
 
SET   @day1 = substring ( convert ( varchar , datepart (dd, getdate ())), 1 , 2
 
--  if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */
  --  if len(@day1)<2 set @day1 = '0' + @day1 
 
 
set   @sqlstr = ' dir  ' + @filepath + @databaseName + ' _ ' + @month1 + ' - ' + @day1
 
EXEC   @proc_result   =  master..xp_cmdshell  @sqlstr ,no_output
 
 
if  ( @proc_result <> 0 /*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/
  
begin
   
set   @createdir = ' md  ' + @filepath + @databaseName + ' _ ' + @month1 + ' - ' + @day1    /*建立文件备份的目录*/
   
EXEC  master..xp_cmdshell  @createdir ,no_output

   
set   @sqlstr = ' backup database  ' + @databaseName + '  to disk= ''' + @filepath + @databaseName + ' _ ' + @month1 + ' - ' + @day1 + ' ' + @databaseName + ' .bak '''   -- +' with init'   
    Execute  ( @sqlstr )   /* 备份databaseName数据 */
   
   
set   @sqlstr = ' backup database master to disk= ''' + @filepath + @databaseName + ' _ ' + @month1 + ' - ' + @day1 + ' master.bak '''
   
Execute  ( @sqlstr )   /* 备份 master 数据 */
   
   
set   @sqlstr = ' backup database msdb to disk= ''' + @filepath + @databaseName + ' _ ' + @month1 + ' - ' + @day1 + ' msdb.bak '''
   
Execute  ( @sqlstr )   /* 备份 msdb 数据 */

   
set   @flag = ' Backup database successful. '
  
end
 
else
  
set   @flag = ' The directory " ' + @databaseName + ' _ ' + @month1 + ' - ' + @day1 + ' " has been in, backup database unsuccessful. '  

 
print   @flag   
END
END
GO

 

作业:delete_db_backupfile2pc @databaseName='databaseName',@filepath='filepath'

CREATE   PROCEDURE  dbo.delete_db_backupfile2pc

@databaseName   nvarchar ( 100 ) = null ,
@filepath       nvarchar ( 125 ) = null

AS
DECLARE
 
@year1     varchar ( 4 ),
 
@month1     varchar ( 2 ),
 
@day1     varchar ( 2 ),
 
@sqlstr     varchar ( 2000 ),
 
@flag   varchar ( 255 ),
 
@proc_result   tinyint   /*返回系统存储过程xp_cmdshell运行结果*/
begin

 
if   @databaseName   =   null   or   @filepath   =   null  
 
set   @flag = ' Variable Error! '
 
else
  
begin              

-- 保存7天的数据
  SET   @month1   = substring ( convert ( varchar , datepart (mm, getdate () - 7 )), 1 , 2 )
 
SET   @day1 = substring ( convert ( varchar , datepart (dd, getdate () - 7 )), 1 , 2 )

 
--  if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */
  --  if len(@day1)<2 set @day1 = '0' + @day1 

 
set   @sqlstr = ' dir  ' + @filepath + @databaseName + ' _ ' + @month1 + ' - ' + @day1
 
EXEC   @proc_result   =  master..xp_cmdshell  @sqlstr ,no_output

 
if  ( @proc_result = 0 )   /*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/
  
begin
   
set   @sqlstr = ' del  ' + @filepath + @databaseName + ' _ ' + @month1 + ' - ' + @day1 + '  /q '
   
exec  master..xp_cmdshell  @sqlstr ,no_output     -- 删除目录下的文件
    set   @sqlstr = ' rd  ' + @filepath + @databaseName + ' _ ' + @month1 + ' - ' + @day1
   
exec  master..xp_cmdshell  @sqlstr ,no_output    -- 删除目录
    set   @flag = ' Delete file successful! '
  
end
 
else
  
set   @flag = ' Can not find " ' + @filepath + @databaseName + ' _ ' + @month1 + ' - ' + @day1 + ' " file! '
 
end  
  
print   @flag  
end
GO
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值