思路 :在数据库上创建存储过程,然后 建立作业定时备份。 为了防止直接向远程备份数据库网络中断,还是先备份到本地,再拷到远程硬盘的好,用sql的脚本可以调用master..cmdshell \'copy...\'实现。
存储过程代码如下:
use mastergocreate proc bakup_DataBaseas 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),':','-'),' ','-') --备份的文件命名规则:日期-时间.bakSet @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 initPRINT @strCmdshellPRINT @sqlStrexec 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 联机丛书中的"外围应用配置器"。
启动外围应用配置器工具 在 “ 开始 ” 菜单中,依次指向 “ 程序 ” 、“ Microsoft sql Server 2005 ” 、 “ 配置工具 ” ,再单击 “sql Server 外围应用配置器 ” 。单击 “ 配置外围应用 ” 旁边的链接。默认值为 localhost 。如果您以前选择的是一个命名服务器,则将会看到该服务器名称。选择“ 功能的外围应用配置器 ”,启用'xp_cmdshell'选项打勾即可。 如果是sqlserver2008 运行以下sql代码 由默认的0变成1
EXEC sp_configure 'show advanced options',1GORECONfigUREGOEXEC sp_configure 'xp_cmdshell',1GORECONfigUREGO
2、net use ipc$错误解决(发生系统错误 67) 2009-06-25 14:31
net use ipc$错误解决
发生系统错误 67。
找不到网络名
===============
解决:运行serivces.msc(即服务管理)
开启:
1.Server服务(显示名称)(对应名称为:lanmanserver)
2.Workstation服务(显示名称)(对应名称为:lanmanWorkstation)
*************************************补充 远程和本地只保留7天内的备份数据 存储过程如下*******************************
set ANSI_NulLS ONset QUOTED_IDENTIFIER ONgocreate 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.bakSet @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.102sqlserver_bak\' --需填写IP(目标机器的IP地址)以及保存的目录(如:\192.168.1.140\db\)Set @sqlStr='copy '+@Fullfilename+' '+@Tofilename ---向异机copySet @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 initPRINT @strCmdshellPRINT @sqlStrexec master..xp_cmdshell @strCmdshell--尝试连接到目标机器exec Master..xp_cmdshell @sqlStr --拷贝到目标机器上 if @FlagDel ='True'beginPRINT @sqlStr2exec master.. xp_cmdshell @sqlStr2--删除本地的备份7天以外的备份文件exec master.. xp_cmdshell @sqlStr3--删除远程的备份7天以外的备份文件PRINT @sqlStr3end总结
以上是内存溢出为你收集整理的sqlserver 2005 数据库异机备份全部内容,希望文章能够帮你解决sqlserver 2005 数据库异机备份所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)