sqlserver实现bat自动备份和恢复

备份数据库.bat

@echo off
set path=%path%;C:Program Files (x86)Microsoft SQL Server80ToolsBinn
echo 数据库备份开始
osql.exe -S 127.0.0.1 -U sa -P 123456 -i sqlserverbackup.sql -o c:ackupsqlserverbackup.out
echo 数据库备份完成
pause

sqlserverbackup.sql

DECLARE @name varchar(50)
DECLARE @datetime char(14)
DECLARE @path varchar(255)
DECLARE @bakfile varchar(255)
set @name=DataSample
set @datetime=CONVERT(char(8),getdate(),112) + REPLACE(CONVERT(char(8),getdate(),108),:,)
set @path=c:ackup
set @bakfile=@path++@name+_+bak_+@datetime+.BAK
backup database @name to disk=@bakfile with name=@name
go

还原数据库.bat

@echo off
echo 开始还原数据库
net start "mssqlserver"
osql -U sa -P 123456 -i c:ackupsqlserverrestore.sql -o c:ackupsqlserverrestore.out
echo 还原数据库完成
pause

sqlserverrestore.sql

declare @dumpfile varchar(50)
declare @msg varchar(70)
   select @dumpfile = c:ackupDataSample_bak_20170718145556.BAK
   select @msg=convert(char(26),getdate(),9)
   print @msg
 
restore DATABASE DataSample from disk=@dumpfile
if (@@ERROR <> 0 )
begin
   select @msg=convert(char(26),getdate(),9)+-----还原数据失败或出现异常
   print @msg
end
else
begin
   select @msg=convert(char(26),getdate(),9)+-----数据库还原完毕
   print @msg
end
declare @dumpfile varchar(50)
declare @msg varchar(70)
   select @dumpfile = c:ackupDataSample_bak_20170718161443.BAK
   select @msg=convert(char(26),getdate(),9)
   print @msg

----同一个备份文件还原成不同名称数据库  
RESTORE DATABASE DataSample1
   FROM disk=@dumpfile
   WITH RECOVERY,
   MOVE DataSample TO D:MyDataDataSample1.mdf, 
   MOVE DataSample_Log TO D:MyDataDataSample1_Log.ldf

if (@@ERROR <> 0 )
begin
   select @msg=convert(char(26),getdate(),9)+-----还原数据失败或出现异常
   print @msg
end
else
begin
   select @msg=convert(char(26),getdate(),9)+-----数据库还原完毕
   print @msg
end
经验分享 程序员 微信小程序 职场和发展