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 / 问题 / 61187
Accepted
user1910240
user1910240
Asked: 2014-03-19 10:15:50 +0800 CST2014-03-19 10:15:50 +0800 CST 2014-03-19 10:15:50 +0800 CST

了解备份类型

  • 772

我最近开始担任初级 DBA 的角色......昨天我为一位同事创建了一个新数据库,我的老板让我确保我们尽快得到一个备份计划。

我没有多想,进入代理,创建了一个每晚凌晨 1 点进行完整备份的工作。为自己感到骄傲,我去睡觉了,不再想它了。今天早上我开始认为这还不够好——如果数据库在凌晨 12 点死掉,那么他们将丢失近 23 小时的数据,这可能会让我被解雇。:)

因此,为了确保我理解这一点——我认为除了完整备份之外,我还需要进行差异备份。看完本教程后,我有几个问题:

  1. 我是否会进入代理并添加一个每小时(例如)创建差异备份的作业?
  2. 如果我的理解是正确的,那将每小时备份一次事务日志,直到凌晨 1 点进行完整备份,然后它将“重置”T-Log 并从第二天重新开始,因此最多为 1 小时数据丢失 - 对吗?
  3. 所以最后,我会在代理上有 2 个工作,一个每天凌晨 1 点触发以进行“完整”备份,另一个每小时触发一次以进行差异备份?
sql-server backup
  • 2 2 个回答
  • 772 Views

2 个回答

  • Voted
  1. Best Answer
    Anti-weakpasswords
    2014-04-07T19:54:13+08:002014-04-07T19:54:13+08:00

    Kin 正确地向您指出了Ola Hallengren 的备份和维护解决方案。

    听起来你是新手,所以也可以考虑调查:

    • SQLServerCentral 的事务日志的 6 大误区。
    • Paul Randall 的事务日志博客条目
    • Paul Randall 的备份和恢复博客条目
      • 必读:每天阅读一个 SQL Server DBA 神话:(30/30) 备份神话
    • Kimberly Tripp 的事务日志博客条目
      • 强制性:读取事务日志 VLF——太多还是太少?

    Aaron Bertrand 正确地指出了为什么事务日志不断增长或空间不足?.

    Usr 是正确的;在您测试恢复之前,假设您的备份毫无价值。

    评论者也说的对,一定要咨询商家。

    更详细地说,您需要:

    • RPO:恢复点目标。多少数据丢失是可以接受的——即恢复到丢失前一小时内?一天?
    • RTO:恢复时间目标。重新恢复系统需要多长时间。
    • 至少是一个骨架DR 计划,特别是,您的 RPO 和 RTO 适用于哪些类型的“灾难”?
      • 损坏的数据库
      • 硬盘崩溃
      • 多个驱动器崩溃导致 RAIDset 丢失
      • 意外删除文件
      • 服务器在移动过程中掉线
      • 服务器被盗
      • 建筑物被烧毁
      • 区域性自然灾害(大型飓风、地震、台风、海啸、大火山爆发、大洪水)
    • 预算
      • 得到这个之后,你可以回去重新协商之前的要点。

    至于一般的备份计划,我会首先考虑:

    • 搜索任何人截断日志的地方……并停止!你不想打破你的日志链!
      • 同样,如果您要切换到和退出 SIMPLE 恢复模式。
    • 弄清楚您的备份需要去哪里;备份到保存数据库或日志的同一磁盘轴本身是毫无意义的;丢失磁盘,您将同时丢失活动数据库和备份。
    • 在所有情况下,请将 CHECKSUM 设置为开。
    • 定期对所有内容进行完整备份。
      • 也许这是每天一次,也许是每周一次,也许是每两周一次,甚至可能是每月一次。
      • 注意:保持不止一个是有用的;对于 FULL(如果没有批量记录更改,则为BULK-LOGGED )恢复模型数据库,如果您有先前的完整备份和完整的日志链,则可以跳过损坏的完整备份。
    • 完整备份是 Master 唯一允许的备份。
      • 对此的时间安排必须至少与您的 RPO 一样频繁。
    • 别忘了备份msdb,你还不如把模型扔进去。
      • 是的,模型。有时它有用户定义的类型等。
    • SIMPLE 模式数据库上的差异备份
      • 对此的时间安排必须至少与您的 RPO 一样频繁。
    • 可选:FULL 和 BULK-LOGGED 数据库上的差异备份
      • 这些可以让你有更快的恢复
      • 这些还可以让您“跳过”完整备份和差异备份之间损坏/丢失/损坏的事务日志备份,之后您可以继续恢复事务日志,只要您的日志链从那一点开始就没有中断。
    • 所有 FULL 和 BULK-LOGGED 数据库上的日志备份。
      • 对此的时间安排必须至少与您的 RPO 一样频繁。
      • 这是强制性的,以降低 t-log 的大小
    • 运行测试恢复;它们是在同一台服务器上还是在不同的服务器上都没有关系,只需运行它们即可。
    • 谁有权访问备份
    • 备份加密
      • 加密的密钥管理
    • 场外存储
      • 以及这如何影响 RTO
        • 在“更大”的灾难期间;即使暴风雪或泥石流也会增加数小时或数天。
    • 5
  2. Alexandr Omelchenko
    2015-11-27T03:21:57+08:002015-11-27T03:21:57+08:00

    我认为这是最流行的问题:“我应该多久备份一次数据库”。因此,这里有一些简单的答案:“一切都取决于您的数据库有多大?您对数据库进行更改的频率如何?以及您的数据有多重要?”

    例如,您可以每 24 小时进行一次完整备份(就像您所做的那样),每 6 小时进行一次差异备份,每小时备份一次事务日志。那么,现在让我们深入挖掘:

    全数据库备份:

    完整数据库备份备份所有数据文件和事务日志的活动部分。事务日志的活动部分是将数据库恢复到事务一致点所必需的。请记住:如果您使用简单恢复模型,事务日志将在检查点过程中被截断。并且时间点恢复是不可能的。

    BACKUP DATABASE database TO DISK = 'd:/full.bak';
    

    差异数据库备份:

    差异备份的创建与完整备份类似,但有一个重要区别——差异备份仅包含自上次完整备份(事务日志的活动部分)以来更改的数据。差异备份是累积的而不是增量的。这意味着差异备份包含自上次完整备份以来所做的所有更改,尽管它们已经包含在以前的差异备份中。

    BACKUP DATABASE database TO DISK = 'd:/diff.bak' WITH DIFFERENTIAL;
    

    事务日志备份

    事务日志备份包含在上次事务日志备份或第一次完整备份与备份过程完成时创建的最后一个日志记录之间创建的所有事务日志记录。事务日志备份允许将数据库恢复到故障发生前的特定时间点。它是增量的,这意味着为了将数据库恢复到某个时间点,所有事务日志记录都需要重放到该特定时间点的数据库更改。请注意,事务日志备份仅适用于完整或批量日志恢复模式。

    BACKUP LOG database TO DISK = 'd:/log.bak';
    

    假设您使用这样的数据库备份计划,每 24 小时进行一次完整备份,每 6 小时进行一次差异备份,每小时进行一次事务日志备份。并且您的数据库在完整恢复模式下运行。看下图:

    在此处输入图像描述

    一些关键数据在 20:30 被删除,在这种情况下我们最好将数据库恢复到 20:29。接下来是恢复过程:

    RESTORE DATABASE database FROM DISK = 'd:/full_10_00.bak' WITH NORECOVERY, REPLACE
    RESTORE DATABASE database FROM DISK = 'd:/diff_16_00.bak' WITH NORECOVERY
    RESTORE LOG database FROM DISK = 'd:/log_17_00.bak' WITH NORECOVERY
    RESTORE LOG database FROM DISK = 'd:/log_18_00.bak' WITH NORECOVERY
    RESTORE LOG database FROM DISK = 'd:/log_19_00.bak' WITH NORECOVERY
    RESTORE LOG database FROM DISK = 'd:/log_20_00.bak' WITH NORECOVERY
    RESTORE LOG database FROM DISK = 'd:/log_21_00.bak' WITH 
        STOPAT = '2015-11-26 20:29:00.000', RECOVERY
    

    在这种情况下,从 20:29 到 21:00 的数据将丢失。

    • 1

相关问题

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

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

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

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

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

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