跳转至

数据库备份和还原#

Info

强烈建议定期备份数据库,以防止数据丢失

Info

本部分包含来自以下URL的物料: http://technet.microsoft.com/en-us/library/ms187048.aspx ⧉

Microsoft SQL ServerTM允许您备份和还原数据库。SQL ServerTM备份和还原组件为保护储存在SQL Server数据库中的关键数据提供了重要的保障。精心规划的备份和还原策略有助于保护数据库免受各种故障造成的数据丢失。通过还原一组备份,然后恢复数据库来测试您的策略,以便为您有效地应对灾难做好准备。

可用于还原和恢复数据的数据副本称为备份。备份可让您在发生故障后还原数据。使用良好的备份策略,您可以从许多故障中恢复,例如:

  • 介质故障。
  • 用户错误,例如错误删除表。
  • 硬件故障,例如磁盘驱动器损坏或服务器永久丢失。
  • 自然灾害。

此外,数据库备份对于日常管理用途非常有用,例如将数据库从一台服务器复制到另一台服务器、设置数据库镜像和存档。本部分的目的是介绍在数据库、磁盘或服务器崩溃后恢复凯睿德制造软件联机和ODS数据库的必要步骤。我们介绍了建议的备份策略、建议原因、崩溃后必须立即采取的措施,最后是各个数据库恢复步骤。

数据备份概览#

Info

本节包含以下URL中的物料:备份和还原SQL Server数据库 ⧉

数据备份的范围可以是整个数据库、部分数据库或文件集或文件组。对于每种情况,SQL ServerTM都支持完整备份和差异备份。整个数据库的完整备份代表备份完成时的整个数据库。差异备份仅包含自每个文件的最新数据库备份以来修改过的数据范围。

每个数据备份都包含事务日志的一部分,以便备份可以恢复到该备份结束时。第一次数据备份后,根据完整恢复模式或大容量日志恢复模式,需要定期进行事务日志备份(或日志备份)。每个日志备份都包括创建备份时处于活动状态的事务日志部分,并且日志备份包括所有未在以前的日志备份中备份的日志记录。

数据库备份#

数据库备份易于使用,建议在数据库大小允许时使用。SQL Server支持以下类型的数据库备份。

备份类型 描述
数据库备份 整个数据库的完整备份。数据库备份代表备份完成时的整个数据库
差异数据库备份 数据库中所有文件的备份。此备份仅包含自每个文件的最新数据库备份以来修改过的数据范围

Table: 数据库完整备份类型

部分备份#

部分备份和差异部分备份旨在为在简单恢复模式下备份包含某些只读文件组的数据库提供更大的灵活性。但是,所有恢复模式都支持这些备份。

SQL ServerTM支持以下类型的文件备份。

备份类型 描述
部分备份 主文件组、每个读/写文件组以及任何可选指定的只读文件或文件组中的所有完整数据的备份。
只读数据库的部分备份仅包含主文件组
差异部分备份 仅包含自最近对同一组文件组进行部分备份以来修改过的数据范围的备份

Table: 数据库部分备份类型

文件备份#

数据库中的文件可以单独备份和还原。使用文件备份可以提高恢复速度,让您只还原损坏的文件,而无需还原数据库的其余部分。

例如,如果一个数据库由位于不同磁盘上的多个文件组成,而其中一个磁盘发生故障,则只需要还原故障磁盘上的文件。但是,规划和还原文件备份可能很复杂;因此,只有在文件备份明显为还原计划增加价值的情况下,才应使用文件备份。

SQL ServerTM支持以下类型的文件备份。

备份类型 描述
文件备份 一个或多个文件或文件组中所有数据的完整备份。
ℹ 在简单恢复模式下,文件备份基本上只限于只读的辅助文件组。您可以为读写文件组创建文件备份,但在还原读写文件备份之前,必须将文件组设置为只读并进行差异只读文件备份。
差异文件备份 一个或多个文件的备份,其中包含自每个文件的最近完整备份以来发生更改的数据范围。
ℹ 在简单恢复模式下,假设数据在完整备份后已经更改为只读。

Table: 文件备份类型

有关详细信息,请参阅备份概览(SQL Server) ⧉一文。

数据恢复概览#

Info

本节包含以下URL中的物料:恢复模式(SQL Server) ⧉

恢复模式概览#

恢复模式旨在控制事务日志维护。有三种恢复模式:简单、完整和大容量日志。通常,数据库使用完整恢复模式或简单恢复模式。

下表总结了这些恢复模式。

恢复模式 描述 工作损失暴露 恢复到时间点?
简单 无日志备份
自动回收日志空间以保持较小的空间需求,从根本上消除了管理事务日志空间的需要
自最近备份以来的更改不受保护。如果发生灾难,必须重做这些更改 只能恢复到备份结束时
完整 需要日志备份
不会因为数据文件丢失或损坏而丢失工作。可以恢复到任意时间点(例如,在应用程序或用户出错之前)
通常为无
如果日志结尾损坏,则必须重做自最近一次日志备份以来的更改。有关详细信息,请参阅结尾日志备份 ⧉
可以恢复到特定时间点,前提是备份已完成到该时间点。有关详细信息,请参阅将数据库还原到备份中的某个时间点 ⧉
大容量日志 需要日志备份
完整恢复模式的辅助功能,允许执行高性能大容量复制操作。通过对大多数大容量操作使用最小日志记录,减少日志空间的使用。有关详细信息,请参阅可以最少记录的操作 ⧉
如果日志已损坏或自最近一次日志备份以来发生了大容量日志操作,则必须重做自上次备份以来的更改。
否则,不会丢失任何工作。
可以恢复到任何备份结束。不支持时点恢复

Table: 恢复模式

Info

数据库的适当恢复模式取决于数据库的可用性和恢复需求。有关这些要求的详细信息,请参阅为数据库选择恢复模式 ⧉一文

有关详细信息,请参阅恢复模式概览 ⧉

一般还原假设#

本文档中描述的还原过程假设如下:

  • 凯睿德制造软件联机数据库、ODS数据库和DWH数据库都以完整恢复模式进行安装。最终用户可以将此配置更改为简单或大容量日志,但当日志备份中分别包含大容量更改时,数据库将只能恢复到最近的备份或事务日志备份结束时。为了在最广泛的故障场景中防止数据丢失,凯睿德制造软件建议的恢复模式是完整恢复模式。有关详细信息,请参阅完整恢复模式下的备份 ⧉
  • 所有凯睿德制造软件数据库(联机、ODS和DWH)都制定了备份/还原策略。所有备份作业(完整、差异和日志)都在运行,未发生任何错误。建议的备份间隔为:
    • 完整备份:每周一次
    • 差异备份:每天两次
    • 日志备份:每 5 分钟一次
  • 完整、差异和日志备份文件储存在安全位置并可访问

结尾日志备份#

在数据库崩溃的情况下,为了将其还原到崩溃前的上次事务,有必要对当前数据库日志进行备份。这称为结尾日志备份,它将捕获所有尚未备份的日志记录。这是还原过程的第一步。

如果数据库可用且处于联机状态,则使用以下命令进行结尾日志备份:

BACKUP LOG database_name TO <backup_device> WITH NORECOVERY

如果数据库处于脱机状态且未启动,则也可尝试以下命令:

BACKUP LOG database_name TO <backup_device> WITH CONTINUE_AFTER_ERROR

如果数据库损坏,例如数据库未启动,则只有在日志文件未损坏、数据库处于支持结尾日志备份的状态以及数据库不包含任何大容量日志更改时,结尾日志备份才会成功。如果日志文件损坏且无法创建结尾日志备份,则必须在不使用结尾日志备份的情况下还原数据库。在最近一次日志备份之后提交的所有事务都将丢失。

结尾日志备份可防止工作丢失并保持日志链完整。当您将数据库恢复到故障点时,结尾日志备份是恢复计划中感兴趣的最后一个备份。如果无法备份日志的尾部,则只能将数据库恢复到故障前创建的最后一个备份结束时。

有关详细信息,请参阅结尾日志备份(SQL Server) ⧉

还原操作#

作为凯睿德制造软件备份/还原解决方案的一部分,可以使用储存过程来浏览所有可用的完整、差异和日志备份集,以便重建正确的还原链命令。可以按如下方式使用储存过程(对于此示例,要恢复的数据库名称将为cmMESODS

DECLARE @RC int
DECLARE @databaseName sysname = 'cmMESODS'
EXECUTE @RC = [master].[dbo].[DatabaseRestoreScripts] @databaseName
GO

此储存过程对任何数据库恢复(联机、ODSDWH、复制或其他)都有效,并且位于master数据库中。根据备份文件的位置,储存过程将输出以下命令(对于本示例,我们将考虑备份文件位于以下位置:

\\CMFDBSERVER\H\$\Databases-Backups\DBSERVER$ODS\

----------Script to Restore the cmMESODS Database to Nov 10 2017 1:48PM
RESTORE DATABASE ProductionMESODS FROM DISK =
'\\CMF-DBSERVER\H$\DatabasesBackups\DBSERVER$ODS\ProductionMESODS\FULL\DBSERVER$ODS_cmMESODS_20171105_000029.bak' WITH FILE = 1, NORECOVERY
RESTORE DATABASE ProductionMESODS FROM DISK =
'\\CMF-DBSERVER\H$\DatabasesBackups\DBSERVER$ODS\ProductionMESODS\DIFF\DBSERVER$ODS_cmMESODS_20171110_120018.dif' WITH FILE = 1, NORECOVERY
RESTORE LOG ProductionMESODS FROM DISK = '\\CMF-DBSERVER\H$\DatabasesBackups\DBSERVER$ODS
\ProductionMESODS\LOG\DBSERVER$ODS_cmMESODS_20171110_120529.trn' WITH FILE = 1, NORECOVERY
RESTORE LOG ProductionMESODS FROM DISK = '\\CMF-DBSERVER\H$\DatabasesBackups\DBSERVER$ODS
\ProductionMESODS\LOG\DBSERVER$ODS_cmMESODS_20171110_121005.trn' WITH FILE = 1, NORECOVERY
()
RESTORE LOG ProductionMESODS FROM DISK = '\\CMF-DBSERVER\H$\DatabasesBackups\DBSERVER$ODS
\ProductionMESODS\LOG\DBSERVER$ODS_cmMESODS_20171110_134505.trn' WITH FILE = 1, NORECOVERY
RESTORE LOG ProductionMESODS FROM DISK = '\\CMF-DBSERVER\H$\DatabasesBackups\DBSERVER$ODS
\ProductionMESODS\LOG\DBSERVER$ODS_cmMESODS_20171110_1345Tail.trn' WITH FILE = 1, NORECOVERY
RESTORE DATABASE ProductionMESODS WITH RECOVERY

输出包含用户应该发布的脚本,以便使用崩溃时所使用的所有备份文件还原数据库。如在结尾日志备份中看到的那样,并不总是可以发布日志结尾的备份。在这种情况下,储存过程的输出将不考虑结尾日志备份文件。储存过程的存在不是还原数据库所必需的。还原链总是从最后一次完整备份开始,然后是最后一次差异备份,最后是应用上次差异备份后的所有事务日志备份,直到数据库崩溃。

恢复方案#

作为一个高可用性应用程序,凯睿德制造软件还原操作将需要不同的方法,这取决于崩溃的特定数据库和崩溃类型。本部分介绍四种场景:

  • 完整数据库群集崩溃(联机 + ODS
  • 联机数据库崩溃
  • ODS数据库崩溃
  • 恢复ODS数据库事务

还原操作高度依赖于首先导致系统崩溃的原因。本部分概述了在考虑最可能的场景下使凯睿德制造软件重新联机所需的步骤。此处描述的所有操作均基于Microsoft文档,并在强制崩溃条件下进行了测试。

凯睿德制造软件备份/还原解决方案的目的是在系统/数据库崩溃的情况下最大限度地减少数据丢失。如上所述,总是有可能丢失事务数据(如果无法进行联机结尾日志备份)。我们的想法始终是尽量减少这种风险,并在发生这种情况时,尽量减少丢失的数据量。因此,我们建议将事务日志备份间隔设为5分钟。在这种情况下,遇到最坏的场景时,数据丢失时间将始终为5分钟。

多次出现也可能影响完整系统恢复 (例如备份文件不可用或损坏) ,但这些情况在任何依赖于数据库的应用程序中都很常见。有多种解决方案可以保证所有备份文件的高可用性。这完全取决于最终用户所做的数据丢失风险评估。

有关数据库备份和还原的其他信息,请参阅以下链接

完全数据库群集崩溃(联机 + ODS#

这是最坏的场景。硬件恢复后,系统管理员必须首先集中精力恢复联机数据库。这将允许使凯睿德制造软件主机、凯睿德制造软件GUI和其他相关系统联机,并使用户能够开始在系统上工作。

联机数据库崩溃#

按照设计,联机数据库将仅包含当前对象状态及其最近的活动历史记录,从而实现快速还原操作。根据崩溃后数据库的状态,可能无法发出结尾日志备份,因此会丢失自上次事务日志备份以来进行的所有事务。这就是我们建议每5分钟发布一次事务日志备份的原因(请参阅一般还原假设),以尽量减少这种情况的影响。

联机数据库还原后,凯睿德制造软件就可以开始使用了。系统管理员现在可以专注于恢复ODS数据库(如果是这种情况)。

请注意,复制作业从ODS数据库运行。一旦ODS和复制数据库还原后,复制作业将从ODS数据库中应用的最新LSN(日志序列号)继续执行。

ODS数据库崩溃#

根据最终用户的要求,ODS数据库可以包含几年的历史记录数据。只要SQL Server数据库版本支持,凯睿德制造软件就准备使用SQL Server分区技术来处理如此大量的数据。请参阅SQL Server文档发行说明 ⧉,以比较所有可用的SQL Server版本及其功能,如“可扩展性和性能”下的表和索引分区。

如果SQL Server分区可用,我们建议使用段落还原,从而启用文件组的部分还原,首先是主文件组,然后是当前分区文件组,最后是其余丢失的分区文件。此操作将及时使ODS数据库分区联机,而不依赖于单一耗时还原操作。有关详细信息,请参阅段落还原(SQL Server) ⧉

如果SQL Server数据库不允许使用表和索引分区方案,则还原操作的执行方式与联机还原操作类似。

如果无法发出结尾日志备份,最后一个ODS数据库事务将丢失。但在这种情况下,如下文所述,可从联机数据库中恢复这些事务。

恢复ODS数据库事务#

ODS数据库依赖复制机制,以持续接收联机数据库中执行的数据处理操作。换句话说,联机数据库中所做的所有修改都将完全按照相同的顺序应用到ODS数据库。 如前所述,对于性能问题,联机数据库只能包含当前WIP和最近活动历史记录。这是通过特定于凯睿德制造软件的维护作业实现的,这些作业将从联机数据库中清除旧数据,并将这些数据保留在ODS中(删除操作在ODS中进行复制并处理,而在其他表中则予以忽略)。 只有在能够交叉检查ODS是否发现了完全相同的特定记录(即在ODS中复制并应用的事务)后,此清除作业才会从联机数据库中清除该特定记录。这种机制还保证被删除的记录遵循时间顺序(旧的在前),并且只会删除在特定时间范围内找到的记录。这将保证即使ODS结尾日志不可用,我们仍将在联机数据库中拥有完全相同的记录。

复制机制架构保证了ODS中尚未发现的最新联机数据库记录的收敛性,因此它将从ODS中存在的最后一次成功复制操作继续执行数据移动。

备份和系统维护建议#

默认情况下,凯睿德制造软件安装程序会安装基本的数据库维护任务。这些过程实现了建议的备份策略和维护任务。这些是:

  1. 数据库备份
  2. 索引维护
  3. 统计数据刷新
  4. 数据库完整性检查

所有数据库脚本都基于由Ola Hallengren(可在此处 ⧉获得)发布和维护的SQL Server维护解决方案。每个任务都包含一个特定的过程、过程的配置(为凯睿德制造软件数据库量身定制)及排产。这些任务作为作业直接安装在SQL Server代理下的数据库中。

  1. 数据库备份 - SYSTEM_DATABASES - 完整 此作业负责所有系统数据库(master、model和msdb)的完整备份。每周星期日04:00运行。

  2. 数据库备份 - USER_DATABASES - 完整 此作业负责所有用户数据库(凯睿德制造软件系统数据库)的完整备份。每周星期日05:00运行。

  3. 数据库备份 - USER_DATABASES - 差异 此作业负责所有用户数据库(凯睿德制造软件系统数据库)的差异备份。每天00:00和12:10运行。

  4. 数据库备份 - USER_DATABASES - 日志 此作业负责所有用户数据库(凯睿德制造软件系统数据库)的日志备份。每天每5分钟运行一次。

  5. 数据库完整性检查 - SYSTEM_DATABASES 对系统数据库(master、model和msdb)运行数据库完整性检查(CHECKDB)。每周星期六01:00运行。

  6. 数据库完整性检查 - USER_DATABASES 针对用户数据库(凯睿德制造软件系统数据库)运行数据库完整性检查(CHECKDB)。每周星期六02:00运行。

  7. 索引优化 - USER_DATABASES 运行索引维护活动(根据碎片阈值重组或重建)。它还更新表的统计数据。每周星期六03:00运行。

  8. sp_delete_backuphistory 删除超过30天的备份历史记录。这对于维护msdb数据库和避免备份瓶颈非常重要。每周星期六00:30运行。

  9. sp_purge_jobhistory 删除超过30天的SQL Server作业历史记录。每周星期六03:00运行。

  10. 输出文件清理 30天后删除维护作业日志文件。每周星期六03:00运行。

  11. 命令日志清理 删除超过30天的命令日志表条目。默认情况下,维护作业运行的每个命令都会记录到[master].[dbo].[CommandLog]表。每周星期六03:00运行。

Info

备份文件的位置是在安装过程中定义的。这可以通过直接修改每个数据库备份作业步骤下的@Directory参数进行更改。

Info

尽管排产可以根据不同的场景进行调整,但在完整数据库备份之前执行索引维护任务很重要。这会直接影响在完整数据库备份之后进行的差异备份的大小。

Full Backup Job Config - Directory

默认情况下,只会保留一个完整数据库备份副本。这将允许恢复到最新的时间点(完整+差异+日志)。如果恢复目标不同,则可以在单个备份任务命令中更改@CleanupTime参数。如果未指定时间,则不会删除任何备份文件。注意,数据库备份会进行一项检查,以验证事务日志备份是否比最近的完整备份或差异备份更新。

Full Backup Job Config - Cleanup time

尽管这些脚本通常被认为是维护健康SQL Server数据库的完整解决方案,但还有其他脚本可以完成相同的作业。如果您使用其他解决方案,请禁用备份作业。

我们强烈建议您维护与这里描述的相同的备份策略,同时也维护每个单独作业的重复实例。与这里描述的相同的备份策略,同时也维保每个单独作业的重复实例。

另请注意,维护脚本会对磁盘和网络系统产生额外的压力。为了与其他正在运行的系统平衡磁盘和网络使用情况,您可以调整每个作业运行的时间。在任何情况下,都需更改每个单独作业的重复实例。