还原方案

数据库级(数据库完整还原)

还原和恢复整个数据库。数据库在还原和恢复操作期间会处于离线状态。SQL SERVER不允许用户备份或还原单个表。还原方案是指从一个或多个备份中还原数据、继而恢复数据库的过程。

不同恢复模式所支持的各种还原方案

简单恢复模式下

这是基本的还原策略,数据库完整还原可能涉及完整数据库备份的简单还原和恢复。另外,完整的数据库还原还可能涉及还原完整数据库备份,以及还原和恢复差异备份

完整/大容量日志恢复模式下

这是基本的还原策略,数据库完整还原涉及还原完整数据库备份或差异备份,以及所有后续日志备份(按顺序)。通过恢复并还原上一次日志备份,完成数据库完整还原。

在恢复数据库前,SQL Server 数据库引擎都会保证整个数据库在逻辑上的一致性。例如,还原一个文件以后,必须恢复完整的一套日志文件备份,以便将该文件里的事务前滚足够长度,与数据库保持一致,才能恢复该文件并使其在线。

数据库完整还原

在简单情况下,还原操作只需要一个完整数据库备份,一个差异数据库备份和后续日志备份。

数据库还原到故障点操作步骤

  1. 首先备份活动事务日志(日志的”尾部“)
  2. 按备份的创建顺序还原最新的完整数据库备份,最新的差异备份(如果有)及所有后续日志备份

若源数据库是简单模式,则没有相应的日志备份。恢复工作仅限于还原一个完整数据库备份,以及最后的一个差异备份。

数据库发生灾难后,如何将之恢复到一个特定的恢复点

  • 场景

一个关键数据表被人在中午 12 点 01 份误删,如何将其恢复到 12 点的那个状态呢?

  • 解决方案

    通过恢复日志文件到指定恢复点的方式来实现。有以下几个先决要求,而且是要在灾难发生之前,数据库就必须满足以下所有条件:
  1. 数据库的恢复模式必须是完整恢复模式
  2. 灾难发生前,数据库曾做过一个完整数据库备份
  3. 在上次完整数据库备份后,若做过任何日志备份,这些日志备份现在每个都能找到。

符合以上三个要求的数据库就可以使用备份恢复方法将数据库恢复到完整备份后的任意一个时间点。

将数据库恢复到故障点的基本步骤如下:

  1. 备份活动事务日志(也称为日志尾部)。此操作将创建尾日志备份。如果活动事务日志在灾难发生后变得不可用,则该日志部分的所有事务都将丢失。
  2. 还原最新完整数据库备份,而且不做事务恢复
  3. 如果存在差异备份,则还原最新的差异备份,而不做事务恢复
  4. 从还原备份后创建的第一个事务日志备份开始,使用 NORECOVER 依次还原日志
  5. 恢复数据库到某个时间点(RESTORE DATABASE database_name with stopat='???', RECOVERY)
完整数据库备份+差异备份+事务日志备份 示例

示例前准备

清空表 msdb..backupset 上 2018/09/28 之前的记录,注意时间

  1. USE msdb;
  2. GO
  3. EXEC sp_delete_backuphistory @oldest_date = '09/28/2018';

AdventureWorksDW2018 库的恢复模式修改为完整恢复模式,否则会报 4208 错误

  1. USE master ;
  2. ALTER DATABASE AdventureWorksDW2018 SET RECOVERY FULL ;
  1. -- 显示 AdventureWorksDW2018 这个数据库历史上曾经的备份信息。
  2. use msdb;
  3. select distinct s.first_lsn, s.last_lsn,
  4. s.database_backup_lsn, s.backup_start_date, s.backup_finish_date,
  5. s.type, y.physical_device_name
  6. from msdb..backupset s inner join
  7. msdb..backupfile f on f.backup_set_id = s.backup_set_id inner join
  8. msdb..backupmediaset m on s.media_set_id = m.media_set_id inner join
  9. msdb..backupmediafamily y on m.media_set_id = y.media_set_id
  10. where (s.database_name = 'AdventureWorksDW2018')
  11. order by s.backup_finish_date desc;

示例操作内容

将创建 AdventureWorksDW2018 数据库的尾日志备份,将还原较早的完整数据库备份和日志备份,最后还原尾日志备份。事务恢复动作将在最后的尾日志恢复步骤中完成,在此之前数据库不能被访问。

  1. 对数据库做一个全备份
    1. BACKUP DATABASE [AdventureWorksDW2018] TO DISK='F:\backup\AdvFull1.bak'
  2. 对数据库做一个操作,然后做一个日志备份
    1. --drop table t2;
    2. use AdventureWorksDW2018;
    3. create table t2(number int, name nvarchar(50));
    4. insert into t2 values(1, 'a');
    5. go
    6. BACKUP LOG [AdventureWorksDW2018] TO DISK='F:\backup\AdvLog2.bak'
  3. 对数据库做一个操作
    1. use AdventureWorksDW2018;
    2. insert into t2 values(2, 'b');
    3. go
  4. 此时灾难发生,试图创建一个尾日志备份
    1. use master
    2. backup log [AdventureWorksDW2018] to disk = 'F:\backup\AdvLogTail.bak' with norecovery;
    3. go
  5. 删除 AdventureWorksDW2018 数据库
    1. drop database [AdventureWorksDW2018];
  6. 从备份恢复一个全备份
    1. restore database [AdventureWorksDW2018] from disk = 'F:\backup\AdvFull1.bak' with norecovery;
  7. 从备份中恢复一个正常的日志备份
    1. restore log [AdventureWorksDW2018] from DISK='F:\backup\AdvLog2.bak' with norecovery;
  8. 用 STOPAT 恢复尾日志文件
    1. restore log [AdventureWorksDW2018] from DISK='F:\backup\AdvLogTail.bak' with stopat = '2018-09-27 16:23:00.000', recovery;
    2. go
  9. 验证数据完整性
    1. use AdventureWorksDW2018
    2. select * from t2;

方案缺点

要做一次数据库的完整备份恢复,这在时间上和空间上都是代价高昂的

  • 时间上

    SQL Server 需要很长的时间来重建整个数据库。在此过程中,数据库是不能访问的。重建时间的长短基本由硬盘的速度决定。一个上TB的数据库做一个完整恢复可能需要近一天的时间,这个等待时间很多系统不能接受。

  • 空间上

    一个完整备份的大小和数据库已使用空间大小基本一致。若备份要放在硬盘上,需要硬盘能提供2倍的存储空间,一份放数据库,一份放备份。

参考资料

<<SQL Server 2012 实施与管理实战指南>>

SQL Server 2008/2012 完整数据库备份+差异备份+事务日志备份 数据库完整还原(一)的更多相关文章

  1. SQL Server 2008 维护计划实现数据库备份

    SQL Server 2008 维护计划实现数据库备份(最佳实践) 2013-08-29 09:08 by 听风吹雨, 173 阅读, 2 评论, 收藏, 编辑 一.背景 之前写过一篇关于备份的文章: ...

  2. SQL Server 2008 R2 清空数据库中ldf日志文件

    /************************************************************ * Sql Server 2008 R2 清空数据库中ldf日志文件 * 将 ...

  3. SQL Server 2008 R2 主从数据库同步

    一.准备工作: 主数据库服务器: OS:Windows Server 2008 R2    DB: SQL Server 2008 R2 Hostname : CXMasterDB IP: 192.1 ...

  4. SQL SERVER 2008/2012/2012R2/2014 设置开启远程连接(sa配置)

    本文方案适用于Microsoft Sql Server 2008/2012/2012 r2/2014版本,以下简称MSSQLSERVER. MSSQL默认是不允许远程连接,并且禁用sa账户的.如果想要 ...

  5. SQL Server 2008 R2 主从数据库同步设置

    一.准备工作: 主数据库服务器: OS:Windows Server 2008 R2    DB: SQL Server 2008 R2 Hostname : CXMasterDB IP: 192.1 ...

  6. 基于Sql Server 2008的分布式数据库的实践(五)

    原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ------------------------------------------------------------- ...

  7. 基于Sql Server 2008的分布式数据库的实践(四)

    原文 基于Sql Server 2008的分布式数据库的实践(四) 数据库设计 1.E-R图 2.数据库创建 Win 7 1 create database V3 Win 2003 1 create  ...

  8. 基于Sql Server 2008的分布式数据库的实践(三)

    原文 基于Sql Server 2008的分布式数据库的实践(三) 配置PHP 1.打开PHP配置文件,找到extension=php_mssql.dll,将前面的注释符号去掉 2.找到mssql.s ...

  9. 基于Sql Server 2008的分布式数据库的实践(二)

    原文 基于Sql Server 2008的分布式数据库的实践(二) 从Win7连接Win2003的Sql Server 2008 1.新建链接服务器链接到Win2003的Sql Server 2008 ...

  10. 基于Sql Server 2008的分布式数据库的实践(一)

    原文 基于Sql Server 2008的分布式数据库的实践(一) 配置Sql Server 2008(Win7) 1.打开SQL server2012,使用windows身份登录 2.登录后,右键选 ...

随机推荐

  1. Vue 路由导航守卫

    Vue 路由导航守卫 一:全局守卫 (1) router.beforeEach beforeEach((to, from, next) => {}) 接收三个参数,在路由切换成功之前调用 to ...

  2. Flutter中如何取消任务

    前言 在开发过程中,取消需求是很常见的,但很容易被忽略.然而,取消需求的好处也很大.例如,在页面中会发送很多请求.如果页面被切走并处于不可见状态,就需要取消未完成的请求任务.如果未及时取消,则可能会导 ...

  3. 明解STM32—GPIO理论基础知识篇之寄存器原理

    ​ 一.前言 在之前的STM32的GPIO理论基础知识中,分别对基本结构和工作模式进行了详细的介绍.GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析:GPIO工作模式中主要介绍GPI ...

  4. CentOS8 搭建zabbix监控系统

    哈喽,有些时间没有更新公众号.今日更新一下. 安装MySQL数据库 # 安装wget [root@cby ~]# dnf install wget -y # 下载MySQL源 [root@cby ~] ...

  5. LeeCode 二叉树问题(二)

    二叉树的构建 LeeCode 106: 从中序遍历与后续遍历序列构造二叉树 题目描述 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, posto ...

  6. windows安装zabbix错误代码

    zabbix安装:windows安装zabbix客户端很多坑,设计到很多问题,常见的问题有安装完成防火墙没有关闭,zabbix服务端接收不到客户端的信息.zabbix在cmd中安装的时候报错误代码,安 ...

  7. boot-admin整合flowable官方editor-app进行BPMN2.0建模

    正所谓百家争鸣.见仁见智.众说纷纭.各有千秋!在工作流bpmn2.0可视化建模工具实现的细分领域,网上扑面而来的是 bpmn.js 这个渲染工具包和web建模器,而笔者却认为使用flowable官方开 ...

  8. 这可能是最全面的MySQL面试八股文了

    什么是MySQL MySQL是一个关系型数据库,它采用表的形式来存储数据.你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列).行代表每一行数据,列代表该行中的每个值.列上的值是 ...

  9. boot-admin整合Quartz实现动态管理定时任务

    淄博烧烤爆红出了圈,当你坐在八大局的烧烤摊,面前是火炉.烤串.小饼和蘸料,音乐响起,啤酒倒满,烧烤灵魂的party即将开场的时候,你系统中的Scheduler(调试器),也自动根据设定的Trigger ...

  10. vue2.x/vue3.0中使用ts

    vue2.x(vue-cli3)中使用ts      https://www.jianshu.com/p/3cbcdd766295 https://www.cnblogs.com/xiaohuizha ...