19

我在我的机器上的本地 SQL Server 2008 R2 实例中遇到了这个问题。这个实例上有几个数据库。但我无法从对象资源管理器中看到它们中的任何一个。

我可以从新的查询窗口查询我的数据库。但无法看到他们中的任何一个。

每当我尝试探索数据库时,我都会收到此错误:

无法打开数据库“msdb”。它已被恢复标记为可疑。有关详细信息,请参阅 SQL Server 错误日志。(Microsoft SQL Server,错误:926)。

我试过了

  1. 刷新连接
  2. 重新连接
  3. 重新启动服务 Sql Server (MSSQLSERVER)。
  4. 重新启动 SQL Server Management Studio
  5. 重新启动我的机器

我也尝试过以上的组合,但没有任何效果。

我的操作系统是 Windows 7 Ultimate(64 位)。

SQL Server Management Studio 版本为 10.50.2500.0。

4

3 回答 3

21

我在这个链接中找到了我的答案。

编辑:包括链接中的两个解决方案,因为将来可能会出现Linkrot

sa使用帐户登录,用于两种解决方案。

解决方案 1

  1. 打开新的查询窗口

  2. EXEC sp_resetstatus 'DB_Name';(说明:sp_resetstatus关闭数据库上的可疑标志。此过程更新 中命名数据库的模式和状态列sys.databases。另请注意,只有具有 sysadmin 权限的登录才能执行此操作。)

  3. ALTER DATABASE DB_Name SET EMERGENCY;(说明:一旦数据库设置为 EMERGENCY 模式,它就会变成 READ_ONLY 副本,并且只有 sysadmin 固定服务器角色的成员才有权限访问它。)

  4. DBCC checkdb('DB_Name');(解释:检查所有对象之间的完整性。)

  5. ALTER DATABASE DB_Name SET SINGLE_USER WITH ROLLBACK IMMEDIATE;(说明:将数据库设置为单用户模式。)

  6. DBCC CheckDB ('DB_Name', REPAIR_ALLOW_DATA_LOSS);(说明:修复错误)

  7. ALTER DATABASE DB_Name SET MULTI_USER;(说明:将数据库设置为多用户模式,以便其他人现在可以访问它。)

解决方案 2

  1. 在对象资源管理器中 --> 打开的连接项 --> 右键单击​​ --> 停止 对象资源管理器

  2. 打开控制面板 --> 管理工具 --> 服务 控制面板 -> 管理工具 -> 服务

  3. 从服务中选择Sql Server (MSSQLSERVER)项目->右键单击->停止 停止 Sql Server (MSSQLSERVER)

  4. 打开C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA

  5. 移动MSDBData.mdf&MSDBlog.ldf到任何其他地方

  6. 然后从新位置再次复制此文件并将其放在旧位置

    C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA

  7. 在对象资源管理器中打开的连接中 --> 右键单击​​ --> 开始

  8. 然后刷新数据库。

  9. 然后你可以分离 MSDB 文件

第二种解决方案对我有用。

注意:我必须从另一台工作机器获取“msdb”数据库 mdf 和 ldf 文件才能使其正常工作。

于 2013-05-08T09:12:57.117 回答
0

立即解决我的问题的是替换现有的 MSDBData.mdf 和 MSDBlog.ldf 文件

在 C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA 中。我从另一台工作机器上复制了这 2 个文件,停止了在我的机器上运行的 SQL 服务,从它们的位置删除了上面现有的 2 个文件并添加了新的 2 个复制。重新启动服务后,问题已得到解决。

于 2015-02-18T17:28:34.350 回答
0

试试这个

  • 将数据库设置为单用户模式:

    更改数据库 dbname 设置 single_user

  • 现在将数据库设置为紧急模式:

    更改数据库 dbname 设置紧急

  • 修复丢失的日志文件或损坏的日志文件与数据丢失。

    DBCC CHECKDB('dbname',REAPIR_ALLOW_DATA_LOSS)

  • 现在将数据库设置为多用户模式;

    更改数据库 dbname 设置 multi_user

使用此命令可能会丢失数据。这也取决于客户的批准。为避免这种情况,您可以使用其他一些专用软件(如此处所述)从可疑模式中恢复。

于 2021-07-07T12:18:56.787 回答