重新生成系统数据库
必须重新生成系统数据库才能修复 master、 model、 msdb或 resource 系统数据库中的损坏问题或者修改默认的服务器级排序规则。 本主题提供在 SQL Server 2014 中重新生成系统数据库的分步说明。
本主题内容
开始之前:
过程:
跟进:
开始之前
限制和局限
重新生成 master、model、msdb 和 tempdb 系统数据库时,将删除这些数据库,然后在其原位置重新创建它们。 如果在重新生成语句中指定了新排序规则,则将使用该排序规则设置创建系统数据库。 用户对这些数据库所做的所有修改都会丢失。 例如,您在 master 数据库中的用户定义对象、msdb 中的预定作业或 model 数据库中对默认数据库设置的更改都会丢失。
先决条件
在重新生成系统数据库之前执行下列任务,以确保可以将系统数据库还原至它们的当前设置。
记录所有服务器范围的配置值。
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
固定服务器角色的成员才能执行此操作。 有关详细信息,请参阅 服务器级别角色。请验证本地服务器上是否有 master、model、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资源脱机。
此过程不重新生成 resource 数据库。 请参阅本主题后面的“resource 数据库重新生成过程”部分。
重新生成 SQL Server 实例的系统数据库:
将 SQL Server 2014 安装介质插入磁盘驱动器,或者从命令提示符处将目录更改为本地服务器上setup.exe文件的位置。 在服务器上的默认位置为 C:\Program Files\Microsoft SQL Server\120\Setup Bootstrap\Release。
在命令提示符窗口中,输入以下命令。 方括号用来指示可选参数。 不要输入括号。 在使用 Windows 操作系统且启用了用户帐户控制 (UAC) 时,运行安装程序需要提升特权。 必须以管理员身份运行命令提示符。
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]
参数名称 说明 /QUIET 或 /Q 指定在没有任何用户界面的情况下运行安装程序。 /ACTION=REBUILDDATABASE 指定安装程序将重新创建系统数据库。 /INSTANCENAME=InstanceName SQL Server 实例的名称。 对于默认实例,请输入 MSSQLSERVER。 /SQLSYSADMINACCOUNTS=accounts 指定要添加到 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。
重新生成后的任务
重新生成数据库后,您可能需要执行以下额外任务:
还原 master、model 和 msdb 数据库的最新完整备份。 有关详细信息,请参阅备份和还原系统数据库 (SQL Server)。
重要
如果更改了服务器排序规则,请不要还原系统数据库。 否则,将使新排序规则替换为以前的排序规则设置。
如果没有备份或者还原的备份不是最新的,请重新创建所有缺失的条目。 例如,为用户数据库、备份设备、SQL Server登录名、终结点等重新创建所有缺失条目。 重新创建这些条目的最佳方法是运行创建它们的原始脚本。
重要
建议您保护好脚本,以防未经授权的人员更改脚本。
如果 SQL Server 实例配置为复制分发服务器,则必须还原分发数据库。 有关详细信息,请参阅 备份和还原复制的数据库。
将系统数据库移到您以前记录的位置。 有关详细信息,请参阅 移动系统数据库。
验证服务器范围的配置值是否与您以前记录的值相符。
resource 数据库重新生成
以下过程将重新生成 resource 系统数据库。 重新生成 resource 数据库时,所有的 Service Pack 和修补程序都将丢失,因此必须重新应用。
重新生成 resource 系统数据库:
从分发媒体启动 SQL Server 2014 安装程序 (setup.exe) 。
在左侧导航区域中单击 “维护” ,然后单击 “修复” 。
安装程序支持规则和文件例程将运行,以确保您的系统上安装了必备组件,并且计算机能够通过安装程序验证规则。 单击 “确定” 或 “安装” 以继续操作。
在“选择实例”页上,选择要修复的实例,然后单击 “下一步” 。
将运行修复规则以验证修复操作。 若要继续,请单击 “下一步” 。
在 “准备修复” 页上,单击 “修复” 。 “完成”页指示修复操作已完成。
创建新的 msdb 数据库
msdb
如果数据库已损坏,并且没有数据库备份msdb
,则可以使用 instmsdb 脚本创建新的 msdb
。
警告
msdb
使用 instmsdb 脚本重新生成数据库将消除存储在 中的所有msdb
信息,例如作业、警报、操作员、维护计划、备份历史记录、基于策略的管理设置、数据库邮件、性能Data Warehouse等。
停止连接到数据库引擎的所有服务,包括SQL Server 代理、SSRS、SSIS 以及使用SQL Server作为数据存储的所有应用程序。
使用 命令从命令行启动SQL Server:
NET START MSSQLSERVER /T3608
有关详细信息,请参阅 启动、停止、暂停、继续、重启 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"
将 servername> 替换为<数据库引擎的实例。 使用 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*.*
。 此搜索将引导您找到包含系统数据库重新生成结果的所有日志文件。 打开日志文件,检查其中有无相关错误消息。