SQLServer 理解copyonly备份操作
标签:MSSQL/日志截断
概述
Alwayson在添加数据库的过程中如果同步首选项选择的是“完整”,那么就会在主副本上执行copyonly的完整备份和日志备份在辅助副本上执行还原操作,也正是这个操作让我对copyonly有了新的理解。虽然以前也经常使用copyonly执行完整备份,
但是之前对copyonly的理解存在一点误区。接下来详细说明copyonly的操作。
一、备份测试
CREATE DATABASE city;
GO
CREATE TABLE city.dbo.test(id INT); ---执行完整备份
BACKUP DATABASE [city] TO DISK = N'D:\backup\city_full_20170613.bak' WITH NOFORMAT, NOINIT, NAME = N'city-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO --插入1条记录
INSERT INTO city.dbo.test VALUES(1); --执行日志备份1
BACKUP LOG [city] TO DISK = N'D:\backup\city_log1_20170613.trn' WITH NOFORMAT, NOINIT, NAME = N'city-日志备份1 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO INSERT INTO city.dbo.test VALUES(2);
GO --执行完整copy only备份
BACKUP DATABASE [city] TO DISK = N'D:\backup\city_full_copyonly_20170613.bak' WITH COPY_ONLY, NOFORMAT, NOINIT, NAME = N'city-完整copyonly 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO INSERT INTO city.dbo.test VALUES(3); --执行差异备份
BACKUP DATABASE [city] TO DISK = N'D:\backup\city_diff_20170613.bak' WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'city-差异 数据库 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO INSERT INTO city.dbo.test VALUES(4); GO
--执行日志备份2
BACKUP LOG [city] TO DISK = N'D:\backup\city_log2_20170613.trn' WITH NOFORMAT, NOINIT, NAME = N'city-日志备份2 备份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
二、查询备份
SELECT
bs.database_name,
bs.name AS BackupName,
bs.first_lsn,--备份集中最早的一条日志记录的日志序列号
bs.last_lsn, --备份集下一条日志记录的日志序列号
bs.database_backup_lsn, --最近的数据库完整备份的日志序列号
bs.checkpoint_lsn, --重做日志开始的日志序列号
bs.is_copy_only,
CASE bs.type WHEN 'D' THEN 'FullBack' WHEN 'L' THEN 'LogBack' WHEN 'I' THEN 'DiffBack' ELSE bs.type END AS BackupType,
bs.backup_start_date,
bs.backup_finish_date,
bs.backup_size,
bs.recovery_model
FROM msdb.dbo.backupset bs
--INNER JOIN msdb.dbo.backupfile bf ON bs.backup_set_id=bf.backup_set_id
WHERE bs.database_name='city'
上图中用三种颜色的框框出了四个比较重要的知识点:
1.日志备份以外的备份不会截断日志
从最左边的红框标志的两次日志备份的first_lsn和last_lsn可以看到整个两次日志备份的lsn是连续的从‘45000000016800179’-‘45000000038400001’,两次日志备份的lsn涵盖了所有备份的lsn。也就是中间的copyonly完整备份和差异备份不会截断日志(当然如果中间还存在完整备份同样不会截断日志,大家可以去试试)
2.仅复制完整备份不能作为差异备份的基准备份
从中间的截框“database_backup_lsn”列可以看到,所有的后面的备份都基于第一次完整备份作为基准备份。
3.完整、差异、仅复制完整备份会触发checkpoint
最后一个截框“checkpoint_lsn”可以看到除了日志备份,其它的三种备份都会触发checkpoint,大家也通过查询buffer查看is_modify字段是否被修改来判断。
4.仅复制完整备份可以作为日志备份的基准备份
这个在上面的截图中没有体现出来,但是可以看到日志备份2的lsn是涵盖了第三次仅复制备份的lsn,仅复制完整备份其实可以理解成数据库在一个时间点的快照,而日志备份是记录所有更改的日志操作,可以用来执行redo。所以如果将第3次仅复制完整备份+第5次日志备份是可以还原所有的数据。
第3次仅复制完整备份+第5次日志备份它=(第1次完整备份+第4次差异备份+第5次日志备份)=(第1次完整备份+第2次日志备份+第5次日志备份)
执行第3次仅复制完整备份+第5次日志备份
USE [master]
RESTORE DATABASE [city_copyolny] FROM DISK = N'D:\backup\city_full_copyonly_20170613.bak' WITH FILE = 1,
MOVE N'city' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\city_copyolny.mdf',
MOVE N'city_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\city_copyolny_log.ldf', NORECOVERY, NOUNLOAD, STATS = 5
RESTORE LOG [city_copyolny] FROM DISK = N'D:\backup\city_log2_20170613.trn' WITH FILE = 1, NOUNLOAD, STATS = 5 GO
三、checkpoint意义
由于数据在磁盘是散列存储,如果每次修改都去修改磁盘势必会造成很多的IO,所以引入了checkpoint刷新机制,checkpoint根据某些触发条件将buffer中的脏页写入磁盘(也称作持久化操作)。比如完整备份、仅复制完整备份、差异备份、当日志的修改到达一定的比例、重启服务等都会触发checkpoint,当然checkpoint并不是sqlserver独有的功能,在其他的关系型数据库比如mysql都存在chckpoint机制;mysql中还存在每秒后台线程执行checkpoint操作,但是貌似sqlserver不会,checkpoint涉及的知识点很多这里只是稍微介绍!
总结
其实上面的备份测试中在中间在加入一次完整备份就更加完美了,但是如果大家理解备份的原理也是一样可以理解的。
备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。 《欢迎交流讨论》 |
SQLServer 理解copyonly备份操作的更多相关文章
- SQLServer理解copyonly备份操作
Always在添加数据库的过程中如果同步首选项选择的是“完整”,那么就会在主副本上执行copyonly的完整备份和日志备份在辅助副本上执行还原操作,也正是这个操作让我对copyonly有了新的理解.接 ...
- SQLSERVER数据库备份操作和还原操作做了什么
SQLSERVER数据库备份操作和还原操作做了什么 看了这篇文章:还原/备份时做了些什么 自己也测试了一下,下面说的错误日志指的是SQLSERVER ERRORLOG 一般在C:\Program Fi ...
- 好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
转载:http://www.cnblogs.com/lyhabc/p/3322437.html 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是 ...
- 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
原文:挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自 ...
- SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自动备份数据库,一键还原数据库,发送备份数据库日志报告到邮箱,自动压缩备份好的数据库 定期执行数 ...
- 进阶宝典一|SqlServer数据库自动备份设置
很多人都没机会接触到数据库备份,经常操作的要么是数据库管理员,要么是项目负责人.那是不是说数据库备份就不用学了? 不,其实作为开发人员应该要了解数据备份,数据备份的手段有很多:软件备份.脚本备份.其他 ...
- Mysql 定时备份操作
1.创建保存备份文件的路径/mysqldata #mkdir /bak/mysqlbak 2.创建/usr/sbin/bakmysql文件 #vi /usr/sbin/bakmysql.sh 3.写入 ...
- SQL点滴18—SqlServer中的merge操作,相当地风骚
原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tec ...
- SVN服务迁移备份操作步骤
SVN服务备份操作步骤 1.准备源服务器和目标服务器 源服务器:192.168.1.250 目标服务器:192.168.1.251 root/rootroot 2.对目标服务器(251)装SVN服务器 ...
随机推荐
- test back
python Mysql 下载地址 http://sourceforge.net/projects/mysql-python/
- Elasticsearch【正则搜索】分析&实践
在ES中有很多使用不是很频繁的查询,可以达到一些特殊的效果.比如基于行为路径的漏斗模型.本篇就从使用上讲述一下正则表达式查询的用法. Regexp Query regexp允许使用正则表达式进行ter ...
- 源于《Unity官方实例教程 “Space Shooter”》思路分析及相应扩展
教程来源于:Unity官方实例教程 Space Shooter(一)-(五) http://www.jianshu.com/p/8cc3a2109d3b 一.经验总结 教程中步骤清晰,并且 ...
- WebGIS开源解决方案之环境搭建(二)
续上篇,本文主要介绍开源GIS数据库产品postgres的安装, 从postgis官网下载安装文件,下载地址http://postgis.net 本文一postgresql-9.4.4-3-windo ...
- hdu4463 Outlets 最小生成树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4463 很裸的一道题目,稍微处理一下输入即可 代码: #include<iostream> ...
- 深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(一)
VPC的概念与基于vxlan的overlay实现很早就有了,标题中的"新"只是一个和传统网络的相对概念.但从前年开始,不同于以往基础网络架构的新一代SDN网络才真正越来越多的走进国 ...
- Java7中的ForkJoin并发框架初探(上)——需求背景和设计原理
原文:发表于 2013 年 8 月 26 日 由 三石 0. 处理器发展和需求背景 回想一下并发开发的初衷,其实可以说是有两点,或者说可以从两个方面看. 对于单核的处理器来说,在进行IO操作等比较费时 ...
- jQuery手风琴菜单!!!!
jQuery手风琴菜单 第一次发博客也不知道说点什么好,以前敲得一个手风琴菜单刚刚整理出来了,就来分享个大家 手风琴的排版 排版完事了,接下来就写样式吧,把自己喜欢的颜色或者是图片添加进来,就会变成你 ...
- 一个简单易用的容器管理平台-Humpback
什么是Humpback? 在回答这个问题前,我们得先了解下什么的 Docker(哦,现在叫 Moby,文中还是继续称 Docker). 在 Docker-百度百科 中,对 Docker 已经解释得很清 ...
- Java调用IDL方法总结
Java调用IDL方法总结 Java调用IDL程序,需要先在java中加载IDL的java包(javaidlb.jar),该包不需要下载,在IDL的安装目录中可以直接找到(C:\Program Fil ...