欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

数据库备份与恢复 之五 系统数据库备份与恢复

程序员文章站 2022-06-17 14:58:22
...

前面我们讲的备份与恢复,都是集中在用户数据库上。SQLServer还维护着一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的运行至关重要。每次进行过系统更新后,都必须备份多个系统数据库。必须备份的系统数据库包括 msdb 、 master 和 mod

前面我们讲的备份与恢复,都是集中在用户数据库上。SQLServer还维护着一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的运行至关重要。每次进行过系统更新后,都必须备份多个系统数据库。必须备份的系统数据库包括msdbmastermodel。如果有任何数据库在服务器实例上使用了复制,则还必须备份distribution系统数据库。备份这些系统数据库,就可以在发生系统故障(例如硬盘丢失)时用来还原和恢复SQLServer系统。

数据库

master数据库记录着SQL Server系统的所有系统级信息,例如登录账户、系统配置设置、端点和凭据以及访问其他数据库服务器所需的信息。master数据库还记录启动服务器实例所需的初始化信息,每个其他数据库的主文件位置。master数据库是SQL Server启动的时候打开的第一个数据库。SQLServer是从这个数据库里找到其他数据库的信息的。如果master数据库有问题,整个SQLServer都无法正常启动。

master数据库本身不大,做一次备份很快。建议要经常做master的完整数据库备份,以充分保护您的数据。如果master数据库已损坏,可以通过还原master数据库的最近完整数据库备份,轻松地修复已损坏的数据库。

如果由于master数据库损坏严重到无法启动服务器实例,又没有备份,则必须重建。重建master数据库将使所有的系统数据库恢复到其原始状态。例如,重建master数据库会删除并重新创建msdb数据库。这将导致丢失所有计划信息以及备份和还原历史记录。所以重建master数据库后,SQLServer就像被重装过一样,所有用户记录都会丢失,用户数据库需要再次附加,SQL Server任务计划都要重建。这是一个很折腾的过程。重建master数据库是个万不得已的选择。

在执行任何语句或系统过程来更改master数据库中的信息以后(例如,更改服务器范围的配置选项以后),应备份master数据库。如果在更改master数据库后没有进行备份,则自上次备份以来的更改都将在还原备份时丢失。

建议不要在master数据库中创建用户对象。但是,如果确实在master数据库中创建了用户对象,则应频繁地执行备份计划,以便能够保护用户数据。

导致master数据库更新并要求进行备份的操作类型包括:

· 创建或删除用户数据库。

用户数据库自动增长以容纳新数据时,master数据库不受影响。

· 添加或删除文件和文件组。

· 添加登录或其他与登录安全相关的操作。

数据库层面的安全操作(如向数据库中添加用户)对master数据库没有影响。

· 更改服务器范围的配置选项或数据库配置选项。

· 创建或删除逻辑备份设备。

· 配置用于分布式查询和远程过程调用(RPC)的服务器,如添加链接服务器或远程登录。

恢复master数据库使用的还是RESTORE指令。可是还原master数据库后,SQL Server实例将自动停止。我们前面讲过,master里面记录了其他所有数据库主文件的地址。SQL Server通过这个地址来寻找这些数据库。如果我们将master数据库恢复到一台新的服务器上,难免文件地址会有所变化。这时SQL Server将找不到其他数据库。需要使用单用户模式启动SQLServer,将master数据库里的信息修改成新的地址。

如果决定以单用户模式重新启动服务器,应首先停止所有SQLServer服务(服务器实例本身除外),并停止所有SQL Server实用工具(如SQLServer代理,报表服务器等)。停止服务和实用工具可以防止它们尝试访问服务器实例。否则单用户启动后,它们会占用这个用户连接,管理员反而连不进去了。

后面会有一个实例,介绍怎么用单用户模式启动SQLServer,以及一整套系统数据库恢复的方法。

9.4.2 model数据库

创建用户数据库时,model数据库是SQL Server使用的模板。model数据库的全部内容(包括数据库选项)都会被复制到新的数据库。所以这个数据库是不推荐做任何修改的。除非有目的地要建一些模板,否则不要去改这个数据库,也不要把任何用户数据放在这个数据库里。

虽然这个数据库里的内容一般不发生变化,但是在SQLServer启动的时候,要使用model数据库的某些设置创建新的tempdb。如果没有tempdb,SQL Server将无法启动。因此model数据库必须始终存在于SQLServer系统中。这个数据库也要有备份。

还原model数据库与对用户数据库执行完整的数据库还原相同。

数据库

SQL Server、SQLServer Management Studio和SQL Server代理使用msdb数据库来存储数据,包括计划信息以及备份与还原历史记录信息。

SQL Server将在msdb数据库中自动维护一份完整的在线备份与还原历史记录。这些信息包括执行备份一方的名称、备份时间和用来存储备份的设备或文件。SQLServer Management Studio利用这些信息提出计划以还原数据库并应用事务日志备份。将会记录有关所有数据库的备份事件,即使它们是由自定义应用程序或第三方工具创建的。例如,如果使用调用SQLServer管理对象(SMO)的MicrosoftVisual Basic应用程序执行备份操作,则事件将记录在msdb系统表、Windows应用程序日志和SQLServer错误日志中。而SQL Server代理使用的所有计划信息,包括计划的定义、执行排程、历史日志等都放在msdb数据库里。

默认情况下,msdb数据库使用简单恢复模式。如果在恢复用户数据库时使用msdb数据库中的备份与还原历史记录信息,建议对msdb数据库使用完整恢复模式,并建议考虑将msdb数据库事务日志放置在容错存储设备中。

还原msdb数据库与对用户数据库执行完整的数据库还原相同。具体方法可参见9.7节的实例。

和资源数据库(ResourceDatabase

SQL Server还有两个系统数据库比较特别,它们是tempdb和资源数据库。缺了这两个数据库SQL Server都无法正常启动,但是它们又都不能做数据库备份。

tempdb系统数据库是一个全局资源,可供连接到SQL Server实例的所有用户使用。每次启动SQLServer时都会重新创建tempdb数据库,从而在系统启动时总是保持一个干净的数据库副本。连接在断开以后,SQL Server会自动删除临时表和存储过程。因此tempdb数据库中不会有什么内容需要在服务关闭的时候保存下来。只要有干净的model数据库,SQL Server都能够创建出tempdb数据库。Tempdb数据库本身倒不用备份。SQL Server没有提供对tempdb数据库的备份和还原操作。保护好model数据库,就能保证在下次启动时,得到一个好的tempdb数据库。所以对tempdb数据库的保护,转为了对model数据库的保护。

Resource数据库是一个只读数据库,它包含了SQL Server中的所有系统对象。系统对象(例如sys.objects)在物理上存在于Resource数据库中,但在逻辑上,它们出现在每个数据库的sys架构中。Resource数据库不包含任何用户数据或用户元数据。对于同一个版本的SQLServer,它们的Resource数据库应该都是一样的。Resource数据库的物理文件名是mssqlsystemresource.mdf和mssqlsystemresource.ldf。每个SQL Server实例都具有一个(也是唯一的一个)关联的mssqlsystemresource.mdf文件,并且实例间不共享此文件。

因为Resource数据库从来不做修改,所以SQL Server理论上不用备份Resource数据库。但是管理员不但要考虑SQLServer层面的问题,还要考虑到整个系统层面的问题。难免物理磁盘损坏会发生,使得文件出现损坏。所以要通过将mssqlsystemresource.mdf文件作为二进制文件,做基于文件的备份或基于磁盘的备份。恢复时要将SQL Server服务停止,手动还原mssqlsystemresource.mdf的文件备份副本。并且必须谨慎,不同版本的SQL Server Resource数据库会不一样,不要使用过期版本或可能不安全的版本覆盖当前Resource数据库。

表9-5概述了所有的系统数据库。

9-5 系统数据库备份策略

系统数据库

说  明

是否支
持备份

恢复
模式

注  释

master

 记录SQL Server系统的所有系统级信息的数据库

支持

简单

 必须经常备份master数据库,以便根据业务需要充分保护数据。建议使用定期备份计划,这样在大量更新之后可以补充更多的备份

model

 在SQL Server实例上为所有数据库创建的模板

支持

用户
可配置

 仅在业务需要时备份model数据库,例如自定义其数据库选项后立即备份。

最佳方法:建议您仅根据需要创建model数据库的完整数据库备份。由于model数据库较小而且很少更改,因此无须备份日志

msdb

 SQL Server代理用来安排警报和作业以及记录操作员信息的数据库。msdb数据库还包含历史记录表,例如备份和还原历史记录表

支持

简单
(默认值)

 更新时备份msdb数据库

ResourceRDB

 包含SQL Server附带的所有系统对象副本的只读数据库

不支持

 Resource数据库位于mssqlsy- stemresource.mdf文件中,该文件仅包含代码。因此,SQL Server不能备份Resource数据库

tempdb

用于保存临时或中间结果集的工作空间。每次启动SQL Server实例时都会重新创建此数据库。服务器实例关闭时,将永久删除tempdb数据库中的所有数据

不支持

简单

无法备份tempdb系统数据库

distribution

只有将服务器配置为复制分发服务器时才存在此数据库。此数据库存储元数据、各种复制的历史记录数据以及用于事务复制的事务

支持

简单

根据您具体的复制配置决定