我是靠谱客的博主 拼搏菠萝,最近开发中收集的这篇文章主要介绍mysql 数据库恢复模式_数据库的恢复模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

---恢复内容开始--- 数据库的恢复模式是数据库遭到破坏时还原数据库中数据的数据存储方式,它与可用性、性能、磁盘空间等因素相关。每一种恢复模式都按照不同的方式维护数据库的数据和日志。系统提供了3种数据库的恢复模式: 1、完整恢复模式 2、大容量日志

---恢复内容开始---

数据库的恢复模式是数据库遭到破坏时还原数据库中数据的数据存储方式,它与可用性、性能、磁盘空间等因素相关。每一种恢复模式都按照不同的方式维护数据库的数据和日志。系统提供了3种数据库的恢复模式:

1、完整恢复模式

2、大容量日志记录的恢复模式

3、简单恢复模式

完整恢复模式是最高等级的数据库恢复模式。在完整恢复模式中,对数据库的所有操作都记录在数据库的事务日志中。即使那些大容量数据库操作和创建索引的操作,也就记录在数据库的事务日志中。当数据库遭到破坏之后,可以使用该数据库的事务日志迅速还原数据库。

在完整恢复模式中,由于事务日志记录了数据库的所有变化,所以可以使用事务日志将数据库还原到任意的时刻点。但是,这种恢复模式耗费大量的磁盘空间。除非是那种事务日志非常重要的数据库备份策略,否则一般不建议使用这种恢复模式。

就想完整恢复模式一样,大容量日志记录的恢复模式也使用数据库备份和日志备份还原数据库。但是,在使用了大容量日志记录的恢复模式的数据库中,其事务日志耗费了的磁盘空间远远小于使用完整恢复模式的数据库的事务日志。在大容量日志记录的恢复模式中,Check Index、bulk insert、BCP、Select Into等操作不记录在事务日志中。

对于那些规模比较小的数据库或数据不经常改变的数据库来说,可以使用简单恢复模式。当使用简单恢复模式时,可以通过执行完全数据库备份和增量数据库备份来还原数据库,数据库只能还原到执行备份操作的时刻点。执行备份操作之后的所有的数据修改都丢失并且需要重建。这种模式的特点是数据库没有事务日志。这种模型的好处是耗费比较少的磁盘空间,恢复模式最简单。

举个例子:

假设出问题的数据库为A, 新恢复后的数据库为B

1.前提:A数据库的恢复模式必须为:完整。

2.备份A数据库的日志,假设文件名为log.bak

3.使用A数据库的最近的完整备份,使用 WITH NORECOVERY 的方式,恢复为B数据库

4.使用恢复日志的方式,指定还原的时间点(T),将Log.bak文件还原到B数据库,完成后,B数据库的内容即是T时间之前的完整数据。

以下为测试语句建A数据库

--创建A数据库

CREATE DATABASE A

GO--对A数据库进行备份

BACKUP DATABASE A TO DISK= 'c:A.bak'WITH FORMAT

GO--创建测试表

CREATE TABLE A.dbo.TB_test(IDint)

GO--插入数据

Insert Into A.dbo.TB_test(ID)select 1GO--延时1秒钟,再进行后面的操作--(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败)

WAITFOR DELAY'00:00:01'GO--假设我们现在误操作删除了 A.dbo.TB_test 这个表

DROP TABLE A.dbo.TB_test--为了测试还原时间点,先记录操作的时间点

SELECT dt=GETDATE() INTO #T

GO--在删除操作后,发现不应该删除表 TB_test--下面演示了如何恢复这个误删除的表 TB_test,以及数据行--为了避免覆盖A数据库,恢复时,生成到B数据库

GO--首先,备份A数据库的事务日志(使用事务日志才能还原到指定的时间点)

BACKUP LOG A TO DISK= 'c:A_log.bak'WITH FORMAT

GO--接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行),生成数据库B

RESTORE DATABASE B FROM DISK= 'c:A.bak'WITH FILE= 1, MOVE N'A' TO N'C:B.mdf',

MOVE N'A_log' TO N'C:B.ldf', NORECOVERY, REPLACE

GO--将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早

DECLARE @dt datetime

SELECT @dt=DATEADD(ms,-20,dt) FROM #T --获取比表被删除的时间略早的时间

RESTORE LOG B FROM DISK= 'c:A_log.bak' WITH RECOVERY,STOPAT=@dt

GO--查询一下,看表是否恢复

SELECT*FROM B.dbo.TB_test--最后删除我们做的测试环境

DROP DATABASE A

DROP DATABASE B

DROP TABLE #T

---恢复内容结束---

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

最后

以上就是拼搏菠萝为你收集整理的mysql 数据库恢复模式_数据库的恢复模式的全部内容,希望文章能够帮你解决mysql 数据库恢复模式_数据库的恢复模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部