在可疑模式下分离和附加数据库

时间:2014-07-09 11:30:30

标签: sql-server database-administration sql-server-administration

问题:

我们的某个服务器中的备份失败,并显示以下消息:(通过Netbackup备份)

Could not allocate space for object 'dbo.backupfile'.'PK__backupfi__57D1800AC4FFEEA3' 
in database 'msdb' because the 'PRIMARY' filegroup is full. Create disk space by deleting 
unneeded files, dropping objects in the filegroup, adding additional files to the 
filegroup, or setting autogrowth on for existing files in the filegroup.>
    DBMS MSG - SQL Message <3009><[Microsoft][ODBC SQL Server Driver][SQL Server]Could not 
insert a backup or restore history/detail record in the msdb database. This may indicate a 
problem with the msdb database.

在检查时,我可以看到msdb所在的主数据文件所在的Mount Drive已满(总大小:99GB,可用空间:0字节)。该驱动器没有任何我可以删除的不需要的文件,并获得一些简单的磁盘空间。所以我查看了驱动器,发现了一个6GB大小的数据库日志文件,其中超过5.5GB是免费的。我认为缩小它会释放驱动器中相当大的空间并暂时解决问题。但是当我尝试收缩日志文件时,我收到一条错误消息,说“它已经被恢复标记为SUSPECT”。由于害怕最坏的情况,我刷新了对象资源管理器和宾果游戏中的数据库列表。!!它被标记为'可疑'

3 个答案:

答案 0 :(得分:1)

解决方案:

我检查了服务器中的其他驱动器,发现其中有一个有足够的可用空间。所以我的下一次尝试是分离数据库(比如'XYZ'),将其日志文件移动到另一个驱动器然后附加它。这将在驱动器中释放足够的空间,并且还可以让DB从可疑模式恢复。所以我尝试分离数据库,但它没有用。

Cannot detach a suspect database. It must be repaired or dropped. Cannot be opened as the DB is in Suspect mode

所以我试着把它带到单用户模式: 执行脚本将DB置于单用户模式

USE master;
GO
ALTER DATABASE [XYZ]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

将数据库设置为脱机。

-- Take the Database Offline
ALTER DATABASE [XYZ] SET OFFLINE WITH
ROLLBACK IMMEDIATE
GO

现在我能够成功分离数据库。在分离之后,我将日志文件复制到具有足够可用空间的另一个驱动器。然后我尝试将数据库附加回来。但在附加时,它给出了以下错误信息:

Error: 5123 CREATE FILE encountered operating system error 5A(Access denied.)

要解决它,以下是我所做的步骤:

  1. 右键单击.mdf文件 - &gt;特性
  2. 在“安全”标签下,按“继续”
  3. 点击“添加”将您包含在“群组或用户名”
  4. 在弹出的弹出窗口中输入登录ID,“检查姓名”和“确定”
  5. 添加登录后,单击它,然后在下面的框(用户权限)中,选中允许用户进行“完全控制”。检查“完全控制”非常重要,因为默认情况下,用户只能使用“读取”和“读取”功能。执行'权限。如果你尝试只附加那些默认权限,你将再次获得Access denied errors。
  6. 在此之后,我能够成功附加数据库,并且发现其状态为“正常”。

    希望这会对某人有所帮助:)。

答案 1 :(得分:0)

正如我已经提到的here

您也可以使用它来执行 SQL 修复工具以从可疑模式恢复 SQL 数据库。

  • 下载、安装和运行适用于 MS SQL 软件的 Stellar Repair。
  • 从“选择数据库”窗口中,选择“浏览”或“搜索”以选择可疑数据库的 SQL 数据库文件 (.mdf)。
  • 选择文件后,点击修复。预览修复后的 MDF 文件以获取可恢复的 SQL Server 数据库对象。
  • 单击“文件”菜单上的“保存”以保存修复后的文件。
  • 在“保存数据库”窗口中,执行保存操作以访问数据库。

答案 2 :(得分:0)

在这种情况下永远不要分离数据库。我还建议不要使用修复允许数据丢失选项运行 DBCC CHECKDB,因为您可能会丢失重要数据。您可以查看此参考:https://community.spiceworks.com/topic/1078473-sql-server-database-in-suspect-mode