异地备份和还原方案(备份)

时间:2021-02-06 10:18:21

老师让我弄一下异地备份的,刚开始使用了软件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)

将上述代码先在查询中执行,看能否备份到网络共享文件夹,成功后可以进行上述备份步骤。