SQL 技术分享
两台服务器自动备份与还原解决方案
本机自动备份计划
1. 本机数据库服务器(如服务器名为 dbserver)中的数据库建立定期备份作业,
完全备份=>删除早于此时间(30 分钟)的文件(只保留一个备份文件)。
2. 将数据服务器存放数据库备文份件的文件夹(如 D:\autobackupdata)置成共享。
目标机器拷贝计划任务
1. 在另外一台机器(目标机 dbserverback)上建立目录(如 d:\autobackupdata\)
2. 目标机(dbserverback)上写一个批处理文件(打开记事本,按下面格式录入DOS 命
令,保存为 DBAutoBackup.bat。
格式:
a) Del d:\autobackupdata \*.*
b) XCOPY \\ 数据服务器名\数据服务器共享的备份文件文件夹\库名.* 本机硬盘\*.*
/s /q (先删除文件)
/m
举例:
Del d:\autobackupdata\*.* /s /q
XCOPY \\dbserver\autobackupdata\tempdb*.* d:\autobackupdata\*.* /m
3. 重命名备份的数据库文件(为固定名称 tempdb.bak)
Rename d:\autobackupdata\tempdb*.bak tempdb.bak
目标机自动还原作业
1. 利用存储过程处理
use master
go
create proc sp_killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500),@temp varchar(1000)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
Author: hongbo Liu
Date: 2009-9-8
msn: itlhb@hotmail.com
第 1 页(共 2 页)
SQL 技术分享
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
set @temp='kill '+rtrim(@spid)
exec(@temp)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
2. 目标机建立恢复作业(job_DBAuotRestore)
l 常规=>作业名称:job_DBAuotRestore
l 步聚=>命令中键入
use master
exec sp_killspid ' tempdb'
go
restore database
REPLACE
tempdb from disk='D:\ autobackupdata\tempdb.bak' with
附录(所用到的文件及脚本范例)
l DBAutoBackup.bat
l
l
sp_killspid.sql
job_DBAuotRestore.sql
Author: hongbo Liu
Date: 2009-9-8
msn: itlhb@hotmail.com
第 2 页(共 2 页)