思路 :在数据库上创建存储过程,然后
建立作业定时备份。
存储过程代码如下:
use master go create proc bakup_DataBase as Declare @strPsw varchar(50) Declare @strUsr varchar(50) Declare @strCmdshell varchar(300) Declare @strDataBaseName varchar(20) Declare @FullFileName Varchar(200) Declare @FileFlag varchar(50) Declare @ToFileName varchar(200) Declare @sqlStr varchar(500) Declare @sqlStr2 varchar(500) Declare @FlagDel varchar(20) Set @FileFlag=replace(replace(convert(char(20),getdate(),20),':','-'),' ','-') --备份的文件命名规则:日期-时间.bak Set @strUsr='192.168.1.102\Administrator' --目标机器域名\目标机器windows用户名 Set @strPsw='sdjz'--目标机器Windows登陆密码 Set @strCmdshell= 'net use \\192.168.1.102\ipc$ ' + @strPsw + ' /user:' +@strUsr --需填写IP(目标机器的IP地址,如:192.168.2.178) Set @strDataBaseName='strs'--填写数据库名称(如:Soondy) Set @FullFileName='E:\mq\'+@FileFlag+'.BAK'--需填写本地备份临时文件的目录,因为需要先备份到本地再copy到目标机器(如:保存目录为E:\SoondyTest\) Set @ToFileName='\\192.168.1.102\97sqlserver_bak\' --需填写IP(目标机器的IP地址)以及保存的目录(如:\\192.168.1.140\db\) Set @FlagDel='True'--填写True表示删除本地的备份临时文件,填写False或其他字符表示保留该文件 Set @sqlStr='copy '+@FullFileName+' '+@ToFileName Set @sqlStr2='del ' +@FullFileName --备份;with init覆盖 |noinit添加 BackUp DataBase @strDataBaseName To disk= @FullFileName with init PRINT @strCmdshell PRINT @sqlStr exec master..xp_cmdshell @strCmdshell--尝试连接到目标机器 exec Master..xp_cmdshell @sqlStr --拷贝到目标机器上 if (@FlagDel ='True') exec master.. xp_cmdshell @sqlStr2--删除本地的备份临时文件 GO
出现的错误 和解决办法
1、
sql Server 阻止了对组件'xp_cmdshell' 的过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure 启用'xp_cmdshell'。有关启用'xp_cmdshell' 的详细信息,请参阅sql Server 联机丛书中的"外围应用配置器"。
启动外围应用配置器工具
由默认的0变成1
EXEC sp_configure 'show advanced options',1 GO RECONfigURE GO EXEC sp_configure 'xp_cmdshell',1 GO RECONfigURE GO
2009-06-25 14:31
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go create proc [dbo].[bakup_DataBase1] as Declare @strPsw varchar(50) Declare @strUsr varchar(50) Declare @strCmdshell varchar(300) Declare @strDataBaseName varchar(20) Declare @FullFileName Varchar(200) Declare @FileFlag varchar(50) Declare @ToFileName varchar(200) Declare @sqlStr varchar(500) Declare @sqlStr2 varchar(500) Declare @FlagDel varchar(20) Declare @sqlStr3 varchar(500) --同机备份如下 --填写数据库名称(如:Soondy) Set @strDataBaseName='strsbak' --备份的文件命名规则:数据库名20131213.bak Set @FileFlag=@strDataBaseName+rtrim(convert(varchar,112)) Set @FullFileName='E:\mq\'+@FileFlag+'.BAK'--需填写本地备份临时文件的目录,因为需要先备份到本地再copy到目标机器(如:保存目录为E:\SoondyTest\) ---异机备份如下 Set @strUsr='192.168.1.102\Administrator' --目标机器域名\目标机器windows用户名 Set @strPsw='sdjz'--目标机器Windows登陆密码 Set @strCmdshell= 'net use \\192.168.1.102\ipc$ ' + @strPsw + ' /user:' +@strUsr --需填写IP(目标机器的IP地址,如:192.168.2.178) Set @ToFileName='\\192.168.1.102\97sqlserver_bak\' --需填写IP(目标机器的IP地址)以及保存的目录(如:\\192.168.1.140\db\) Set @sqlStr='copy '+@FullFileName+' '+@ToFileName ---向异机copy Set @FlagDel='True'--填写True表示删除本地的备份临时文件,填写False或其他字符表示保留该文件 --保留7天以内的备份 Set @sqlStr2='del '+'e:\mq\'+@strDataBaseName+rtrim(convert(varchar,getdate()-7,112))+'.BAK' Set @sqlStr3='del '+@ToFileName+@strDataBaseName+rtrim(convert(varchar,112))+'.BAK' BackUp DataBase @strDataBaseName To disk= @FullFileName with init PRINT @strCmdshell PRINT @sqlStr exec master..xp_cmdshell @strCmdshell--尝试连接到目标机器 exec Master..xp_cmdshell @sqlStr --拷贝到目标机器上 if @FlagDel ='True' begin PRINT @sqlStr2 exec master.. xp_cmdshell @sqlStr2--删除本地的备份7天以外的备份文件 exec master.. xp_cmdshell @sqlStr3--删除远程的备份7天以外的备份文件 PRINT @sqlStr3 end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。