怎样定时自动还原数据库[转]

<第一方案>

你的数据库服务器-》企业管理器-》管理-》SQL Server 代理-》作业-》新建作业,按照要求填就可以了,在“步骤”的“命令”中填写你要执行的存储过程或语句,在“调度”里面填写什么时间执行


EXEC sp_add_job @job_name = '作业名字'


EXEC sp_add_jobstep @job_name = '作业名字',
@step_name = '步骤名子',
@subsystem = 'TSQL',
@command = '恢复数据库的代码',
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔

EXEC sp_add_jobschedule @job_name = '作业名字',
@name = '作业调度名字',
@freq_type = 4, -- 每天
@freq_interval = 26, --间隔
@active_start_time = 10000 --开始时间   
   

<第二方案>

use master
go
create proc 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
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

--用法
use master
exec killspid '数据库名' ---断开与数据库的联接(杀死各用户与数据库的联接ID)

你的数据库服务器-》企业管理器-》管理-》SQL Server 代理-》作业-》新建作业,按照要求填就可以了,在“步骤”的“命令”中填写你要执行的存储过程或语句,在“调度”里面填写什么时间执行

代码是先:
USE master

exec killspid '数据库名'
再:
restore database 数据库名 from disk='c:=/test.bak' with REPLACE  

 

<第三方案>

SQL code
  
  
/* --说明: 下面的代码演示了如何利用日志还原功能,将主数据库中的数据变化及时反馈到备用数据库中 备用数据库的数据可以随时用于查询,但不能被更新(备用数据库只读)。 --转:邹建 -- */ -- 首先,创建一个演示用的数据库(主数据库) CREATE DATABASE Db_test ON ( NAME = Db_test_DATA, FILENAME = ' c:/Db_test.mdf ' ) LOG ON ( NAME = Db_test_LOG, FILENAME = ' c:/Db_test.ldf ' ) GO -- 对数据库进行备份 BACKUP DATABASE Db_test TO DISK = ' c:/test_data.bak ' WITH FORMAT GO -- 把数据库还原成备用数据库(演示主数据库与这个备用数据库之间的同步) RESTORE DATABASE Db_test_bak FROM DISK = ' c:/test_data.bak ' WITH REPLACE ,STANDBY = ' c:/db_test_bak.ldf ' ,MOVE ' Db_test_DATA ' TO ' c:/Db_test_data.mdf ' ,MOVE ' Db_test_LOG ' TO ' c:/Db_test_log.ldf ' GO -- 启动 SQL Agent 服务 EXEC master..xp_cmdshell ' net start sqlserveragent ' ,no_output GO -- 创建主服务器数据训与备用服务器数据库之间同步的作业 DECLARE @jogid uniqueidentifier EXEC msdb..sp_add_job @job_id = @jogid OUTPUT, @job_name = N ' 数据同步处理 ' -- 创建同步处理步骤 EXEC msdb..sp_add_jobstep @job_id = @jogid , @step_name = N ' 数据同步 ' , @subsystem = ' TSQL ' , @command = N ' --主数据库中进行日志备份 BACKUP LOG Db_test TO DISK= '' c:/test_log.bak '' WITH FORMAT --备用数据库中还原主数据库的日志备份(应用主数据库中的最新变化 --实际应该时主数据库备份与备用数据库的还原作业应该分别在主服务器和备用服务器上建立,并且备份文件应该放在主服务器和备用都能访问的共享目录中 RESTORE LOG Db_test_bak FROM DISK= '' c:/test_log.bak '' WITH STANDBY= '' c:/test_log.ldf ''' , @retry_attempts = 5 , @retry_interval = 5 -- 创建调度(每分钟执行一次) EXEC msdb..sp_add_jobschedule @job_id = @jogid , @name = N ' 时间安排 ' , @freq_type = 4 , @freq_interval = 1 , @freq_subday_type = 0x4 , @freq_subday_interval = 1 , @freq_recurrence_factor = 1 -- 添加目标服务器 EXEC msdb.dbo.sp_add_jobserver @job_id = @jogid , @server_name = N ' (local) ' GO -- 通过上述处理,主数据库与备用数据库之间的同步关系已经设置完成 -- 下面开始测试是否能实现同步 -- 在主数据库中创建一个测试用的表 CREATE TABLE Db_test.dbo.TB_test(ID int ) GO -- 等待1分钟30秒(由于同步的时间间隔设置为1分钟,所以要延时才能看到效果) WAITFOR DELAY ' 00:01:30 ' GO -- 查询一下备用数据库,看看同步是否成功 SELECT * FROM Db_test_bak.dbo.TB_test /* --结果: ID ----------- (所影响的行数为 0 行) -- */ -- 测试成功 GO -- 最后删除所有的测试 DROP DATABASE Db_test,Db_test_bak EXEC msdb..sp_delete_job @job_name = N ' 数据同步处理 ' GO /* =========================================================== */ /* --服务器档机处理说明 使用这种方式建立的数据库同步,当主数据库不可用时(例如,主数据库损坏或者停机检修) 可以使用以下两种方法使备用数据库可用。 -- */ -- 1. 如果主数据库损坏,无法备份出最新的日志,可以直接使用下面的语句使备用数据库可读写(丢失最近一次日志还原后的所有数据)。 RESTORE LOG Db_test_bak WITH RECOVERY -- 2. 如果主数据库可以备份出最新日志,则可以使用下面的语句。 -- 先备份主数据库的最新的事务日志 BACKUP LOG Db_test TO DISK = '' c:/test_log.bak '' WITH FORMAT -- 再在备用数据库中恢复最新的事务日志,并且使备用数据库可读写(升级为主数据库) RESTORE LOG Db_test_bak FROM DISK = ' c:/test_log.bak '
 
 
定时备份数据库可采用“数据库维护计划”来实现
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值