数据库远程还原,本地备份。

时间:2021-07-04 20:40:54


1、二台服务器,A作为备份机子,把数据库备份到A机子的D盘下的 backup中,JOB每天执行一次;B机子作为备用数据库,一旦A发生故障,可以切换到B机子,供急用;


2、二台机子通过远程方式执行同步(B机器每天还原,A机器每天备份)。


例子如下:

SQLSERVER服务实例名称(B机器): 192.168.0.29
A备份的数据库名称:  aDB
A备份机器名称(Client端): 192.168.0.30
A备份机用户:  administrator  密码: 666
A备份机电脑名称: farcn 
备份机提供备份需求的文件夹:D:\backup

----------------
declare @pathname varchar(500)
set @pathname='D:\sqldatabankup\everydayforABC'+convert(varchar(10),getdate(),112)
BACKUP DATABASE [My_db] TO  DISK = @pathname  WITH  NOINIT ,  NOUNLOAD ,  NAME = N'dbnameinfo backup',  


NOSKIP ,  STATS = 10,  NOFORMAT
--------------------


备份数据库
第一步: 在A备份机建立共享文件夹(此文件夹设置当前用户可读写操作)
在程序代码中调用(或者CMD窗口)
net share sqlbakup=D:\backup 或者用NetShareAdd这个API
简要说明:
net share:是WINDOWS内部的网络命令。
作用:建立本地的共享资源,显示当前计算机的共享资源信息。
第二步: 建立共享信用关系
exec master..xp_cmdshell 'net use \\192.168.0.30\backup 666 /user:farcn\Administrator'


若报错提示这个:“SQL Server 阻止了对组件'xp_cmdshell' 的过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。
系统管理员可以通过使用sp_configure 启用'xp_cmdshell'。有关启用'xp_cmdshell' 的详细信息,请参阅SQL Server 联机丛书中的"外围应用配置器"。”


启用’xp_cmdshell’:
USE master 
EXEC sp_configure 'show advanced options', 1 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure 'xp_cmdshell', 1 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure   'show advanced options', 0
RECONFIGURE WITH OVERRIDE


关闭’xp_cmdshell’:
USE master 
EXEC sp_configure 'show advanced options', 1 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure 'xp_cmdshell', 0 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure   'show advanced options', 0
RECONFIGURE WITH OVERRIDE


开启’xp_cmdshell’后再执行建立信用关系:
exec master..xp_cmdshell 'net use \\192.168.0.30\backup 666 /user:farcn\Administrator'  


在B机子上执行还原备份库A的备份文件:

declare @pathname varchar(500)
declare @netinfo varchar(500)
set @pathname='\\192.168.0.30\bankup\dbname'+convert(varchar(10),getdate(),112) 


USE master 
EXEC sp_configure 'show advanced options', 1 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure 'xp_cmdshell', 1 
RECONFIGURE WITH OVERRIDE 
EXEC sp_configure   'show advanced options', 0
RECONFIGURE WITH OVERRIDE

set @netinfo='net use \\192.168.0.30\backup 666 /user:farcn\Administrator'

 
exec master..xp_cmdshell @netinfo  
 
restore database mydbbackup from disk=@pathname


  

 

简要说明:
1:xp_cmdshell :是SQLSERVER的扩展存储过程。
作用:以操作系统命令行解释器的方式执行给定的命令字符串, 并以文本行方式返回任何输出。
语法:参见SQLSERVER联机帮助

2:net use : 是WINDOWS内部的网络命令。
作用:将计算机与共享资源连接或断开,或者显示关于计算机连接的信息。
该命令还控制持久网络连接。

3:备份数据库
backup database a to disk='\\192.168.12.30\sqlbak\a.bak'
backup database a to disk='\\192.168.12.30\sqlbak\a1.bak' WITH DIFFERENTIAL (差异备份)

4: 删除共享文件夹
在程序代码中调用(或者CMD窗口) net share sqlbakup/delete
或者用NetShareDel这个API
恢复数据库
restore database a from disk='\\192.168.12.30\backup\a.bak'


以下是差异还原
restore database scs from disk='\\192.168.12.30\backup\a.bak' WITH NORECOVERY
restore database scs from disk='\\192.168.12.30\backup\a1.bak' WITH NORECOVERY
restore database scs from disk='\\192.168.12.30\backup\a2.bak'