数据库备份分为数据文件备份和日志文件备份,数据文件的备份分为:完整备份和差异备份。在SQL Server 2012中,能够将数据分布式备份到不同的存储设备上,一般情况,只将数据备份到一个备份文件(.bak)中,只有在备份超大的数据库时,才需要分布式备份,对于备份集(backup set),备份介质(backup Media),备份族(backup family),镜像备份,等等看似复杂的术语,不用深入了解,简单了解一下基本知识:

  • backup set:是数据或日志的一次备份;
  • backup media:是备份存储的文件,分为两部分:media header和content,content是由一个或多个backup sets构成的;
  • 镜像备份:一次备份操作创建一个相同的备份,最多三个镜像备份;
  • backup  family:多个备份设备和镜像备份构成backup family;

数据库备份的策略一般是:一周一次完整备份,一天一次差异备份,一小时一次事务日志备份,根据数据容灾的要求,适当增减备份的时间间隔。

为了便于管理数据备份文件,推荐的做法是:

  • 数据/日志的每次备份都使用一个单独的备份文件,数据备份的扩展名是 .bak,日志备份的扩展名是.trn;
  • 合理命名每个备份文件,建议使用:database_name+date+time+(.bak/.trn),该命名方式,很容易识别备份的数据库和开始备份的时间;
  • 创建schedule,定时清理备份文件,避免备份文件耗尽磁盘空间;

一,创建数据库的完整备份和差异备份

使用backup database命令创建数据库的数据文件的备份,backup database 命令语法(简化):

BACKUP DATABASE database_name
TO DISK = 'physical_device_name'
[ WITH { DIFFERENTIAL
| COPY_ONLY
| { COMPRESSION | NO_COMPRESSION }
| { NOINIT | INIT }
| { NOSKIP | SKIP }
| { NOFORMAT | FORMAT }
| STATS [ = percentage ] }]

1,完整备份和差异备份

差异备份由DIFFERENTIAL 关键字指定,只备份从上一次完整备份之后发生更新的数据,而不是备份整个数据库,通常情况下,差异备份比完整备份占用的空间更少。差异备份的参考基准是上一次完整备份,而,事务日志,只备份是从上一次差异备份之后产生的事务日志。因此,备份是有顺序的,如果存在以下备份序列:

  1. FullBackup1.bak
  2. DifferentialBackup2.bak
  3. LogBackup3.trn
  4. DifferentialBackup4.bak
  5. LogBackup5.trn
  6. 出现错误

还原的策略是:备份尾日志,使数据库处于Restoring状态,依次还原FullBackup1.bak,DifferentialBackup4.bak,LogBackup5.trn,尾日志,就能将数据库还原到一个合适的有效时间点。

在执行完整备份和差异备份时,SQL Server会备份足够的事务日志,用于将数据库还原到一致性的状态。对于master数据库,只能执行完整备份。

  • During a full or differential database backup, SQL Server backs up enough of the transaction log to produce a consistent database when the backup is restored.
  • Only a full database backup can be performed on the master database.

2,只复制(COPY_ONLY )备份

备份是有顺序的,使用COPY_ONLY选项不会影响备份的正常顺序,仅仅创建一个数据库的副本。

差异备份的基准是上一次完整备份,即差异是指从上一次full backup之后,对数据文件执行的更新操作。如果执行一次Copy-Only的完整数据库备份,不会影响差异备份的base(基准),该base是上一次full backup,而非本次 Copy-only full backup。

3,压缩数据{ COMPRESSION | NO_COMPRESSION }

在备份时,将数据压缩,由于压缩的备份较小,能够减少Disk Sapce和Disk IO消耗,提高数据备份的速度,但是,备份文件的压缩和解压缩十分消耗CPU资源。

4,建议:每一次数据备份,都存储在单个备份文件上

由于硬盘空间有限,不可能保留过多的备份文件,将数据的每一次备份都存储在单个文件上,便于对备份文件进行管理(删除或归档)。

每次备份都存储在新的备份上,搭配选项 Init、Skip、Format,将数据备份存储在新的备份文件上,这三个选项的含义是:

  • Format 选项:将备份文件格式化,默认选项是 NoFormat;
  • Init 选项:初始化备份文件,Init选项不会初始化Media Header,只将backup set初始化,默认选项是NoInit,将备份存储到备份文件的末尾;
  • SKIP 选项:不做任何检查,不会检查Media Header是否有效,也不会检查backup set的有效期,默认选项是NoSkip;

5,备份进度(stats)

使用stats选项,每当备份进行到一定的百分比时,SQL Server显式进度消息,默认值是10,即,每完成10%,SQL Server显式完成的进度消息,例如,设置stats=10,当备份进程完成30%时,SQL Server会打印消息:30 percent processed.

The STATS option reports the percentage complete as of the threshold for reporting the next interval. This is at approximately the specified percentage; for example, with STATS=10, if the amount completed is 40 percent, the option might display 43 percent. For large backup sets, this is not a problem, because the percentage complete moves very slowly between completed I/O calls.

二,数据备份操作

建议:每一次数据备份,都存储在单个备份文件上

1,数据库完整备份,没有指定Differential选项

backup database [TestSite]
to disk = 'D:\TestDBBackupFolder\Sitedb_bak1.bak' --specify new backup file
with
compression,
format,
init,
skip,
stats=5

2,数据库差异备份,指定Differential选项

backup database [TestSite]
to disk = 'D:\TestDBBackupFolder\Sitedb_bak2.bak' --specify new backup file
with
differential
,
compression,
format,
init,
skip,
stats=5

三,事务日志备份

要执行事务日志的备份,数据库的恢复模式(Recovery Mode)必须是FULL,并且数据库必须执行过一次数据库的完整备份操作,否则,事务日志将处于自动截断(Auto-Truncate)状态,无法进行事务日志备份。

使用backup log命令对事务日志进行备份,跟backup database命令的差异是,不能使用differential选项,多了NoRecovery 和 NO_Truncate选项;

BACKUP LOG database_name
TO DISK = 'physical_device_name'
[ WITH {
COPY_ONLY
| { COMPRESSION | NO_COMPRESSION }
| { NOINIT | INIT }
| { NOSKIP | SKIP }
| { NOFORMAT | FORMAT }
| STATS [ = percentage ]
| { NORECOVERY | STANDBY = undo_file_name }
| NO_TRUNCATE }]

1,尾日志备份

NORECOVERY 选项,指定备份事务日志的尾部,并使数据库处于RESTORING状态

Backs up the tail of the log and leaves the database in the RESTORING state. NORECOVERY is useful when failing over to a secondary database or when saving the tail of the log before a RESTORE operation. To perform a best-effort log backup that skips log truncation and then take the database into the RESTORING state atomically, use the NO_TRUNCATE and NORECOVERY options together.

2,日志截断

正常情况下,数据库处于Online状态,在进行事务日志备份时,如果不指定 NO_TRUNCATE 选项,那么数据库将已备份的事务日志文件截断,避免事务日志过大,耗尽disk空间;如果指定 NO_TRUNCATE 选项,表示日志备份不会将事务日志文件截断,该选项一般在数据库处于异常状态时使用。

Specifies that the log not be truncated and causes the Database Engine to attempt the backup regardless of the state of the database. Consequently, a backup taken with NO_TRUNCATE might have incomplete metadata. This option allows backing up the log in situations where the database is damaged.
The NO_TRUNCATE option of BACKUP LOG is equivalent to specifying both COPY_ONLY and CONTINUE_AFTER_ERROR.
Without the NO_TRUNCATE option, the database must be in the ONLINE state. If the database is in the SUSPENDED state, you might be able to create a backup by specifying NO_TRUNCATE. But if the database is in the OFFLINE or EMERGENCY state, BACKUP is not allowed even with NO_TRUNCATE.

3,自动截断模式

如果数据库符合以下两种条件之一,那么Database就处于自动截断模式:

  • 数据库的恢复模式是simple;
  • 数据库的恢复模式是full 或 bulk_Logged,并且没有做过数据库完整备份;

自动截断模式是指数据库引擎把处于可还原状态(recoverable)状态的事务日志自动截断,使日志文件能够重复使用,避免日志文件无限增长。如果事务日志不是自动截断模式,那么事务日志会保存到日志文件中,导致日志文件持续增长。只有做日志备份时,日志文件才会被截断;如果没有定期的日志备份,那么日志文件会持续地增长,直到耗尽磁盘的所有空间,因此,必须制定一个日志备份计划,把事务日志截断,才能使数据库的事务日志文件的大小保持在一个可以管理的水平上。

select db_name(database_id) as DBName,
case when last_log_backup_lsn is null then 'Auto' else 'Manul' end as TruncateMode
from sys.database_recovery_status

四,事务日志备份

1,正常情况下的事务日志备份

backup log [TestSite]
to disk = 'D:\TestDBBackupFolder\Sitedb_bak3.trn'
with
compression,
format,
init,
skip,
stats=5

2,备份尾日志,进而还原数据库

backup log [TestSite]
to disk = 'D:\TestDBBackupFolder\Sitedb_bak4.trn'
with
compression,
format,
init,
skip,
stats=5,
norecovery

参考doc:

BACKUP (Transact-SQL)

backup1:开始数据库备份的更多相关文章

  1. 【RMAN备份】数据库备份

    转载请注明地址. 备份片文件名通配符: %c 备份片的拷贝数 %D 位于该月中的第几天 (DD) %M 位于该年中的第几月 (MM) %F 一个基于DBID 唯一的名称,这个格式的形式为c-IIIII ...

  2. Oracle 数据库备份实战

    最近公司的客户希望使用oracle数据库,所以我们只好将数据从mysql数据库迁移到oracle数据库,并对oracle数据库制定了一个备份策略,之前虽然对oracle很熟悉,但做备份策略还是第一次, ...

  3. 数据库日常维护-CheckList_02有关数据库备份检查

    数据库备份是DB日常运维中最基本的也是最重要的工作,很多情况下都是做成作业形式实现自动化周期性的做全备.差异以及日志备份.那么,如果作业出现问题没有完成工作,我们可以设置自动报警如email被动提醒我 ...

  4. [django]手动数据库备份

    基本原理是按钮点击后,系统查询出数据表中信息,然后在网页中导出相关表格! 若有自动数据库备份的兄弟,指点一下! 模板代码: <a href="{% url 'work_backup' ...

  5. Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复

    Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...

  6. SQL Server数据库备份的镜像

    SQL Server数据库备份的镜像 一个完整备份可以分开镜像 USE master GO BACKUP DATABASE [testdatabase] TO DISK = N'C:\testdata ...

  7. SQL Server 数据库备份还原和数据恢复

      认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点. 数据 ...

  8. Sql Server数据库备份和恢复:原理篇

    本文与您探讨为什么Sql Server有完整备份.差异备份和事务日志备份三种备份方式,以及为什么数据库又有简单模式.完整模式和大容量日志模式这三种恢复模式.本文内容适用于2005以上所有版本的Sql ...

  9. TODO:MongoDB MySQL数据库备份

    TODO:MongoDB MySQL数据库备份 1. MongoDB使用命令备份 mongodump进行整个数据库备份,主要用到的命令参数: -d 要备份的数据库 -o 输出的路径 ./mongodu ...

随机推荐

  1. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  2. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  3. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  4. IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)

    首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...

  5. 【NLP】揭秘马尔可夫模型神秘面纱系列文章(一)

    初识马尔可夫和马尔可夫链 作者:白宁超 2016年7月10日20:34:20 摘要:最早接触马尔可夫模型的定义源于吴军先生<数学之美>一书,起初觉得深奥难懂且无什么用场.直到学习自然语言处 ...

  6. 高效而稳定的企业级.NET Office 组件Spire(.NET组件介绍之二)

    在项目开发中,尤其是企业的业务系统中,对文档的操作是非常多的,有时几乎给人一种错觉的是”这个系统似乎就是专门操作文档的“.毕竟现在的很多办公中大都是在PC端操作文档等软件,在这些庞大而繁重的业务中,单 ...

  7. 脑洞大开之采用HTML5+SignalR2.0(.Net)实现原生Web视频

    目录 对SignalR不了解的人可以直接移步下面的目录 SignalR系列目录 前言 - -,我又来了,今天废话不多说,我们直接来实现Web视频聊天. 采用的技术如下: HTML5 WebRTC Si ...

  8. 《LoadRunner12七天速成宝典》签售会2016-12-17北京

    报名地址: http://www.after615.com/actives/s?id=3141&time=1480042829608&sign=9ac8e25e9ab3cf57f613 ...

  9. 用Java代码实现拦截区域网数据包

    起因: 吃饭的时间在想如果区域网内都是通过路由器上网,那如何实现拦截整个区域网的数据包,从而实现某种窥探欲. 思路:      正常是通过电脑网卡预先设置或分配的IP+网关对路由器进行通讯,比如访问百 ...

  10. Linux基础介绍【第五篇】

    linux权限位 Linux文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件属主权限.属组权限.其他用户权限. r:read可读权限,对应数字4: w:write可写权限,对应数字 ...