问题:
备份在我们的一台服务器中失败,并显示以下消息:(通过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的主数据文件所在的装载驱动器已满(总大小:99GB,可用空间:0字节(。驱动器没有任何不需要的文件,我可以删除这些文件并获得一些轻松的磁盘空间。所以我环顾硬盘,发现了一个6GB大小的数据库日志文件,其中超过5.5GB是免费的。我认为缩小它会在驱动器中腾出相当多的空间,并暂时解决问题。但当我尝试对日志文件进行收缩时,我收到一条错误消息,上面写着"它已被恢复标记为可疑"。由于担心最坏的情况,我刷新了对象资源管理器和Bingo中的数据库列表。。!!就在那里,标记为"可疑">
解决方案:
我检查了服务器中的其他驱动器,发现其中一个有足够的可用空间。因此,我的下一次尝试是分离数据库(比如"XYZ"(,将其日志文件移动到另一个驱动器,然后连接它。这将在驱动器中释放足够的空间,也将使数据库从可疑模式中恢复。所以我尝试分离数据库,但没有成功。
Cannot detach a suspect database. It must be repaired or dropped. Cannot be opened as the DB is in Suspect mode
所以我试着把它带到单用户模式:执行脚本,将数据库置于单用户模式
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.)
为了解决这个问题,我采取了以下步骤:
- 右键单击.mdf文件->属性
- 在"安全"选项卡下,按Continue
- 单击"添加"将您包括在"组或用户名"中
- 在弹出窗口中给你登录Id,"检查姓名"one_answers"确定">
- 添加登录名后,单击它,然后在下面的框(用户权限(中,选中允许用户"完全控制"。检查"完全控制"非常重要,因为默认情况下,用户将只有"读取"one_answers"读取&执行权限。如果您尝试仅使用这些默认权限附加,则会再次出现拒绝访问错误
在这之后,我能够成功地连接数据库,并且它的状态被发现是"正常"。
希望这能帮助到某人:(
在这种情况下永远不要分离数据库。我还建议不要使用修复允许数据丢失选项运行DBCC CHECKDB,因为您可能会丢失重要数据。您可以查看此参考:https://community.spiceworks.com/topic/1078473-sql-server-database-in-suspect-mode
尝试使用master数据库它将重置您可以使用的数据库的状态。
EXEC sp_resetstatus your_db_name
ALTER DATABASE your_db_name SET EMERGENCY
DBCC checkdb (your_db_name)
ALTER database your_db_name SET SINGLE_USER with ROLLBACK IMMEDIATE
DBCC CHECKDB (your_db_name, REPAIR_ALLOW_DATA_LOSS)
Alter database your_db_name SET MULTI_USER