还原方案

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

还原和恢复整个数据库。数据库在还原和恢复操作期间会处于离线状态。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 之前的记录,注意时间

USE msdb;
GO
EXEC sp_delete_backuphistory @oldest_date = '09/28/2018';

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

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

示例操作内容

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

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

    作者:京东科技 刘清洁 1.痛点(*) 自动化测试有2种形式,接口自动化和UI自动化.而UI自动化经常会被登录节点堵塞,例如验证码.图形.滑块等,尽管有些方式可以识别图形和定位滑块位置,但成功率都不高 ...

  2. 移动端网页--better-scroll介绍

    移动端网页--better-scroll介绍 Options 起始位置及滚动方向 startX:0 开始时的X轴位置 startY:0 开始时的Y轴位置 scrollY: true 滚动方向为 Y 轴 ...

  3. Junit环境配置和在IDEA中使用Junit学习记录

    Junit环境配置 步骤1:检查电脑中Java环境是否配置成功 因为JUnit 是 Java 的一个框架,所以最根本的需要是在你的机器里装有 JDK. 1.1 进入cmd控制台界面,输入java/ja ...

  4. 管理WEB服务器文件的WebDAV协议&HTTP大跃进--QUIC与HTTP30&WEB安全攻击概述

    管理WEB服务器文件的WebDAV协议 WebADV协议 WEBDAV追加方法 WeDAV请求示例 HTTP大跃进--QUIC与HTTP30 QUIC&HTTP3.0 HTTP2.0的问题 队 ...

  5. Java SpringBoot 7z 压缩、解压

    Java SpringBoot 7z 压缩.解压 cmd 7z 文件压缩 7z压缩测试 添加依赖 <dependency> <groupId>org.apache.common ...

  6. Solidity 入门

    基本语法 版本指令 所有Solidity源码都必须指明版本,用于标明Solidity编译器的版本,这是为了避免将来新的编译器破坏代码 pragma solidity ^0.4.20; // 声明版本 ...

  7. 3520. 【NOIP2013模拟11.7B组】原根(math)

    题目: 考试想法: 考试的时候觉得这些数学公式太恶心了,所以就直接跳过了. 正解: 直接暴力模拟就可以了. 代码: #include<bits/stdc++.h> using namesp ...

  8. Redis主从和哨兵搭建

    今天主要分享Redis主从架构和哨兵的搭建. 主从集群搭建 总共三个节点,一个主节点和两个从节点.都安装在一台机器上模拟主从集群,信息如下: IP PORT 角色 192.168.246.140 70 ...

  9. Python_16 配置文件与封装

    一.查缺补漏 1. ctrl + alt +L 规范格式 2. Python 使用 ini&yaml 配置文件 http://testingpai.com/article/1621245437 ...

  10. Java 20 新功能介绍

    ➜ bin pwd /Users/darcy/develop/jdk-20.0.1.jdk/Contents/Home/bin ➜ bin ./java -version openjdk versio ...