怎样定时自动还原数据库[转]
2009-06-13 16:34
190 查看
<第一方案>
你的数据库服务器-》企业管理器-》管理-》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
你的数据库服务器-》企业管理器-》管理-》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'
定时备份数据库可采用“数据库维护计划”来实现
相关文章推荐
- 怎样定时自动还原数据库
- 怎样每天自动定时刷新数据库
- 如何让你的数据库定时自动备份(2000SQL)
- Linux-定时脚本将一台服务器上的mysql数据库自动备份到另一台服务器的数据库中
- 使用SQL Server维护计划实现数据库定时自动备份
- 使用SQL Server维护计划实现数据库定时自动备份
- 用SQL语句定时自动备份SQL SERVER 数据库并将备份文件加密压缩自动下载 (2014-03-17 13:12:26)转载
- SQL Server 数据库定时自动备份【转】
- SQL Server 数据库定时自动备份
- mysql自动定时备份数据库的最佳方法(windows服务器)
- 如何在SQL Server中制作数据库自动定时备份
- SQL Server 2005 自动备份数据库 维护计划实现数据库定时自动备份
- SQL Server实现数据库定时自动备份
- (7.2.8)SQL Server 数据库定时自动备份
- 【转载】使用SQL Server维护计划实现数据库定时自动备份
- 定时自动备份数据库
- 怎样在EOS中配置与数据库的自动重连
- 使用SQL Server维护计划实现数据库定时自动备份 原文转自:http://sun2010.5d6d.com/thread-127-1-1.html
- window自动任务实现数据库定时备份
- SqlServer 数据库进行定时自动的执行脚本