数据库备份与恢复 之五 系统数据库备份与恢复
前面我们讲的备份与恢复,都是集中在用户数据库上。SQLServer还维护着一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的运行至关重要。每次进行过系统更新后,都必须备份多个系统数据库。必须备份的系统数据库包括 msdb 、 master 和 mod
前面我们讲的备份与恢复,都是集中在用户数据库上。SQLServer还维护着一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的运行至关重要。每次进行过系统更新后,都必须备份多个系统数据库。必须备份的系统数据库包括msdb、master和model。如果有任何数据库在服务器实例上使用了复制,则还必须备份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数据库 |
Resource(RDB) |
包含SQL Server附带的所有系统对象副本的只读数据库 |
不支持 |
— |
Resource数据库位于mssqlsy- stemresource.mdf文件中,该文件仅包含代码。因此,SQL Server不能备份Resource数据库 |
tempdb |
用于保存临时或中间结果集的工作空间。每次启动SQL Server实例时都会重新创建此数据库。服务器实例关闭时,将永久删除tempdb数据库中的所有数据 |
不支持 |
简单 |
无法备份tempdb系统数据库 |
distribution |
只有将服务器配置为复制分发服务器时才存在此数据库。此数据库存储元数据、各种复制的历史记录数据以及用于事务复制的事务 |
支持 |
简单 |
根据您具体的复制配置决定 |
下一篇: Ajax