救命!我的主数据库已损坏,我什至无法使SQL实例联机!我有什么选择来备份服务器?
我确实有master的备份,但是MSDN页面“还原master数据库”要求我以单用户模式启动实例,而我做不到!
(注意:我没有针对SQL版本指定这个问题,以便成为更广泛应用的参考。关于DBA.SE也有一些类似的问题,但是没有涉及服务器无法启动的问题。)
救命!我的主数据库已损坏,我什至无法使SQL实例联机!我有什么选择来备份服务器?
我确实有master的备份,但是MSDN页面“还原master数据库”要求我以单用户模式启动实例,而我做不到!
(注意:我没有针对SQL版本指定这个问题,以便成为更广泛应用的参考。关于DBA.SE也有一些类似的问题,但是没有涉及服务器无法启动的问题。)
Answers:
这是我要调查的一些途径。不要做所有这些事情(其中一些是实现同一目的的不同技术),但是值得考虑:
1.直接检查SQL错误日志
直接浏览到包含SQL错误日志的文件夹,然后将最新日志加载ERRORLOG
到记事本中,以获取有关SQL实例为何不启动的更多详细信息。也许您会发现问题根本不在master数据库上。
2.尝试以单用户模式启动实例
这是SQL Server启动选项的完整列表,包括-m
(单用户模式)和-f
(最低配置模式)。如果存在问题,则其他选项可让您指定master数据库的路径。
如果您能够启动实例,请按照您链接的MSDN文章中的步骤还原主数据库,或者执行Thomas LaRock的详细操作。
如果另一个应用程序总是先抓住单个用户连接,请首先禁用SQL Agent,以使其无法启动。其次,请参见有关使用-m"Application Name"
参数指定应用程序名称的问题。
3.还原master
到另一个实例并复制其文件
我仅发现了另一种提及该未记录技术的信息,但在上个周末我成功地使用了它,因此值得一试。
如果您无法以单用户模式启动实例,但是又有另一个SQL实例运行完全相同的发行版和build,请尝试将最后一个已知的良好的master数据库备份从死服务器还原到另一个实例:
master_please_god_let_this_work
),WITH MOVE
这样就不会master
在您的优质服务器上覆盖WITH NORECOVERY
。不确定是否需要这样做,但让我感觉更好,因为我知道其他服务器不会更改已还原的主服务器中的任何内容ALTER DATABASE [master_please_god_let_this_work] SET OFFLINE
master.mdf
和mastlog.ldf
文件,以用已还原的版本替换错误的主文件master
。4.重建系统数据库
如果您没有其他实例运行相同版本,或者您不习惯使用#3中列出的无证程序,或者没有备份master
(为什么没有备份?),您可以从原始安装磁盘重建SQL系统数据库:
Setup.exe /ACTION=REBUILDDATABASE /...
完成此操作后,您可以按照先前链接的步骤master
从上次正常备份中还原。您还需要还原的最新备份,msdb
以保留所有作业,作业计划和作业历史记录。
5.将所有USER数据库还原到新的(或现有的)SQL实例
如果您有另一个现有实例正在运行(适当的SQL版本,足够的磁盘空间),则在进行上述其他故障排除步骤时,我可能会从最新备份开始数据库还原,以防万一我需要它们。
如果新的(或重新安装的)实例可以访问同一磁盘,则将它们简单地附加为新数据库的速度会更快:
CREATE DATABASE foo
ON (FILENAME = 'D:\data\foo.mdf'),
(FILENAME = 'D:\data\foo_log.ldf')
FOR ATTACH;
6.重新做任何更改 master
一旦成功还原master
(通过上述任何一种技术),就需要调查可能丢失的任何更改(如果这些更改是在刚还原的备份之后进行的):
找不到这些方法的神奇方法,如果有这些更改,则必须回到自己公司的文档记录中进行这些更改。