我必须将一些生产数据库恢复到同一台 Microsoft SQL Server 2005 机器上的另一个驱动器。这很顺利,使用这些数据库的应用程序重新上线。
但是,我还没有恢复 SQL Server 自行创建的系统(或默认?)数据库(模型、主数据库等)。我的问题是,这些数据库的作用是什么?恢复它们有多重要?
答案1
master 和 msdb 存储包含过程、函数、表、视图和其他定义整个系统的对象。例如,master 包含有关登录的信息、数据库文件的位置、系统存储过程和许多其他内容。msdb 最初主要涉及作业、警报。多年来,dbmail 配置信息和许多其他内容已被添加。
模型是一种示例数据库,可作为您创建新数据库时的起点。模型中的对象将被复制到新数据库中。人们过去更经常利用这种行为(比如 10 或 15 年前),因此他们可以在他们创建的每个数据库中包含一个特定的过程或表,但这存在问题并且已被废弃。但是,有点像附录,模型并不是很糟糕,但您仍然需要它。
tempdb 是一个数据库,它为临时表(#sometablename 和 ##someothertablename)、表变量(如果它们足够大)、排序操作和分组操作(如 GROUP BY 或 DISTINCT)以及其他可能更晦涩难懂的东西提供临时存储。通常,您永远不会恢复 tempdb。每次重新启动服务器时,它都会从头开始重建。
SQL Server 的最新版本有另一个隐藏的系统数据库,称为“资源数据库”。您不应该有任何理由去修改它。
如果你想知道,“pubs”、Adventurworks 和 AdventureworksDW 不是系统数据库,它们只是作为示例的常规用户数据库,它们可能会被删除而不会影响服务器行为。
系统数据库通常仅在发生某种灾难性故障(如磁盘崩溃或数据中心烧毁)时才恢复。如果您要从一台服务器迁移到另一台服务器,并且需要保留登录名、作业、dbmail 和其他配置(尽管还有其他可能更好的方法可以做到这一点),您也可能需要恢复系统数据库。
您想备份 master、model 和 msdb。您不需要备份资源数据库或 tempdb。如果您的工作职责之一是“dba”,那么最好回顾一下您可能需要做什么才能恢复这些数据库(MSKB 文章中有记录),因为恢复系统数据库比恢复用户数据库更复杂。当您真正处于紧急情况时,您不会想第一次阅读这些 KB 文章。
恢复用户数据库时,您不需要恢复系统数据库。恢复用户数据库的难点在于,您需要确保数据库中描述的用户与服务器的登录名(存储在 master 数据库中)相匹配。这就是 sp_change_users_login 系统过程的用途。