·天新网首页·加入收藏·设为首页·网站导航
数码笔记本手机摄像机相机MP3MP4GPS
硬件台式机网络服务器主板CPU硬盘显卡
办公投影打印传真
家电电视影院空调
游戏网游单机动漫
汽车新车购车试驾
下载驱动源码
学院开发设计
考试公务员高考考研
业界互联网通信探索
您真的理解了SQL SERVER的日志链了吗?
http://www.21tx.com 2014年01月17日 cnblogs 桦仔

上一页 1 2 3 4 5 6 7 8 9 10 11 下一页

使用GUI的时候,我发现了一个问题

当我用上面的备份策略 完备1-》差备-》日备1-》完备2-》日备2

当我完成日备1的时候,还原界面和backupset表的界面如下

您真的理解了SQL SERVER的日志链了吗?

您真的理解了SQL SERVER的日志链了吗?

当我再进行完备2和日备2的时候,还原界面变成了下面的样子

您真的理解了SQL SERVER的日志链了吗?

backupset表依然能显示出备份记录

您真的理解了SQL SERVER的日志链了吗?

很多人就认为备份链断裂了,日志链断裂,备份日志链断裂,日志备份链断裂

这个表的记录是删除不了的

1 USE [msdb]
2 GO
3 DELETE FROM [msdb].[dbo].[backupset]
4 TRUNCATE TABLE [msdb].[dbo].[backupset]

消息 547,级别 16,状态 0,第 1 行
DELETE 语句与 REFERENCE 约束"FK__backupfil__backu__473C8FC7"冲突。该冲突发生于数据库"msdb",表"dbo.backupfilegroup", column 'backup_set_id'。
语句已终止。
消息 4712,级别 16,状态 1,第 2 行
无法截断表 'msdb.dbo.backupset',因为该表正由 FOREIGN KEY 约束引用。

这个表记录了在备份的时候的lsn号
您真的理解了SQL SERVER的日志链了吗?

可以根据paul的文章做一些实验

Debunking a couple of myths around full database backups

您真的理解了SQL SERVER的日志链了吗?

我们做一个实验,先做一个完整备份

--第一个完整备份   
DECLARE @strbackup NVARCHAR(100)   
--改为日期加时间的   
SET @strbackup = 'C:LogChainTest_full1_'
    + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ',   
                      ''), ':', '') + '.bak'
BACKUP DATABASE LogChainTest TO DISK =@strbackup  WITH INIT,CHECKSUM ;   
GO

backupset表就会产生一条记录
您真的理解了SQL SERVER的日志链了吗?

我们将bak文件删除

您真的理解了SQL SERVER的日志链了吗?

用GUI来还原数据库

您真的理解了SQL SERVER的日志链了吗?

您真的理解了SQL SERVER的日志链了吗?

结果:

您真的理解了SQL SERVER的日志链了吗?

他们的关系

USE [msdb]   
GO   
SELECT * FROM [dbo].[backupfile]   
SELECT * FROM [dbo].[backupfilegroup]   
SELECT * FROM [dbo].[backupset]   
SELECT * FROM [sys].[backup_devices]   
SELECT * FROM [dbo].[backupmediafamily]   
SELECT * FROM [dbo].[backupmediaset]

每次备份的记录都记录在这些表里面,还原的时候SSMS读取这些表的记录,让你勾上几个选项就可以还原数据库了(非常傻瓜)

大家不要以为SQLSERVER在还原数据库的时候依靠[msdb].[dbo].[backupset]表的lsn去对比备份顺序

大家可以试想一下:

你的数据库备份了3次,有3个备份记录保存在backupset表

那么当你把数据库分离附加到别的sql实例的时候,你也可以还原你之前的备份

为什麽呢??

因为还原的时候只去数据库的事务日志去对比last lsn,是不依靠外部的其他的数据的而且也不需要依靠

如果还不明白的话,大家再看一下我上面贴出来的图片吧o(∩_∩)o


总结

一直以来本人对SQLSERVER的备份还原机制都不是很熟悉,通过跟宋沄剑的讨论让本人重新认识SQLSERVER的备份、还原

2013-12-7 补充:

大家不要误解了,数据库事务日志截断的意思不是说把不活动日志部分删除了,而是把这些日志清空了

等待重用,除非你收缩事务日志,不然这些日志空间(VLF)只会等待重用

2013-12-8 补充:

还原日志备份的时候使用restore log 或restore database都是一样的

而还原差异备份的时候使用restore log就会报错

上一篇: 再谈SQL Server中日志的的作用
下一篇: SQL Server CheckPoint的几个误区

上一页 1 2 3 4 5 6 7 8 9 10 11 下一页

关于我们 | 联系我们 | 加入我们 | 广告服务 | 投诉意见 | 网站导航
Copyright © 2000-2011 21tx.com, All Rights Reserved.
晨新科技 版权所有 Created by TXSite.net