老师让我弄一下异地备份的,刚开始使用了软件syncnavigator,但是,之后发现,这个软件还原时一个问题。后来使用了如下方法,从9点多一直折腾到下午一点,终于可以了,如有什么问题,希望各位指教!
测试服务器SQL2005
环境Windows7
使用方法
1,写成存储过程,建立作业定时备份(方案)
--在sql中映射一下
exec master..xp_cmdshell 'net use z:\\computer_name\D$ "密码"/user:computer_name\administrator'
/*--说明:
z:是映射网络路径对应本机的盘符,与下面的备份对应
\\computer_name\D$是要映射的网络路径
computer_name是远程的计算机名,
administrator是登陆的用户名
密码 指定的administrator用户的密码
--*/
--备份;with init覆盖 ¦noinit添加
backup database 库名 to disk='E:\H_BACKUP.bak' with init
--COPY
exec master..xp_cmdshell 'copyE:\H_BACKUP.bak z:'
--删除(这句可以去掉)
--exec master..xp_cmdshell 'delE:\H_BACKUP.bak'
--完成后删除映射
exec master..xp_cmdshell 'net use z:/delete'
2,调度(具体方法)
1) 首先在 59.69.74.67的D盘中设置share文件夹,将该文件夹修改为共享。
2) 企业管理器 --管理 --SQL Server代理 --右键作业 --新建作业 --"常规"项中输入作业名称
3) --"步骤"项 --新建--"步骤名"中输入步骤名--"类型"中选择"Transact-SQL脚本(TSQL)" --"数据库"选择执行命令的数据库 --"命令"中输入要执行的语句:
declare @strsql varchar(1000)
declare @strdirname varchar(50)
declare @strcmd varchar(50)
declare @strsend varchar(1000)
declare @strdate varchar(50)
exec master..xp_cmdshell 'net use\\59.69.74.67\D$ ycj /user:59.69.74.67\ywjun' --ycj为用户ywjun的密码
set @strsql='backup database test todisk=''\\59.69.74.67\D$\share\' --D为共享文件夹得盘符,share为备份文件夹的名称
set @strdirname=replace(substring(convert(varchar(20),getdate(),120),1,10),'-','')+'12'
set @strcmd='md \\59.69.74.67\D$' --D为盘符
set @strcmd=@strcmd+@strdirname
exec master..xp_cmdshell @strcmd
print @strsql
set @strsql=@strsql+@strdirname+'test.bak''with init,nounload,noskip,noformat'
print @strsql
exec (@strsql)
4) “计划”项--新建 –“名称中”输入名称,重复执行。。。
5) 然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法: 我的电脑--控制面板--管理工具--服务--右键SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
问题总结:
1. SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问
“消息 15281,级别 16,状态 1,过程xp_cmdshell,第 1 行
SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell'的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure 启用 'xp_cmdshell'。有关启用'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的"外围应用配置器". ”
解决方法:
sqlserver2005时
EXEC sp_configure N'show advanced options', N'1'
RECONFIGURE WITH OVERRIDE
EXEC sp_configure N'xp_cmdshell', N'1'
RECONFIGURE WITH OVERRIDE
EXEC sp_configure N'show advanced options', N'0'
RECONFIGURE WITH OVERRIDE
如果不是sqlserver2005可使用如下的方法(我没有实验)
EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE
RECONFIGURE:指定如果配置设置不需要服务器停止并重新启动,则更新当前运行的值,如果没有这个关键字的话将要重新启动sqlserver服务才能生效。
Remind:开启执行顺序是'showadvanced options',然后才执行'xp_cmdshell'。,如果要关闭这个高级选项的话,要先执行'xp_cmdshell'然后再执行'showadvanced options'。数字1代表开启,0代表关闭。
如果cmdshell还不行的话,就再运行:
dbcc addextendedproc("xp_cmdshell","xplog70.dll");--
或者
sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
来恢复cmdshell。
2. win7网络发现不能启用,无法共享其他机器的解决办法
FunctionDiscovery Resource Publication
SSDP Discovery
UPnP Device Host
启动这三个服务后,“网络发现”就可以正常使用了;
计算机----管理----服务与应用程序----服务---- (找到这三个服务开启就可以用了)
将启动类型改为自动,然后点应用,再把服务状态改为启动
3. 提示
declare @strsql varchar(1000)
declare @strdirname varchar(50)
declare @strcmd varchar(50)
declare @strsend varchar(1000)
declare @strdate varchar(50)
exec master..xp_cmdshell 'net use\\59.69.74.67\D$ ycj /user:59.69.74.67\ywjun' --ycj为用户ywjun的密码
set @strsql='backup database test todisk=''\\59.69.74.67\D$\share\' --D为共享文件夹得盘符,share为备份文件夹的名称
set @strdirname=replace(substring(convert(varchar(20),getdate(),120),1,10),'-','')+'12'
set @strcmd='md \\59.69.74.67\D$' --D为盘符
set @strcmd=@strcmd+@strdirname
exec master..xp_cmdshell @strcmd
print @strsql
set @strsql=@strsql+@strdirname+'test.dat''with init,nounload,noskip,noformat'
print @strsql
exec (@strsql)
将上述代码先在查询中执行,看能否备份到网络共享文件夹,成功后可以进行上述备份步骤。