资源数据库,也称为资源 DB 或 RDB,是 SQL Server 中隐藏的只读数据库。Microsoft SQL Server 是由 Microsoft 创建和销售的关系数据库管理系统 (RDBMS)。与其他关系数据库软件一样,SQL Server 支持结构化查询语言 (SQL) 用于处理关系数据库。SQL Server 的主要界面工具是 SQL Server Management Studio (SSMS),它可以在 32 位和 64 位系统中运行。
![资源数据库 resource database](https://www.iesofts.com/wp-content/uploads/2023/01/resource-database.png)
资源数据库是第五个数据库。它补充了主数据库,因为 SQL Server 现在依赖它。它包含 SQL Server 2005 及更高版本中包含的所有系统对象。诸如 sys.objects 之类的系统对象在物理上存储在资源数据库中,但它们在逻辑上也存在于每个数据库的 sys 模式中。
资源数据库只能保存系统对象,不能存储用户数据或元数据。存储过程、目录视图和扩展过程是存储在资源数据库中的预创建系统 T-SQL 代码的示例。
资源数据库的实际名称是 mssqlsystemresource。资源数据库有一个数据文件和一个日志文件,分别名为 mssqlsystemresource.mdf 和 mssqlsystemresource.ldf,默认位于<drive letter>:Program FilesMicrosoft SQL ServerMSSQL<version num>。<实例名称>MSSQLBinn。
资源数据库简化并加速了升级到新版本 SQL Server 的过程。以前,更新 SQL Server 涉及删除和重新创建系统对象。由于资源数据库文件包含所有系统对象,管理员可以通过简单地将资源数据库文件(mssqlsystemresource.mdf 和 mssqlsystemresource.ldf)传输到本地服务器来进行更新。
为什么资源数据库很重要?
资源数据库的主要目标是尽可能快速有效地更新服务器。因为所有系统对象都存在于资源数据库中,所以数据库管理员 (DBA)可以在升级期间用新的资源数据库文件覆盖以前的资源数据库文件。
此操作将更新数据库中的所有系统对象。在早期版本的 SQL Server 中,所有系统对象都必须在升级过程中被丢弃并重新创建,这非常耗时。此外,如果任何对象丢失或导致问题,设置将失败。
资源数据库的最佳实践
SQL Server 2000 及以前的版本中没有资源数据库。它在 SQL Server 2005 中首次引入,使升级更容易和更快。数据库中的每个 SQL Server 实例都有一个 ID。单个实例最多可以存储 32767 个数据库,这也是资源库 ID,每个实例中的每个资源库都一样。结果,资源数据库被赋予实例的最大可能数据库 ID。
由于资源库的隐藏状态,很多人并不知道资源库的存在。一些 DBA 认为,由于这是一个数据库,它需要与传统数据库相同级别的维护,这是不完全正确的。这可能会在未来导致更多问题。
以下是使用资源数据库时要遵循的一些最佳实践:
- 避免移动资源数据库文件。虽然存在用于传输其他系统数据库的文件的特殊过程,但不接受也不建议更改资源数据库的文件位置。升级 SQL Server 可能会导致安装新的资源数据库,该数据库将其文件永久存储在此固定位置。
- 与备份保持一致以恢复资源数据库。无法使用用于 SQL Server 中其他数据库的典型备份和还原过程来备份或还原资源数据库,因为无法使用 SQL Server 工具访问它。即使资源数据库的数据文件扩展名为 .mdf,也可以将其视为 .exe 文件。管理员可以使用此方法创建基于文件或基于磁盘的备份。
- 使用资源数据库将服务包应用到多个实例。DBA 必须将 mssqlsystemresource.mdf 和 mssqlsystemresource.ldf 文件复制到目标实例,以将服务包管理到多个实例。
- 使用资源数据库回滚更改。如果 DBA 需要撤消服务包所做的更改,管理员必须将 .mdf 和 .ldf 文件替换为以前备份版本中的文件。