SQL备份数据库

create      PROCEDURE SQLBackup AS

 

--建立映射 exec master..xp_cmdshell 'net use z: \\ip或者计算机名\d$\路径 登录密码 /user:ip或者计算机名\登录账号' --1、计算机名称cnshUser102,这里用ip也可以。用计算机名的好处是ip改了之后对这个不影响 --2、需要映射的路径d$\路径,这里是把该路径映射到本地的z盘

 

--定义变量 declare   @bkfile   nvarchar(1000) declare   @i        int declare   @name     nvarchar(1000) declare   @cpfile   nvarchar(1000)

 

--取当天的星期,星期天的值为1 set @i=datepart(weekday,getdate())

 

/*系统数据库每天备份*/

 

--master   

  

set   @bkfile=N'D:\SqlServerBackup\master\master_'+convert(nchar(8),getdate(),112)+'.BAK'     backup   database   master   to   disk=@bkfile  WITH INIT,name='master_full'   set   @bkfile=N'del  D:\SqlServerBackup\master\master_'+convert(nchar(8),getdate()-7,112)+'.BAK'    exec   master.dbo.xp_cmdshell   @bkfile,no_output   set   @cpfile=N'copy /Y  D:\SqlServerBackup\master\master_'+convert(nchar(8),getdate(),112)+'.BAK z:\master'   exec   master.dbo.xp_cmdshell   @cpfile,no_output   set   @cpfile=N'del   z:\master\master_'+convert(nchar(8),getdate()-7,112)+'.BAK'    exec   master.dbo.xp_cmdshell   @cpfile,no_output

 --model    
set   @bkfile=N'D:\SqlServerBackup\model\model_'+convert(nchar(8),getdate(),112)+'.BAK'     backup   database   model   to   disk=@bkfile  WITH INIT,name='model_full'   set   @bkfile=N'del   D:\SqlServerBackup\model\model_'+convert(nchar(8),getdate()-7,112)+'.BAK'    exec   master.dbo.xp_cmdshell   @bkfile,no_output   set   @cpfile=N'copy /Y  D:\SqlServerBackup\model\model_'+convert(nchar(8),getdate(),112)+'.BAK z:\model'   exec   master.dbo.xp_cmdshell   @cpfile,no_output   set   @cpfile=N'del   z:\model\model_'+convert(nchar(8),getdate()-7,112)+'.BAK'    exec   master.dbo.xp_cmdshell   @cpfile,no_output 

--msdb 
 set   @bkfile=N'D:\SqlServerBackup\msdb\msdb_'+convert(nchar(8),getdate(),112)+'.BAK'     backup   database   msdb   to   disk=@bkfile WITH INIT,name='msdb_rfull'     set   @bkfile=N'del   D:\SqlServerBackup\msdb\msdb_'+convert(nchar(8),getdate()-7,112)+'.BAK'   exec   master.dbo.xp_cmdshell   @bkfile,no_output   set   @cpfile=N'copy /Y  D:\SqlServerBackup\msdb\msdb_'+convert(nchar(8),getdate(),112)+'.BAK z:\msdb'   exec   master.dbo.xp_cmdshell   @cpfile,no_output   set   @cpfile=N'del   z:\msdb\msdb_'+convert(nchar(8),getdate()-7,112)+'.BAK'    exec   master.dbo.xp_cmdshell   @cpfile,no_output

 

/*应用数据库每周六完全备份,其余差异备份*/

 

--User  

  

--完全备份

 

 if @i=7 begin   set   @bkfile=N'D:\SqlServerBackup\User\User_'+convert(nchar(8),getdate(),112)+'.BAK'     backup   database   User   to   disk=@bkfile WITH INIT,name='User_full'   set   @bkfile=N'del  D:\SqlServerBackup\User\User_'+convert(nchar(8),getdate()-14,112)+'.BAK'    exec   master.dbo.xp_cmdshell   @bkfile,no_output   set   @cpfile=N'copy /Y  D:\SqlServerBackup\User\User_'+convert(nchar(8),getdate(),112)+'.BAK z:\User'   exec   master.dbo.xp_cmdshell   @cpfile,no_output   set   @cpfile=N'del   z:\User\User_'+convert(nchar(8),getdate()-7,112)+'.BAK'    exec   master.dbo.xp_cmdshell   @cpfile,no_output end

 

 --差异备份 

  

else begin   set   @bkfile=N'D:\SqlServerBackup\User\User_'+convert(nchar(8),getdate(),112)+'.DIFF'   set  @name=N'User_diff_'+convert(nchar(1),@i)   backup   database   User   to   disk=@bkfile WITH DIFFERENTIAL,INIT,name=@name   set   @bkfile=N'del D:\SqlServerBackup\User\User_'+convert(nchar(8),getdate()-14,112)+'.DIFF'     exec   master.dbo.xp_cmdshell   @bkfile,no_output   set   @cpfile=N'copy /Y  D:\SqlServerBackup\User\User_'+convert(nchar(8),getdate(),112)+'.DIFF z:\User'   exec   master.dbo.xp_cmdshell   @cpfile,no_output   set   @cpfile=N'del   z:\User\User_'+convert(nchar(8),getdate()-7,112)+'.DIFF'    exec   master.dbo.xp_cmdshell   @cpfile,no_output end

 

--User_MGT 

  

 --完全备份 

  

if @i=7 begin   set   @bkfile=N'D:\SqlServerBackup\User_MGT\User_MGT_'+convert(nchar(8),getdate(),112)+'.BAK'     backup   database   User_MGT   to   disk=@bkfile WITH INIT,name='User_MGT_full'   set   @bkfile=N'del  D:\SqlServerBackup\User_MGT\User_MGT_'+convert(nchar(8),getdate()-14,112)+'.BAK'    exec   master.dbo.xp_cmdshell   @bkfile,no_output   set   @cpfile=N'copy /Y  D:\SqlServerBackup\User_MGT\User_MGT_'+convert(nchar(8),getdate(),112)+'.BAK z:\User_MGT'   exec   master.dbo.xp_cmdshell   @cpfile,no_output   set   @cpfile=N'del   z:\User_MGT\User_MGT_'+convert(nchar(8),getdate()-7,112)+'.BAK'    exec   master.dbo.xp_cmdshell   @cpfile,no_output end

 

 --差异备份

 

 else begin   set   @bkfile=N'D:\SqlServerBackup\User_MGT\User_MGT_'+convert(nchar(8),getdate(),112)+'.DIFF'   set  @name=N'User_MGT_diff_'+convert(nchar(1),@i)   backup   database   User_MGT   to   disk=@bkfile WITH DIFFERENTIAL,INIT,name=@name   set   @bkfile=N'del D:\SqlServerBackup\User_MGT\User_MGT_'+convert(nchar(8),getdate()-14,112)+'.DIFF'     exec   master.dbo.xp_cmdshell   @bkfile,no_output   set   @cpfile=N'copy /Y  D:\SqlServerBackup\User_MGT\User_MGT_'+convert(nchar(8),getdate(),112)+'.DIFF z:\User_MGT'   exec   master.dbo.xp_cmdshell   @cpfile,no_output   set   @cpfile=N'del   z:\User_MGT\User_MGT_'+convert(nchar(8),getdate()-7,112)+'.DIFF'    exec   master.dbo.xp_cmdshell   @cpfile,no_output end

 

  

 

--删除映射

 

 exec master..xp_cmdshell 'net use z: /delete'

  

posted @ 2014-04-17 17:34  只不过一场戏  阅读(70)  评论(0编辑  收藏  举报