14.5 用Bak文件恢复到故障点的奥秘

如果数据库被损坏,我们就只能利用备份集文件(通常扩展名为BAK)来恢复数据库,如果备份集中包含了尾日志备份,我们同样能将数据库恢复到故障点。

前面我们已经介绍了使用restore headeronly命令可以查看备份集文件的头部信息。这里的信息和msdb系统数据库中保存的信息是一致的。

区别在于在删除数据库时,我们可以选择是否同时删除msdb系统数据库中的备份信息,而备份集文件的备份信息是存储在其头部的,不会随着msdb系统数据库的备份信息的删除而被删除。

14.5.1 发现的问题

在Management Studio中选择还原数据库,选择从设备还原,设置设备为bak文件,出现如图14-27所示的【常规】选项卡。

图14-27 【常规】选项卡

然而,令我们吃惊的是,尽管备份集中有3个日志备份(2个日志备份+1个尾日志备份),而且这3个日志备份的LSN是前后续接的,但是在图14-26中我们只能发现2个日志备份的序列,尾日志备份序列不可见,经过笔者的反复实验,这个问题始终存在。

因为不能应用尾日志备份,所以肯定不能将数据库恢复到故障点!那么是不是尾日志备份就不能使用了呢?

14.5.2 解决的办法

经过若干次反复的实验,发现始终不能在图形化操作中解决这个问题。尽管尾日志的备份序列和前面的日志备份序列首尾连接,但是在图形化界面中确实无法选择。

作者将目光投向了RESTORE DATABASE和RESTORE LOG语句上。最后成功解决了这个问题。

1.成功的实例

最后成功完成尾日志恢复的语句实例如下。

RESTORE DATABASE [db_test] FROM DISK = N'C:\test2.bak'

WITH FILE = 1,

NORECOVERY,

NOUNLOAD,

REPLACE,

STATS = 10

GO

RESTORE LOG [db_test] FROM DISK = N'C:\test2.bak'

WITH FILE = 2,

NORECOVERY,

NOUNLOAD,

STATS = 10

GO

RESTORE LOG [db_test] FROM DISK = N'C:\test2.bak'

WITH FILE = 3,

NORECOVERY,

NOUNLOAD,

STATS = 10

GO

RESTORE LOG [db_test] FROM DISK = N'C:\test2.bak'

WITH FILE = 4,

NOUNLOAD,

STATS = 10

GO

光盘代码:\代码\1407.sql。

2.解决思路

下面的语句为恢复尾日志的语句。

RESTORE LOG [db_test] FROM DISK = N'C:\test2.bak'

WITH FILE = 4,

NOUNLOAD,

STATS = 10

可以看出,上述恢复尾日志的语句和恢复日志序列语句是不同的。

RESTORE LOG [db_test] FROM DISK = N'C:\test.bak'

WITH FILE = 3,

NORECOVERY,

NOUNLOAD,

STATS = 10

最本质的不同,是尾日志恢复少了一个参数NORECOVERY。

3.NORECOVERY参数的奥秘

那么,为什么NORECOVERY参数就可以恢复尾日志呢?

RECOVERY参数指示还原操作回滚任何未提交的事务。在恢复进程后即可随时使用数据库。如果既没有指定NORECOVERY和RECOVERY,也没有指定STANDBY,则默认为RECOVERY。

NORECOVERY参数指示还原操作不回滚任何未提交的事务。如果稍后必须应用另一个事务日志,则应指定NORECOVERY或STANDBY选项。使用NORECOVERY选项执行脱机还原操作时,数据库将无法使用。

4.使用方法

还原数据库备份和一个或多个事务日志时,或者需要多个RESTORE语句(例如还原一个完整的数据库备份并随后还原一个完整的差异备份)时,RESTORE需要对所有语句使用WITH NORECOVERY选项,但最后的RESTORE语句除外。

14.5.3 验证是否恢复到故障点

(1)执行1407.sql,执行结果如图14-28所示。

图14-28 执行恢复

(2)执行dbcc log语句,查询恢复后的数据库的日志情况如图14-29所示。

— 第1条日志记录的Current LSN:0000001e:00000013:0001。

— 最后1条日志记录的Current LSN:0000001e:00000064:000a。

图14-29 恢复后的数据库日志

在图14-23中,我们知道发生尾日志备份后的数据库日志的最后一条日志记录的Cureent LSN为:0000001e:00000050:0001。

由于恢复后的日志记录的LSN(0000001e:00000144:000a)>故障点时的日志记录的LSN(0000001e:00000050:0001),所以我们得出结论,我们的恢复操作确实将数据库恢复到了故障点。多余出来的LSN是由于备份和恢复操作产生的日志记录。

(3)理论上我们已经验证了,那么,按照我们的实验数据,故障点时的最后一条日志记录应该出现在恢复后的日志中。

接下来我们执行dbcc log语句查询日志记录,发现该日志记录果然存在于日志记录中,如图14-30所示。

图14-30 恢复后的数据库日志

(4)我们还可以通过执行查询数据库中特定表的数据来判断是否恢复到了故障点。

执行下列语句,查询结果显示有799条数据,正是我们模拟故障点发生时的数据库中的数据。

select count(*) from db_test.dbo.t_clusterindextest

mysql 事务日志备份_事务日志备份与恢复 5相关推荐

  1. mysql事务日志备份_事务日志备份 (SQL Server)

    事务日志备份 (SQL Server)Transaction Log Backups (SQL Server) 01/05/2018 本文内容 适用于:Applies to: SQL ServerSQ ...

  2. 压缩SQL数据库日志-收缩SQL数据库日志-备份SQL数据库日志-删除SQL数据库日志

    [标题]压缩SQL数据库日志-收缩SQL数据库日志-备份SQL数据库日志-删除SQL数据库日志  [内容]         清除SQL数据库日志文件        有两种方式: 一.是压缩日志,二.是 ...

  3. 合格的MySQL管理员必备备份恢复与日志管理,对MySQL进行简单的操作

    目录 一,日志 一,日志保存 二,日志类型与作用 二,数据备份 一,数据备份的重要性 二,数据库备份的分类 1.从物理与逻辑的角度,备份可分为 2.数据库备份的分类 3.常见的备份方法 4.MySQL ...

  4. 升级mysql服务器二进制备份_MySQL二进制日志备份和恢复详解

    基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句. 作用: 1.二进制日志的主要目的是在恢复使能够最大可能地更新数据库,因为二 ...

  5. mysql数据库的备份和二进制日志恢复

    mysql备份和bin-log日志 备份数据: mysqldimp -uroot -p  test -l -F '/tmp/test.sql' -l 读锁 -F即flush logs, 可以重新生成的 ...

  6. mysql像plsql一样删除提交_MySQL学习-MySQL内置功能_事务操作

    1.事务详解 1.1 事务的概念 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等 ...

  7. 查看mysql隔离解绑_事务-11831428-51CTO博客

    一.事务的简介 事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败. 例如:A-->B转账,对应如下的两条SQL语句.update account set money  ...

  8. 阿里云 mysql 导出数据库备份_导出整个mysql数据库备份

    mysql和mssql的备份和恢复数据的方法 mysql数据库的备份方法可以用 导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] ...

  9. mysql数据库视图备份_数据库篇-mysql详解( 六 )之视图与数据备份

    data.png 一 : 视图 视图: view, 是一种有结构(有行有列)但是没结果(结构中不真实存放数据)的虚拟表, 虚拟表的结构来源不是自己定义, 而是从对应的基表中产生(视图的数据来源). ( ...

最新文章

  1. flexi-streams用法简介
  2. shell脚本编程-结构化命令2-for命令
  3. 双口RAM和多模块存储器
  4. 不安和怀疑,美丽而又危险:看两位80后女艺术家的展览
  5. 如何在React Native中使用文本输入组件?
  6. Django源代码阅读分析-2:持久层结构分析
  7. python 函数参数self_Python类中self参数用法详解
  8. sas 怎么连接mysql_sas连接MySQL
  9. redis安装部署(1)
  10. Android超级好看的动态登陆界面(附有详细代码)
  11. ubuntu防火墙,ufw命令
  12. 计算机类课题研究方法,课题研究的主要内容和研究方法.doc
  13. USB有线网卡怎么用
  14. 一文看懂,Scrapy 底层逻辑是如此的简单
  15. 笔记本和利用服务器算力直连,使用闲置服务器的CPU算力挖掘Monero—Windows篇
  16. 信息爆炸的年代,怎么治愈自己的焦虑
  17. openwrt支持wpa3加密
  18. Java简单的记账本项目
  19. SLAM基础 —— 视觉与IMU融合(VIO基础理论)
  20. 美云智数营销云荣获“2021年中国轻工业数字化杰出解决方案”

热门文章

  1. 励志!26岁单臂博士生:我想在科研的道路上发更多高质量论文
  2. 你的博士三五年,不艰辛?
  3. 中科院一博士论文走红:把书念下去,然后走出去,不枉活一世
  4. USNews世界大学排名! CS引争议!中国高校霸榜:清华第一,北邮反超CMU
  5. 苏联当年有多少应该拿菲尔兹奖的数学家被黑了?
  6. 数学和物理的共同演化
  7. 推荐系统--矩阵分解(4)
  8. Qt样例学习1(数字时钟)
  9. 找出二维数组中每行的最小数但最小数的列不能相同
  10. 全排列算法解析(视频+详解+代码+STL)