AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 332569
Accepted
Fajela Tajkiya
Fajela Tajkiya
Asked: 2023-10-27 10:41:56 +0800 CST2023-10-27 10:41:56 +0800 CST 2023-10-27 10:41:56 +0800 CST

SQL Server 日志备份是否包括以前的完整备份或差异备份中备份的日志记录?

  • 772

我一直在阅读有关 SQL Server 中日志备份的 Microsoft 文档,并发现以下声明:

(日志备份)指定仅备份事务日志。日志从上次成功执行的日志备份开始备份到当前日志末尾。在创建第一个日志备份之前,您必须创建完整备份。”

由此我了解到,日志备份是备份上次日志备份以来的日志记录。但是,我也知道差异备份和完整备份也包含一些日志记录。这引出了我的问题:

日志备份是否还包括之前的完整备份或差异备份中备份的日志记录?或者日志备份是否严格备份从上次日志备份开始的日志记录,完整备份或差异备份不会干扰或影响后续日志备份中备份的内容?

任何见解将不胜感激。提前致谢!

sql-server
  • 2 2 个回答
  • 44 Views

2 个回答

  • Voted
  1. Best Answer
    Tibor Karaszi
    2023-10-29T00:01:58+08:002023-10-29T00:01:58+08:00

    完整备份和差异备份都包含将数据页复制到备份介质期间生成的日志记录。即,当备份开始时,执行检查点。这是数据页复制阶段。在此阶段可以生成日志记录(修改在数据库中完成)。在此数据复制阶段之后,自上一个检查点以来生成的那些日志记录也将写入备份介质。如果您比较挑剔,可能还不止于此: SQL Server 日志备份是否包括在之前的完整备份或差异备份中备份的日志记录?

    日志备份还将包含上述日志记录。这就是为什么您可以“跳过”恢复完整备份或差异备份。您所需要的只是一个不间断的日志备份链。假设您有这些备份:

    F1, L2, L3, F4, L5, L6
    

    您可以通过以下方式恢复:

    F1, L2, L3, L5, L6
    

    除非这些日志备份包含所有日志记录,否则上述情况是不可能的。即,它们形成不间断的日志备份链(包含不间断的日志记录链)。

    • 2
  2. John K. N.
    2023-10-27T15:26:31+08:002023-10-27T15:26:31+08:00

    你的说法不太正确:

    但是,我也知道差异备份和完整备份也包含一些日志记录。

    完整备份

    完整备份仅包含事务日志的一小部分,以便 SQL Server 可以创建由 *.MDF 文件和 *.LDF 文件组成的数据库。

    完整数据库备份备份整个数据库。这包括部分事务日志,以便在恢复完整数据库备份后可以恢复完整数据库。完整数据库备份代表备份完成时的数据库。

    参考: 完整数据库备份 (SQL Server) (Microsoft Learn | SQL)

    您可以使用以下命令查看备份文件的内容:

    RESTORE FILELISTONLY FROM DISK = 'F:\BACKUP_LOCATION\StackExchange_FULL_20231021_223000.bak'
    

    这将返回定义数据库的文件列表。

    +-------------------+---------------------------------------------+------+---------------+----------+----------------+--------+-----------+---------+--------------------------------------+-------------+--------------+-------------------+-----------------+-------------+--------------+---------------------+--------------------------------------+------------+-----------+---------------+-------------+
    |    LogicalName    |                PhysicalName                 | Type | FileGroupName |   Size   |    MaxSize     | FileId | CreateLSN | DropLSN |               UniqueId               | ReadOnlyLSN | ReadWriteLSN | BackupSizeInBytes | SourceBlockSize | FileGroupId | LogGroupGUID | DifferentialBaseLSN |         DifferentialBaseGUID         | IsReadOnly | IsPresent | TDEThumbprint | SnapshotUrl |
    +-------------------+---------------------------------------------+------+---------------+----------+----------------+--------+-----------+---------+--------------------------------------+-------------+--------------+-------------------+-----------------+-------------+--------------+---------------------+--------------------------------------+------------+-----------+---------------+-------------+
    | StackExchange     | E:\SQL2022CS\SQL_DATA\StackExchange.mdf     | D    | PRIMARY       |  8388608 | 35184372080640 |      1 |         0 |       0 | F326A779-A4C1-4E02-8B2C-81D34D2DC71B |           0 |            0 |           4587520 |            4096 |           1 | NULL         |   42000000520800001 | E5AB4046-80EA-4F08-82FC-DFB2703583F5 |          0 |         1 | NULL          | NULL        |
    | StackExchange_log | F:\SQL2022CS\SQL_LOGS\StackExchange_log.ldf | L    | NULL          | 75497472 |  2199023255552 |      2 |         0 |       0 | 3B04B400-C534-4822-AF24-D9980391FD0F |           0 |            0 |                 0 |            4096 |           0 | NULL         |                   0 | 00000000-0000-0000-0000-000000000000 |          0 |         1 | NULL          | NULL        |
    +-------------------+---------------------------------------------+------+---------------+----------+----------------+--------+-----------+---------+--------------------------------------+-------------+--------------+-------------------+-----------------+-------------+--------------+---------------------+--------------------------------------+------------+-----------+---------------+-------------+
    
    

    差速器杯

    差异备份仅包含自上次完整备份以来数据库中修改的[范围]。备份过程扫描数据库文件 *.mdf 和构成数据库的任何其他 *.ndf 文件的范围(8 页 = 1 个范围;1 页 = 8 kb 数据),其中包含页面已更改的标记自上次备份以来。

    差异备份基于最近的、以前的完整数据备份。差异备份仅捕获自完整备份以来发生更改的数据。差异备份所基于的完整备份称为差异的基础。完整备份除仅复制备份外,可以作为一系列差异备份的基础,包括数据库备份、部分备份和文件备份。文件差异备份的基本备份可以包含在完整备份、文件备份或部分备份中。

    和...

    差异备份捕获在创建差异基础和创建差异备份之间发生更改的任何范围(八个物理连续页的集合)的状态。

    参考: 差异备份 (SQL Server) (Microsoft Learn | SQL)

    与您的理解相反,差异备份不包含事务日志的一部分。

    这是差异备份内容的图片:

    基于范围的差异备份图片

    事务日志备份

    事务日志备份是事务日志文件的备份,其中包含自上次完整备份(初始 TLOG 备份)或自上次事务日志备份以来在数据库中所做的事务和修改。它本质上是一系列修改。

    每个 SQL Server 数据库都有一个事务日志,记录所有事务以及每个事务对数据库所做的修改。事务日志是数据库的关键组件,如果出现系统故障,可能需要事务日志才能使数据库恢复到一致状态。

    参考: SQL Server 事务日志架构和管理指南(Microsoft Learn | SQL)

    因此,事务日志备份是针对数据库执行的事务和修改的副本。

    回答您的问题

    日志备份是否还包括之前的完整备份或差异备份中备份的日志记录?

    某种程度上,事务日志备份包含上次完整备份之后/期间所做的所有修改。全量备份中的事务日志备份只是为了方便数据库的恢复(创建*.mdf和*.ldf文件)并使数据库进入一致状态。差异备份不会影响事务日志备份。

    或者日志备份是否严格备份从上次日志备份开始的日志记录,完整备份或差异备份不会干扰或影响后续日志备份中备份的内容?

    在您进行初始完整备份后,是的。

    让我解释

    如果您有以下备份链:

    F = 完整 D = 差异 L = 事务日志备份

    M--------------T--------------W--------------T------------F----X----- (Days of Week)
    F -> L -> L -> D -> L -> L -> D -> L -> L -> F -> L -> -> D -> L      (Backups)
    

    ...然后您可以使用星期一的完整备份 (F) 和直​​至 X 的所有事务日志备份 (L) 将数据库恢复到星期五标有 X 的位置。

    或者,您可以使用周一的完整备份 (F) 和周三的差异备份 (D) 以及周五之前的所有事务日志备份 (L) 来到达位置 X。

    我在对问题如何判断备份日志链是否损坏? 的回答中发布了一个示例。

    本质上,它可以归结为:如果您有一个不间断的事务日志备份链,直到给定点并以完整备份为基础,那么您可以恢复到该链上的任何点,因为事务日志备份包含所有事务和修改自上次事务日志备份或初始完整备份以来。

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve