sql server 备份与恢复系列八 系统数据库备份与恢复分析
一.概述
在前面讲过"sql server 备份与恢复系列"都是集中在用户数据库上。sql server还维护着一组系统数据库,这些系统数据库对于服务器实例的运行至关重要。在每次进行系统更新后必须备份多个系统数据库。必须备份的系统数据库包括:msdb,master,model。如果使用了复制,还要备份distribution库。备份以防止系统故障时,用于还原恢复。
1.master数据库介绍
master数据库记录着所有系统级信息,如登录账户,系统配置,端点和凭据,以及访问其他数据库服务器需要的信息。还有记录实例启动时需要的初始化信息,其它数据库主文件位置,master是sql server启动时第一个打开的数据库,如果master库有问题,整个sql server无法正常启动。
master数据库不大,建议经常做完整数据库备份。如果因为master库损坏无法启动服务器实例,又没有备份,则必须重建。 重建后会删除并重新创建msdb库,导致丢失所有计划信息以及备份和还原历史记录。sql server也被重装过一样。用户记录丢失,数据库要再次附加,任务计划要重建。是一件很折腾的过程。
恢复master数据库使用的还是restore指令。还原master数据库后,sql server实例将自动停止。因为master记录了所有数据库主文件地址,通过这些地址寻找这些数据库。如果将master数据库恢复到一台新的服务器上,难免文件地址会发生变化,这时找不到地址,就需要使用单用户模式启动sql server,将master数据库里的信息修改成新的地址。
如果要启动单用户模式,首先停止所有sql server服务(服务器实例本身除外),并停止所有sql server实用工具。否则单用户启动后它们占用了这个用户连接,管理员反而连接不进去了。
2.model数据库
当创建用户数据库时,model数据库是sql server使用的模板。不推荐对该库对任务修改。虽然该库内容一般不发生变化,但sql server在启动时候,需要使用model库的某些设置创建新的tempdb。如果没有tempdb ,实例无法启动。
3. msdb数据库
msdb存储了计划信息,备份和还原历史记录信息等。默认情况下,msdb数据库使用简单恢复模式。如果在恢复用户数据库时使用msdb数据库中的备份与还原历史记录信息,建议对msdb数据库使用完整恢复模式,并建议将msdb数据库事务日志放置在容错存储设备中。
4. tempdb数据库和资源数据库
sql server还有二个系统数据库比较特别,是tempdb和资源数据库Resource Database。缺了这两个数据库, sqlserver无法启动,但它们又不能做数据库备份。tempdb系统数据库是一个全局资源,可供连接到sqlserver实例的所有用户使用。每次启动sqlserver,会重建tempdb库,保持一个干净的副本。会话连接断开后,会自动删除该会话的临时表。因此tempdb不会有什么内容需要在服务器关闭的时候保存下来。tempdb不用备份和还原操作,保护好model数据库就能保证在下次启动时,得到一个好的tempdb数据库。
Resource 数据库是一个只读数据库,它包含了sql server中的所有系统对象。例如sys.objects。Resource 数据库从来不做修改,所以sql server理论上不用备份Resource 数据库。考虑到物理磁损坏,可以做基于文件的备份或基于磁盘的备份。
二. 系统数据库备份策略
-- 查看系统数据库默认的恢复模式
SELECT name, recovery_model_desc FROM sys.databases

| 系统数据库 | 说明 | 是否支持备份 | 恢复模式 | 注释 |
| master | 记录sqlserver系统的所有系统级 信息的数据库 |
支持 | 简单 | 必须经常备份,定期备份计划,大量更新后补充备份。 |
| model | 为所有数据库创建的模板 | 支持 | 用户可配置 | 根据需要创建完整数据库备份,由于数据库较小且 很少改动,因此不必备份日志。 |
| msdb | sqlserver代理用来安排警报和作业 以及记录操作员信息的数据库。msdb 数据库还包含历史记录表,例如备份和 还原历史记录表 |
支持 | 简单 (默认值) |
更新时备份msdb数据库。 |
| Resource | 所有系统对象副本的只读数据库 | 不支持 | 不能备份Resource数据库。 | |
| tempdb | 用于保存临时或中间集的工作空间, 启动实例时会重新创建此库,关闭服务 时永久删除tempdb数据库中所有数据 |
不支持 | 简单 | 无法备份tempdb数据库。 |
| distribution |
复制分发服务器时才存在此数据库。 |
支持 | 简单 | 根据具体的复制配置决定。 |
sql server 备份与恢复系列八 系统数据库备份与恢复分析的更多相关文章
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
- SQL Server 中4个系统数据库,Master、Model、Msdb、Tempdb。
(1)Master数据库是SQL Server系统最重要的数据库,它记录了SQL Server系统的所有系统信息.这些系统信息包括所有的登录信息.系统设置信息.SQL Server的初始化信息和其他系 ...
- 如何隐藏掉SQL Server中自带系统数据库,数据表,存储过程等显示文件,只显示用户的数据库,数据表等文件
企业管理器了,----> 编辑该数据库的注册属性--->“常规”属性页下面-->“显示系统数据库和系统对象”的选项去掉
- 【SQL Server 学习系列】-- 收缩数据库文件大小
USE WebExam; GO ALTER DATABASE WebExam SET RECOVERY SIMPLE; GO -- 收缩文件到 1 MB. ); GO ALTER DATABASE W ...
- Sql Server来龙去脉系列之四 数据库和文件
在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...
- Expert for SQL Server 诊断系列
Expert for SQL Server 诊断系列 Expert 诊断优化系列------------------锁是个大角色 前面几篇已经陆续从服务器的几个大块讲述了SQL SERVER数据库 ...
- Sql Server来龙去脉系列 必须知道的权限控制核心篇
最近写了<Sql Server来龙去脉系列 必须知道的权限控制基础篇>,感觉反响比较大.这可能也说明了很多程序猿对数据库权限控制方面比较感兴趣,或者某些技术点了解的没有很透彻. 有些人看 ...
- Sql Server来龙去脉系列 必须知道的权限控制基础篇
题外话:最近看到各种吐槽.NET怎么落寞..NET怎么不行了..NET工资低的帖子.我也吐槽一句:一个程序猿的自身价值不是由他选择了哪一门技术来决定,而是由他自身能创造出什么价值来决定. 在进入本篇内 ...
- Sql Server来龙去脉系列之三 查询过程跟踪
我们在读写数据库文件时,当文件被读.写或者出现错误时,这些过程活动都会触发一些运行时事件.从一个用户角度来看,有些时候会关注这些事件,特别是我们调试.审核.服务维护.例如,当数据库错误出现.列数据被更 ...
随机推荐
- 搭建RESTful API来使用Fabric Node SDK 开篇
在Balance-Transfer中,有关于Node SDK比较完备的例子. SDK的官方文档在这里:https://fabric-sdk-node.github.io/ Balance-Transf ...
- C++学习札记(3)
一边听着许巍的音乐,一遍学习着C++的精髓,这感觉这酸爽,我一个人体会和知道. 许巍是两代人共同的时代标志,他的音乐作品脍炙人口,堪称经典,经久不衰:此时此刻品味,依然有丰富的各种味道和感情.可能因为 ...
- 【APP测试(Android)】--功能
- Office365 Manager Plus之报表
Office365 Manager Plus之报表 也许您刚刚开始使用Office 365,对它的各个组件还有很多疑问,如何快速掌握Office 365各种服务的用法?如何管理邮箱?如何监控邮件流量? ...
- delphi 中record 的类操作符重载简介
今天简单介绍一下 delphi 中record 的类操作符重载使用,就是如何 实现 record 之间的简单操作. 关于类操作符重载 ,大家可以看官方的文档. Delphi allows certai ...
- php 将对象转化为数组
$list = json_decode(json_encode($list), true);
- base operand of '->' has non-pointer type 'const Comple
base operand of '->' has non-pointer type 'const Comple ->操作符前面的操作数类型不是指针类型 错误原因 函数(&对象) { ...
- line number is important in Exceptions.
行号作为debug信息 在出现异常时可以迅速定位 package ztest; public class Test { public static void main(String[] args) { ...
- EF6学习笔记(四) 弹性连接及命令拦截调试
EF6学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本章原文地址:Connection Resiliency and Command Interception 原文 ...
- .NET Core微服务之路:基于gRPC服务发现与服务治理的方案
重温最少化集群搭建,我相信很多朋友都已经搭建出来,基于Watch机制也实现了出来,相信也有很多朋友有了自己的实现思路,但是,很多朋友有个疑问,我API和服务分离好了,怎么通过服务中心进行发现呢,这个过 ...