您的位置:首页 > 数据库

怎样定时自动还原数据库

2011-01-13 22:23 274 查看
<第一方案>

你的数据库服务器-》企业管理器-》管理-》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'定时备份数据库可采用“数据库维护计划”来实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle 职场 数据库