原文
原文:http://blog.csdn.net/tjvictor/article/details/5251351
如果你的数据库运行在完整或是批量日志恢复模式下,那么你就需要使用作业(job)来定期备份事务日志,保持你的事务文件大小处在一个可管理的范围。当你需要还原事务日志时,你就需要按照创建事务日志的顺序来恢复它们。你可以参考存在msdb..backupset表中的信息来确定还原文件的顺序,使用FirstLSN和LastLSN列的值作参考。当你备份时,这些备份信息就会存在backupset表中
只要序列处于维护状态下,你就可以使用对应的日志把数据恢复到任意恢复点上。不幸的是,有些实例的序列已经被损坏了。下面两种情况普通是引起损坏的原因:
- 数据库的恢复模型被切换到了简单(SIMPLE)后,再次被切换回完整或是批量日志。
- Backup log命令运行时,附带了TRUNCATE_ONLY/NO_LOG选项。
当上面两种情况发生时,你需要即可做一个数据库的完整备份,作为事务日志恢复的新的恢复点。那么你如何判断序列已经被破坏了呢?
在SQL Server 2000中,这确实有点麻烦。假如数据库恢复模型已经被更改了,或是备份时日志已经被截断了,那么当更改后,你第一次备份事务日志时,SQL Server 2000会显示如下输出:
There is no current database backup. This log backup cannot be used to roll forward a preceding database backup.
Processed 1 pages for database 'logtest', file 'logtest_log' on file 1.
BACKUP LOG successfully processed 1 pages in 0.078 seconds (0.019 MB/sec).
注意这仅仅是个消息。虽然备份依然会成功完成,但却不可用。因为这是个计划作业,所以你什么都看不到,不过当事务日志被截断时,在Windows事件日志中是相关警告日志的。。
注意:如果你正在使用SQL Server 2000,那么日志事务对于数据库是非常重要的,所以要在Windows事件日志中不间断的监控日志事务事件。
假如你既没有关注警告消息,也没有监控Windows事件日志,那么基本上你就是有一批不可恢复的事务日志备份。SQL Server不应该警告我们吗?不应该停止无效的备份吗?假如你正在使用SQL Server 2005,那么答案肯定是应该的,而且它也是这么做的。下面就是当日志备份序列被毁坏时显示的消息:
Server: Msg 4214, Level 16, State 1, Line 1
BACKUP LOG cannot be performed because there is no current database backup.
Server: Msg 3013, Level 16, State 1, Line 1
BACKUP LOG is terminating abnormally.
是不是好多了。总之,如果你正在使用SQL Server 2000,你需要关注上面提到两个警告事件,这两个事件会毁坏你的日志备份序列,使你的备份失效。
下面是一些通用操作来保证日志序列不被破坏:
- 数据库恢复模型可以从完整到批量日志,反过来也一样
- 执行数据库完整备份,差异备份可是文件/文件组备份
假如你有如下一个备份序列(F代表完整数据备份,T代表事务日志)
F1,T1,T2,T3,T4,T5,T6
现在假设你要恢复到T6时间点,如下的恢复序列会帮你达到目的:
F1,T1,T2,T3,T4,T5,T6
F2,T3,T4,T5,T6
F3,T5,T6
本文翻译自sqlbackuprestore,更多精彩内容请浏览http://www.sqlbackuprestore.com
SQL Server数据库事务日志存储序列的更多相关文章
-
SQL Server数据库事务日志序列号(LSN)介绍
原文:http://blog.csdn.net/tjvictor/article/details/5251463 日志序列编号(LSN)是事务日志里面每条记录的编号. 当你执行一次备份时,一些 ...
-
第十七周翻译-SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志
SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志 作者:Tony Davis,2012/01/27 翻译:赖慧芳 译文: 该系列 本文是Stairway系列的一部分:SQL ...
-
SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志(译)
SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志 作者:Tony Davis,2012/01/27 系列 本文是进阶系列的一部分:SQL Server中事务日志管理的步骤 当事情 ...
-
如何读懂SQL Server的事务日志
简介 本文将介绍SQL Server的事务日志中记录了哪一些信息,如何来读懂这些事务日志中信息.首先介绍一个微软没有公开的函数fn_dblog,在文章的接下来的部分主要用到这个函数来读取事务日志. f ...
-
SQL SERVER的事务日志
1 基本介绍 每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作. 日志的记录形式需要根据数据库的恢复模式来确定,数据库恢复模式有三种: 完整模式,完全记录事物日志,需要定期进行 ...
-
SQL Server 数据库开启日志CDC记录,导致SQL Server 数据库日志异常增大
这几天单位的SQL Server业务数据生产库出现数据库日志增长迅速,导致最终数据无法写入数据库,业务系统提示"数据库事务日志已满",经过多方咨询和请教,终于将日志异常的数据库处理 ...
-
SQL Server备份事务日志结尾(Tail)
原文:http://blog.csdn.net/tjvictor/article/details/5256906 事务日志结尾经常提交数据库未备份的事务日志内容.基本上,每一次你执行事务日志备份时 ...
-
SQL Server 收缩事务日志的方法
由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005) Backup Log DataBaseName with no_ ...
-
你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)
前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...
随机推荐
-
<;textarea>;输入框提示文字
背景 看了过时的资料,花费大把时间,不过也有收获,还是写写吧! 分析 有同学可能想到直接在<textarea>标签内输入帮助文字,但是这又有一个新问题--因为<textarea> ...
-
phpexcel简单用法
<?php /*php生成excel完整实例代码现求:php生成excel完整实例代码最好能说明如何调用!谢谢java_sunhui4 | 浏览 8131 次 2014-09-24 14:502 ...
-
ServiceStack.Redis常用操作 - 事务、并发锁_转
一.事务 使用IRedisClient执行事务示例: using (IRedisClient RClient = prcm.GetClient()) { RClient.Add("key&q ...
-
转!java设计模式--单例模式
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一 ...
-
!! UML十四图打油诗记忆法
http://www.cnitpm.com/pm/7458.html UML十四图打油诗记忆法 UML十四图打油诗记忆法 UML它有十四图 包含静态和动态(分类) 类图构件搞对象(类图.构件图.对象图 ...
-
Linux中解决SSH连接慢问题
[转载]来源:http://www.bkjia.com/xtzh/893669.html [转载原因]:其他文章都是修改服务器端配置,但为了保证服务器端安全问题,一般情况下最好不要修改服务器端配置.因 ...
-
一些常见warning的原因和解决方法
在入职三周后,终于赶齐了接手项目落下两个月的项目,有了一些自己的空闲时间对项目进行整理.主要整理包括类目的整合,从原来一个系统文件夹下几百个文件整改为以MVC设计思想为原则的分文件夹整理类目,井然有序 ...
-
Android智能下拉刷新加载框架—看这些就够了
一些值得学习的几个下拉刷新上拉加载开源库 Android智能下拉刷新框架-SmartRefreshLayout 支持所有的 View(AbsListView.RecyclerView.WebView. ...
-
剑指offer得意之作——顺时针打印矩阵
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3 ...
-
Java 多线程 sleep()方法与yield()方法的区别
sleep()方法与yield()方法的区别如下: 1 是否考虑线程的优先级不同 sleep()方法给其他线程运行机会时不考虑线程的优先级,也就是说,它会给低优先级的线程运行的机会.而yield()方 ...