原文:《SQL Server企业级平台管理实践》读书笔记——几个系统库的备份与恢复
master数据库
master作为数据库的主要数据库,记录着SQL Server系统的所有系统级信息,例如登录用户、系统配置设置、端点和凭证以及访问其他数据服务器所需要的信息。master数据库还记录着启动服务器实例所需要的初始化信息,每个其它数据库的主文件位置。master数据库是SQL Server启动的时候打开的第一个数据库。SQL Server是从这个数据库里找到其它数据的信息的。如果master数据库有问题,整个SQL Server都将无法启动。
master数据库本身不大,做一次备份很快。建议要经常做master的完整数据库备份,以充分保护您的数据。如果master数据库已损坏,可以通过还原master数据库的最近完整数据库备份,轻松修复已损坏的数据库。
如果由于master数据库损坏严重大无法启动服务器实例,有没有备份,这时候只能重建了。重建master数据将使的所有的系统数据库恢复到其原始状态。例如,重建master数据库会删除并重新创建msdb数据库。这将导致丢失所有的计划信息以及备份和还原历史记录。所以重建master数据库后,SQL Server就像被重装过一样。所有的用户记录都会丢失,用户数据库需要再次附加,SQL Server任务记录都要重建。这是一个很折腾的过程。重建master数据库是个万不得已的选择。
在执行任何语句或系统过程中来更改master数据库中的信息以后(例如,更改服务器范围的配置选项以后),应备份master数据库。如果在更改master数据库后没有进行备份,则自上次备份以来的更改都将在还原备份时丢失。
一下行为会更改master中元数据:
1、创建或删除用户数据库,这里不包括用户数据库自动增长以容纳新数据时,master数据时不受影响的。
2、添加或删除文件和文件组
3、添加登录或其它与登录安全相关的操作,这里不包括对数据库层面的操作,比如添加用户
4、更改服务器范围的配置选项或数据库配置选项
5、创建或删除逻辑备份设备
6、配置用于分布式查询和远程过程调用(RPC)的服务器,如添加链接服务器或远程登录。
恢复master数据库使用还是RESTORE指令。可是还原master数据库后,SQL Server实例将自动停止。我们前面讲过,master里面记录了其他所有数据库主文件的地址。SQL Server通过这个地址来寻找这些数据库。如果我们将master数据库恢复到一台新的服务器上,难免文件地址会有所变化。这时SQL Sever将找不到其它数据库。需要使用单用户模式启动SQL Server,将master数据库里信息修改成新的地址。
开启单用户模式,需要停止所有SQL Server服务(服务器实例本身除外),并停止所有SQL Server实用工具(SQL Server代理,报表服务器等)。停止服务和实用工具可以防止他们尝试访问服务器实例。否则单用户启动后,他们会占用这个用户连接,管理员反而连接不进去了。
model 数据库
创建用户数据库时,model数据库是SQL Server使用的模板。model数据库的全部内容(包括数据库选项)都会被复制到新的数据库。所以这个数据库是推荐做任何修改的。除非有目的的创建一些模板,否则不要去更改这个数据库,也不要把任何用户数据放在这个数据库里。
虽然这个数据库的内容一般不发生变化,但是在SQL Server启动的时候,要使用model数据库的某些设置创建新的tempdb。如果没有tempdb,SQL Server将无法启动。因此model数据库必须始终存在于SQL Server系统中。所以这个数据库也要备份。
还原model数据库与对用户数据执行完整数据库还原过程一样。
msdb数据库
msdb数据库用来存储计划信息以及备份与还原历史记录的信息,所以SQL Server本身,ssms和Agentd都要用到它。
SQL Server将在msdb数据库中自动维护一份完整在下备份与还原历史记录。这些信息包括执行备份一方的名称、备份时间和用来存储备份的设备或文件。SSMS利用这些信息提出计划还原数据库并应用事务日志备份。将会记录有关所有数据库备份事件,即使他们由自定义程序或第三方创建的。例如,如果使用C#程序调用SQL Server执行备份操作时,所有的事件都将记录在msdb系统表、windows应用程序日志和SQL Server错误日志中。而SQL Server代理使用的所有计划信息。包括计划的定义、排程、历史日志等信息。
默认情况下,msdb数据库使用简单恢复模式。如果要恢复用户数据库时使用msdb数据库中的所有备份与还原历史记录信息,建议对msdb数据库使用完整恢复模式,并建议考虑将msdb数据库事务日志放置在容错存储设备中。
tempdb临时库和资源数据库(Resource Databse)
SQL Server还有两个系统数据库比较特别。他们是tempdb和资源数据库。缺了这个两个数据库SQL Server页将无法启动。但是这两个库不能做数据库备份。
temdp系统数据库是一个全局资源。可供连接到SQL Server实例的所有用户使用。
每次启动SQL Server时都会重建tempdb数据库,从而在系统启动时总保持一个干净的数据库副本。连接断了以后,SQL Server会自动删除临时表和存储过程。因此tempdb数据库中不会有什么内容需要在服务关闭的时候保存下来。只要有干净的model数据库就可以。SQL Server都能够创建出一个tempdb数据库。Temdp数据本身倒不用备份。SQL Server同样也没有提供对tempdb数据库的备份和还原操作。保护好model数据库,就能保证在下次启动时,得到一个好的tempdb数据库。所以对tempdb数据库保护,转为了对model数据库的保护。
Resource数据时一个只读数据库。它包含了SQL Server中所有的系统对象。系统对象(例如sys.objects)在物理上存在于Resource数据库中。但是在逻辑上,他们出现在每个数据库的sys结构中。Resource数据库不包含任何用户或用户元数据。对于同一个版本的SQL Server。他们的Resource数据库应该都是一样的。
默认在实例下是看不到资源库的,但是Resource数据库的物理存在的,物理文件名为mssqlsystemresource.mdf和mssqlsystemresource.ldf。默认情况下,这些文件存储于目录:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL
在群集中,Resource数据库位于共享磁盘中的Data文件夹中。其实Resource数据库依赖于master数据库位置。如果管理员移动了master数据库,则必须也将Resource数据库移动到相同的位置。
因为Resource数据库从来不做修改,所以SQL Server理论上不用备份的。但是管理员不但要考虑SQL Server层面的问题。还要考虑整个系统层面的问题。难免物理磁盘损坏会发生,使得文件出现损坏。所以要通过将mssqlsystemresource.mdf文件作为二进制文件,做基于文件的备份或基于磁盘的备份。恢复时要将SQL 服务停止。手段还原mssqlsystemresource.mdf的文件备份副本。并且必须谨慎,不同版本的Resource数据库会不一样。是要使用过期版本或可能不安全的版本覆盖当前Resource数据库。
我们集中列举下
系统数据库 | 说明 | 是否支持备份 | 恢复模式 | 注释 |
master | 记录SQL Server系统的所有系统级别信息的数据库 | 支持 | 简单 |
必须经常备份Master数据库,以便根据业务需要充分 保护数据。建议使用定期备份计划,这样在大量更新 之后可以补充更多的备份 |
model | 在SQL Server实例上为所有数据库创建的模板 | 支持 | 用户可配置 |
仅在业务需要时备份model数据库,例如自定义其数据 库选项后立即备份。最佳方法是:建议根据需要创建 model数据库完整性数据库备份。由于model数据库较小 而且很少更改,因此无需备份日志 |
msdb |
SQL Server代理用来安排报警和作业以及记录操作员 信息的数据库。msdb数据库还包含历史记录表,例如 备份和还原历史记录表 |
支持 | 简单(默认值) | 更新时备份msdb数据库 |
Resource(RDB) |
包含SQL Server附带的所有系统对象副本的只读 数据库 |
不支持 |
Resource数据库位于mssqlsystemresource.mdf文件中, 该文件近包含代码。因此,SQL Server不能备份Resource数据库。 但是可以通过文件备份和磁盘备份,同样还原的时候不通过SQL Server, 还原这些备份,只能手动还原mssqlsystemresource.mdf的备份副本, 并且必须谨慎,不要使用过期版本或可能不安全的版本覆盖当前的Resource数据库 |
|
tempdb |
用于保存历史或中间结果集的工作空间, 每次启动SQL Server实例时都会重建该库,服务 器实例关闭时,将永久删除Tempdb数据库中的所有数据 |
不支持 | 简单 |
无法备份tempdb系统数据库 |
distribution |
只有将服务器配置为复制分发服务器时才存在 此数据库。此数据库存储元数据库、各种复制的历史记录数据以及用于事务复制的事务 |
支持 | 简单 |
根据您具体的复制配置决定 |