SqlServer数据库恢复系统数据库
SqlServer数据库恢复系统数据库
温馨提示:本方法存在数据丢失风险,请谨慎操作,按本文操作出现数据丢失问题,与作者无法!
1背景
之前在本地安装了SqlServer数据库,安装好后,系统更新了SqlServer的漏洞,周末休息后,再次连接该数据库,发现数据库无法连接。在SqlServer配置器中无法启动服务并报错,通过查询系统日志,出现如下错误信息:
2问题产生原因
在SqlServer的漏洞升级过程中,出现升级未完成、丢包等,导致数据库服务无法启动。
3解决方案
根据日志问题,需要重新恢复master数据库,此处有俩种方法,一种通过直接复制相同配置数据库中的文件,进行替换;另一种重新生成master数据库。因第一种解决方法尝试失败,因此本文将使用第二种解决方案实现。
3.1备份相关数据
进入如下命令,进入单用户模式,对相关数据库进行备份(master、model、msdb、tempdb、重要业务数据库)
net start MSSQLSERVER /f /T3608
命令说明:
net start:系统命令
MSSQLSERVER:具体的SqlServer服务名称
/f:强制性启动服务
/T3608:使SqlServer以最小配置启动
通过如下命令,对数据库内容进行备份:
sqlcmd -S .\MSSQLSERVER -Q
"RESTORE DATABASE master FROM DISK = 'D:SqlServer\MSSQL16.MSSQLSERVER\MSSQL\Backup\master.bak' WITH REPLACE;"
命令说明:
sqlcmd:执行T-SQL语句
-S .\MSSQLSERVER:-S参数指定要连接的SQLServer实例,.\MSSQLSERVER要连接的实例名称(若使用其报错,可使用“.”,此时连接默认数据库)
-Q:其后跟要执行的T-SQL语句
"RESTORE DATABASE master FROM DISK = 'D:\SqlServer\MSSQL16.MSSQLSERVER\MSSQL\Backup\master.bak' WITH REPLACE;"
此处一定不要忘记双引号,双引号内为要执行的sql语句。
RESTORE DATABASE 数据库名称 FROM DISK='备份文件要存储的地方\数据库名称.bak' WITH REPLACE;
在备份过程中,若存在报错,那么恭喜你,无法使用该种方案在不丢失数据情况下,恢复系统数据库!!!
3.2恢复系统数据库
以管理员身份运行命令窗,通过cd /d,进入SqlServer安装介质目录,运行如下命令,重新恢复系统数据库
setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=admin/admin /SAPWD=sa
不要直接复制,要进行更改
上述命令来自于官网,具体参数大家可以点击下方官网连接,进行查看配置,并对重新生成数据库进行恢复: [重新生成系统数据库 - SQL Server | Microsoft Learn
必须重新生成系统数据库才能修复 master、model、msdb 或 resource 系统数据库中的损坏问题或者修改默认的服务器级排序规则。
“重新生成系统数据库 - SQL Server | Microsoft Learn”)
上述代码运行成功后,无任何提示,当再次出任命令输入行时(如下图),说明系统库重新生成成功,若中间出现各类输出,说明运行失败,根据提示,到相关目录下寻找日志文件,根据日志文件,解决问题后,重新运行命令。
进入 SqlServer 配置器,重新启动 SqlServer 服务即可。
3.3 还原备份数据库
使用 SMSS 软件,连接刚刚恢复的数据库,进行恢复。此处建议仅恢复系统数据库的数据,不要保留复制设置,否则任会出现无法启动的情况。
4 总结
以上是该问题的一种解决方案,该种方案存在数据丢失风险,请大家谨慎操作。数据无价,为了避免造成数据丢失,大家要养成数据备份良好习惯。同时,建议大家关闭系统的自动更新,避免因系统更新导致数据库出现问题。个人能力有限,文章存在不足之处,欢迎大家积极评论。