【问题标题】:FCB::Open failed: Could not open fileFCB::Open failed: 无法打开文件
【发布时间】:2023-04-05 12:29:02
【问题描述】:

机器在我缩小数据库时重新启动,此后SQL Server (MSSQLSERVER) 没有启动。阅读博客后,我将模板文件夹中的master.mdfmastlog.ldf 文件替换为相同的文件,假设主数据库在我缩小它时已损坏。

但是问题仍然存在,并且错误日志文件给出了以下消息,

Starting up database 'msdb'.
Starting up database 'mssqlsystemresource'.
Error: 17204, Severity: 16, State: 1.
FCB::Open failed: Could not open file E:\sql12_main_t.obj.x86Release\sql\mkmastr\databases\mkmastr.proj\MSDBData.mdf for file number 1.  OS error: 3(The system cannot find the path specified.).
Error: 5120, Severity: 16, State: 101.
Unable to open the physical file "E:\sql12_main_t.obj.x86Release\sql\mkmastr\databases\mkmastr.proj\MSDBData.mdf". Operating system error 3: "3(The system cannot find the path specified.)".
Error: 17207, Severity: 16, State: 1.
FileMgr::StartLogFiles: Operating system error 2(The system cannot find the file specified.) occurred while creating or opening file 'E:\sql12_main_t.obj.x86Release\sql\mkmastr\databases\mkmastr.proj\MSDBLog.ldf'. Diagnose and correct the operating system error, and retry the operation.
File activation failure. The physical file name "E:\sql12_main_t.obj.x86Release\sql\mkmastr\databases\mkmastr.proj\MSDBLog.ldf" may be incorrect.
The resource database build version is 12.00.2000. This is an informational message only. No user action is required.
Starting up database 'model'.

我可以清楚地说我的机器上没有E:\ 分区。你能帮我修复我现在认为是错误的路径吗?

【问题讨论】:

  • 我投票决定关闭并将这个问题移至 dba.stackexchange.com。

标签: sql-server database-administration


【解决方案1】:

我不知道这是一个 bug 还是 SQL Server 2014 通常会出现的问题。 对数据库的一些引用将保持如下:

E:\sql12_main_t.obj.x86Release\sql\mkmastr\databases\mkmastr.proj\MSDBData.mdf

所以你基本上必须直接在数据库中修改它们。

以管理员身份运行 CMD 控制台并访问您的数据库,如下所示:

SQLCMD -S .\

如果你有一个实例,也可以这样:

SQLCMD –S .\INSTANCENAME

使用以下语句将文件重命名为默认位置:

ALTER DATABASE model MODIFY FILE ( NAME = modeldev, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\model.mdf');
ALTER DATABASE model MODIFY FILE ( NAME = modellog, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\modellog.ldf');
ALTER DATABASE msdb MODIFY FILE ( NAME = MSDBData, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MSDBData.mdf');
ALTER DATABASE msdb MODIFY FILE ( NAME = MSDBLog, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MSDBLog.ldf');
ALTER DATABASE tempdb MODIFY FILE ( NAME = tempdev, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\temp.mdf');
ALTER DATABASE tempdb MODIFY FILE ( NAME = templog, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\temp.ldf');
GO

之后,您的 sa 用户将保持没有密码(我遇到过,不确定是否总是发生),只需再次登录控制台并手动更改密码即可:

ALTER LOGIN sa WITH PASSWORD = 'newpassword' UNLOCK

当我做这最后一步时,我遇到了一个问题,因为我的默认登录配置了 Windows 身份验证,所以说明:

SQLCMD -S .\

没用,加了sa不加密码的用户:

SQLCMD -S .\ -Usa

希望对你有帮助。

我在这里找到了解决方案:

https://social.technet.microsoft.com/wiki/contents/articles/31786.sql-server-not-starting-after-fresh-installation.aspx

【讨论】:

  • 对于那些仍然无法登录的人可以创建一个新帐户 CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS GO ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK] GO
  • 我在这方面工作了很长时间,一直搞不定,基本上我可以从第一部分启动 SQL,但之后 SQLCMD 无法使用 windows 身份验证连接。如果我使用 MSSMS,那么 db engined 会尝试在同一个错误位置加载它的资源 db。我的解决方案是简单地给引擎它想要的东西......创建一个 RamDisk 和那个路径并将系统 dbs 复制到那个位置。现在我可以使用 MSSMS 并将路径设置为正确的值。
  • 发生在我身上完全相同的问题,但在 SQL Server 2017 中。感谢您解决。
【解决方案2】:

【讨论】:

  • 将完全控制权交给用户 NT Service\MSSQLSERVER 对我有帮助。
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 2018-09-10
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 2012-06-16
相关资源
最近更新 更多