必须重新生成系统数据库以修复 master、 model、 msdb 或 资源 系统数据库中的损坏问题,或者修改默认的服务器级排序规则。 本主题提供在 SQL Server 2014 中重新生成系统数据库的分步说明。
本主题内容
在您开始之前
局限性与限制
重新生成 master、model、msdb 和 tempdb 系统数据库时,数据库将被删除并在原始位置重新创建。 如果在 rebuild 语句中指定了新的排序规则,将使用该排序规则设置创建系统数据库。 对这些数据库所做的任何用户修改都将丢失。 例如,你可能在 master 数据库中具有用户定义的对象、msdb 中的计划作业或更改模型数据库中的默认数据库设置。
先决条件
在重新生成系统数据库之前执行以下任务,以确保可以将系统数据库还原到其当前设置。
记录所有服务器范围的配置值。
SELECT * FROM sys.configurations;记录所有已应用于 SQL Server 实例的 Service Pack 和补丁,以及当前的排序规则。 重新生成系统数据库后,必须重新应用这些更新。
SELECT SERVERPROPERTY('ProductVersion ') AS ProductVersion, SERVERPROPERTY('ProductLevel') AS ProductLevel, SERVERPROPERTY('ResourceVersion') AS ResourceVersion, SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime, SERVERPROPERTY('Collation') AS Collation;记录系统数据库的所有数据和日志文件的当前位置。 重新生成系统数据库会将所有系统数据库安装到其原始位置。 如果已将系统数据库数据或日志文件移动到其他位置,则必须再次移动这些文件。
SELECT name, physical_name AS current_file_location FROM sys.master_files WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));找到 master、model 和 msdb 数据库的当前备份。
如果将 SQL Server 的实例配置为复制分发服务器,请找到分发数据库的当前备份。
确保你具有重新生成系统数据库的适当权限。 若要执行此操作,你必须是
sysadmin固定服务器角色的成员。 有关详细信息,请参阅 Server-Level 角色。验证本地服务器上是否存在主数据库、模型、msdb 数据和日志模板文件的副本。 模板文件的默认位置为 C:\Program Files\Microsoft SQL Server\MSSQL12。MSSQLSERVER\MSSQL\Binn\Templates。 这些文件在重新生成过程中使用,必须存在才能使安装程序成功。 如果缺少这些文件,请运行安装程序的“修复”功能,或从安装媒体手动复制文件。 若要在安装介质上找到文件,请导航到相应的平台目录(x86 或 x64),然后导航到 setup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL。X\MSSQL\Binn\Templates。
重新生成系统数据库
以下过程重新生成 master、model、msdb 和 tempdb 系统数据库。 不能指定要重新生成的系统数据库。 对于群集实例,此过程必须在活动节点上执行,并且相应的群集应用程序组中的 SQL Server 资源必须在执行该过程之前脱机。
此过程不会重新生成资源数据库。 请参阅本主题后面的“重新生成资源数据库过程”部分。
若要为 SQL Server 实例重新生成系统数据库,请执行以下作:
将 SQL Server 2014 安装介质插入磁盘驱动器,或者从命令提示符将目录更改为本地服务器上 setup.exe 文件的位置。 服务器上的默认位置为 C:\Program Files\Microsoft SQL Server\120\Setup Bootstrap\Release。
在命令提示符窗口中,输入以下命令。 方括号用于指示可选参数。 不要输入方括号。 使用启用了用户帐户控制(UAC)的 Windows作系统时,运行安装程序需要提升的权限。 命令提示符必须以管理员身份运行。
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]参数名称 DESCRIPTION /QUIET 或 /Q (静默模式) 指定安装程序在无用户界面的情况下运行。 /ACTION=REBUILDDATABASE 指定安装程序重新创建系统数据库。 /INSTANCENAME=InstanceName SQL Server 实例的名称。 对于默认实例,请输入 MSSQLSERVER。 /SQLSYSADMINACCOUNTS=帐户 指定要添加到 sysadmin固定服务器角色的 Windows 用户组或个人账户。 指定多个帐户时,请用空格分隔帐户。 例如,输入 BUILTIN\Administrators MyDomain\MyUser。 指定帐户名称中包含空白的帐户时,请将帐户括在双引号中。 例如,输入NT AUTHORITY\SYSTEM。[ /SAPWD=StrongPassword ] 指定 SQL Server sa帐户的密码。 如果实例使用混合身份验证(SQL Server 和 Windows 身份验证)模式,则需要此参数。
** 安全说明 ** 该sa帐户是一个众所周知的 SQL Server 帐户,它通常以恶意用户为目标。 使用强密码进行sa登录非常重要。
不要为 Windows 身份验证模式指定此参数。[ /SQLCOLLATION=CollationName ] 指定新的服务器级排序规则。 此参数是可选的。 如果未指定,将使用服务器的当前排序规则。
**重要** 更改服务器级排序规则不会更改现有用户数据库的排序规则。 默认情况下,所有新创建的用户数据库都将使用新的排序规则。
有关详细信息,请参阅设置或更改服务器排序规则。安装程序完成系统数据库的重新生成后,它将返回命令提示符,不显示任何消息。 检查 Summary.txt 日志文件,验证进程是否已成功完成。 此文件位于 C:\Program Files\Microsoft SQL Server\120\Setup Bootstrap\Logs。
重建之后的任务
重新生成数据库后,可能需要执行以下附加任务:
还原主数据库、模型和 msdb 数据库的最新完整备份。 有关详细信息,请参阅备份和还原系统数据库 (SQL Server)。
重要
如果更改了服务器排序规则,请不要还原系统数据库。 这样做会将新排序规则替换为以前的排序规则设置。
如果备份不可用,或者还原的备份不是最新的,请重新创建任何缺少的条目。 例如,为用户数据库、备份设备、SQL Server 登录名、终结点等重新创建所有缺失条目。 重新创建条目的最佳方式是运行创建条目的原始脚本。
重要
建议保护脚本,以防止个人未经授权更改脚本。
如果将 SQL Server 的实例配置为复制分发服务器,则必须还原分发数据库。 有关详细信息,请参阅 备份和还原复制的数据库。
将系统数据库移动到之前记录的位置。 有关详细信息,请参阅 移动系统数据库。
验证服务器范围的配置值是否与之前记录的值匹配。
重新生成资源数据库
以下过程重新生成资源系统数据库。 重新生成资源数据库时,所有服务包和热修补程序都会丢失,因此必须重新应用。
要重建资源系统数据库:
从分发媒体启动 SQL Server 2014 安装程序(setup.exe)。
在左侧导航区域中,单击“ 维护”,然后单击“ 修复”。
安装程序支持规则和文件例程将运行,以确保您的系统上安装了必备组件,并且计算机能够通过安装程序验证规则。 单击 “确定” 或 “安装” 以继续操作。
在“选择实例”页上,选择要修复的实例,然后单击“ 下一步”。
将运行修复规则以验证修复操作。 若要继续,请单击“Next”。
在 “准备修复 ”页中,单击“ 修复”。 “ 完成 ”页指示修复操作已完成。
创建新的 msdb 数据库
msdb如果数据库已损坏,并且没有数据库的备份msdb,则可以使用 instmsdb 脚本创建新的msdb数据库。
警告
msdb使用 instmsdb 脚本重新生成数据库将删除存储在msdb中的所有信息,例如作业、警报、操作员、维护计划、备份历史记录、基于策略的管理设置、数据库邮件和性能数据仓库等。
停止连接到数据库引擎的所有服务,包括 SQL Server 代理、SSRS、SSIS 以及使用 SQL Server 作为数据存储的所有应用程序。
使用以下命令从命令行启动 SQL Server:
NET START MSSQLSERVER /T3608有关详细信息,请参阅 “启动”、“停止”、“暂停”、“恢复”、“重启数据库引擎”、“SQL Server 代理”或“SQL Server 浏览器服务”。
在另一个命令行窗口中,通过执行以下命令分离
msdb数据库,将 <servername> 替换为 SQL Server 实例:SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"使用 Windows 资源管理器重命名
msdb数据库文件。 默认情况下,它们位于 SQL Server 实例的 DATA 子文件夹中。使用 SQL Server 配置管理器,通常停止并重启数据库引擎服务。
在命令行窗口中,连接到 SQL Server 并执行命令:
SQLCMD -E -S<servername> -i"C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Install\instmsdb.sql" -o" C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Install\instmsdb.out"将服务器名称>替换为<数据库引擎的实例。 使用 SQL Server 实例的文件系统路径。
使用 Windows 记事本,打开 instmsdb.out 文件并检查输出是否存在任何错误。
重新应用实例上安装的任何 Service Pack 或修补程序。
重新创建存储在
msdb数据库中的用户内容,例如作业、警报等。备份
msdb数据库。
排查重建错误
命令提示符窗口中显示语法和其他运行时错误。 检查 Setup 语句中是否出现以下语法错误:
每个参数名称前面缺少斜杠标记(/)。
参数名称和参数值之间缺少等号(=)。
参数名称和等号之间存在空格。
在语法中未指定的逗号(,)或其他字符的存在。
重新生成作完成后,检查 SQL Server 日志中是否存在任何错误。 默认日志位置为 C:\Program Files\Microsoft SQL Server\120\Setup Bootstrap\Logs。 若要查找包含重新生成过程结果的日志文件,请从命令提示符将目录更改为 Logs 文件夹,然后运行 findstr /s RebuildDatabase summary*.*。 此搜索将指向包含重新生成系统数据库结果的任何日志文件。 打开日志文件并检查它们以获取相关的错误消息。