暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在SQL Server中重建系统数据库

原创 eternity 2022-07-15
1311

在本文中,我们将讨论系统数据库的损坏问题,系统数据库的损坏味着一个或多个系统数据库已经损坏。系统数据库(如主数据库)中的损坏是一个大问题,因为SQL Server将会停止运行。让我们看看如何解决这个问题。

关于系统数据库

系统数据库是SQL Server内部使用的数据库,是其运行所必需的

有五个系统数据库:

  • 主数据库:存储SQL Server实例的系统级信息。

  • msdb数据库:它由SQL Server代理用于调度作业。

  • 模型数据库:它用作创建新数据库的模板。

  • 资源数据库:它存储与每个数据库的sys模式相关联的内部系统对象。

  • Tempdb数据库:它用作存储临时对象或中间结果集的空间。

在SQL Server Management Studio(SSMS)中,在对象浏览器的系统数据库文件夹下,可以找到五个系统数据库中的四个。
微信图片_20220715092242.png
特别是,主数据库被视为“SQL Server引擎的核心”,因为它包含进程、锁、远程访问等信息。它还包含有关其他用户数据库的信息。如果此数据库已损坏,SQL将不会启动。

SQL Server引擎不再启动

我们经常注意到,仅仅因为数据库引擎没有启动,系统数据库就被损坏了。查看SQL Server错误日志时,会出现以下错误:

Error: 17113, Severity: 16, State: 1.

Error 2 (The system cannot find the file specified.) occurred while opening file

'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf' to obtain configuration information at startup.

错误可能是由无效的启动选项引起的。验证您的启动选项,并在必要时更正或删除它们。

该消息表示主机。无法访问mdf文件。

在这种情况下,我们需要重建系统数据库。

重建系统数据库

注意:以下过程将重建master、model、msdb和tempdb系统数据库。我们无法指定要重建的系统数据库。重建操作将删除并重新创建系统数据库。因此,系统数据库中所做的更改将丢失,我们需要备份来恢复。

在开始这个过程之前,我们需要检查一些事情。

重建过程使用系统数据库模板文件。因此,请转到Binn\Templates文件夹并确保这些文件存在。
微信图片_20220715093152.png
接下来,找到setup.exe文件。
微信图片_20220715093257.png

现在,我们需要更改安装文件所在文件夹的实际路径。

为此,请打开命令提示符并键入:

Cd C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\SQL2019

微信图片_20220715093415.png

现在,我们将执行设置带有一些参数的.exe文件。

以下是一些参数:

  • /QUIET —执行静默安装

  • /ACTION—设置要重建数据库的值

  • /INSTANCENAME—实例的名称

  • /SQLSYSADMINACCOUNTS—帐户的名称(帐户必须在SQL Server中具有管理员权限)

  • /SAPWD—为SA登录提供新密码(如果SA帐户被禁用并使用强密码设置,则启用SA帐户)

  • /SQLCollation—为SQL Server提供新的排序规则名称(可选)

现在键入以下命令:

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=<XYZ> /SQLSYSADMINACCOUNTS=BUILTIN\Administrators /SAPWD=<PWD>

记住用实例名替换字符串,用密码替换字符串。

按ENTER键执行设置。

如果没有出现错误消息,则该过程成功。您已恢复实例,SQL Server将再次正常运行。

恢复主数据库和msdb数据库的备份

现在,我们的SQL Server再次运行。但是,请记住,重建操作后,对系统数据库所做的更改将丢失。

为了使系统恢复到原来的状态,我们需要恢复主数据库和msdb数据库的备份。
微信图片_20220715094452.png
s参数表示实例的名称。

使用-m参数,SQL Server将仅在应用程序为SQLCMD时接受连接。

现在SQL server处于单用户模式,我们可以恢复主系统数据库。

使用sqlcmd命令,我们可以从命令行执行T-SQL命令。

在-S参数之后,写出正确的实例名。
微信图片_20220715094546.png
现在我们可以恢复主数据库。为此,键入以下命令:
微信图片_20220715094626.png

恢复过程完成后,SQL Server实例将关闭。

最后,像往常一样启动SQL server实例,然后恢复msdb数据库。

总结

使用上述过程,我们可以解决由于系统数据库损坏而出现的大多数问题。然而,也有一些特殊情况。例如,模型数据库可能已损坏。创建新数据库时,模型数据库将用作模板。

由于每次SQL Server启动时都会创建tempdb数据库,并且tempdb的创建需要模型数据库,因此如果模型数据库损坏,SQL Server将不会启动。在这种情况下,我们可以尝试使用跟踪标志T3608和T3609启动SQL Server,然后通过T-SQL从备份中恢复模型数据库。

[阅读更多:How to Fix Recovery Pending State in SQL Server Database and Resolving SQL Database Stuck “In Recovery” Mode(如何修复SQL Server数据库中的恢复挂起状态并解决SQL数据库卡在“恢复”模式下的问题)]

原文标题:Rebuild System Databases in SQL Server
原文作者: Priyanka Chauhan
原文链接:https://dzone.com/articles/rebuild-system-databases-in-sql-server

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论