暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
mssql的增量事物日志还原的方案.docx
38
4页
0次
2024-04-10
25墨值下载
Mssql
增量事物日志备份和还原
很多
DBA
对还原时制定
RECOVERY
NORECOVERY
选项都很熟悉,但是对于
STANDBY
就有点茫然了,今天一起来学习下吧。
--
===============================================
====================
MSDN
如下说:
STANDBY =standby_le_name
指定一个允许撤消恢复效果的备用文件。
备用文件用于为
RESTORE WITH STANDBY
的撤消过程中修改的页面保留一个“写入时副
本”预映像。备用文件允许用户在事务日志还原期间以只读方式访问数据库,并允许数据库
用于备用服务器情形,或用于需要在日志还原操作之间检查数据库的特殊恢复情形。执行
RESTORE WITH STANDBY
操作之后,下一个
RESTORE
操作会自动删除撤消文件。
如果在下一个
RESTORE
操作之前手动删除了这个备用文件,则必须重新还原整个数据库。
当数据库处于
STANDBY
状态时,您应将这个备用文件视为和任何其他数据库文件同样重
要。该文件与其他数据库文件不同,数据库引擎仅在活动还原操作过程中持续打开该文件。
给定备用文件的大小要求取决于由还原操作过程中未提交的事务所导致的撤消操作数。
链接地址:
http://msdn.microsoft.com/zh-cn/library/ms178615(v=sql.105).aspx
--
===============================================
====================
按我的理解来讲:就是在还原时,将未提交的事务写入到一个“备用文件”中,然后回滚未
提交事务,保证数据一致性,将数据库设置为“备用
/
只读”状态,使用户可以访问数据库,
并能在后续继续使用日志备份来还原数据库。
日志传送中备用节点可读便是使用这种方式
--
===============================================
===================
让我们实验学习一下
--=============================
--
创建数据库
CREATE DATABASE TestDB3
GO
USE TestDB3
GO
--=============================
--
创建测试表
SELECT * INTO TB01
FROM sys.all_columns
WHERE 1<>1
GO
--==============================
--
创建完整备份
BACKUP DATABASE TestDB3 TO DISK ='D:\TestDB3_F1.BAK'
--==============================
--
向测试表中插入
100
条数据并提交事务
INSERT INTO TB01
SELECT TOP(100) * FROM sys.all_columns
--================================
--
新开向测试表插入
1000
条数据
,
暂时不提交
BEGIN TRAN
DECLARE @ID INT
SET @ID=10
WHILE(@ID>0)
BEGIN
INSERT INTO TB01
SELECT TOP(100) * FROM sys.all_columns
SET @ID=@ID-1
END
我们再开启一个回话,做第一次日志备份
--===========================================
--
第一次日志备份
,
包含一个
100
条插入的已提交事务
--
和一个
1000
条插入的未提交事务
BACKUP LOG TestDB3 TO DISK ='D:\TestDB3_L1.BAK'
然后回到第一个回话,提交事务并做第二日志备份
--===========================================
--
提交事务并做第二次日志备份
,
包含一个
100
条插入
--
的已提交事务和一个
1000
条插入的已提交事务
BACKUP LOG TestDB3 TO DISK ='D:\TestDB3_L2.BAK'
此时我们有一个完整备份和两个日志备份,让我们来还原数据库
--========================================================
--
使用完整备份来还原数据库
[TestDB4],
并指定
NORECOVERY
来使得
--
数据库处于
"
正在还原
"
状态
RESTORE DATABASE [TestDB4] FROM DISK = N'D:\TestDB3_F1.BAK'
WITH FILE = 1, MOVE N'TestDB3' TO N'D:\DB\TestDB4.mdf',
MOVE N'TestDB3_log' TO N'D:\DB\TestDB4_1.LDF',
NORECOVERY, NOUNLOAD, STATS = 10
GO
--======================================================
--
使用日志备份来还原
,
使用
STANDBY
选项来使得数据库处于
"
备用
/
只读
"
RESTORE LOG [TestDB4] FROM DISK = N'D:\TestDB3_L1.BAK'
WITH STANDBY = N'D:\ROLLBACK_UNDO_TestDB4.BAK',
NOUNLOAD, STATS = 10
此时数据库可以访问,查询表会发现表中有
100
条数据,恰好是第一个提交事务的数据,
第二个未提交事务插入的
1000
条数据无法查询到。
再来查看
STANDBY
指定的文件
继续还原日志
--===============================================
--
继续还原日志备份
BACKUP LOG TestDB3 TO DISK ='D:\TestDB3_L1.BAK'
会发现可以正常还原!
我们重做上面还原步骤,但在最后一次还原日志之前,把
STANDBY
指定的文件删除掉,
会有以下错误提示:
消息
3441
,级别
17
,状态
1
,第
3
在启动备用数据库
'TestDB4' (
数据库
ID
10)
的过程中,
RESTORE
语句无法访问它的备用文
('D:\ROLLBACK_UNDO_TestDB4.BAK')
操作系统错误为
'2(
系统找不到指定的文件。
)'
。诊断该操作系统错误,并更正此问题,然后重试启
动操作。
PS:
在生产环境,不要轻易删除
STANDBY
指定的文件,要不就“吧不是罪啦
of 4
25墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论