我被困住了。
我刚刚接管了 SQL Server 的维护工作...该服务器已经很长时间没有备份了...日志文件已经增长到超过 1.61TB...是的,1.61TB。
它已经占用了所有可用的磁盘空间。我尝试过备份(由于日志文件大小而无法备份),尝试过分离(由于日志文件已满而无法备份),尝试过缩小数据库和日志文件(无法备份...出现各种错误。)由于以下几个原因,我现在处于非常困难的境地...
这不再是一个“使用”的程序,但人们仍然可以访问它来获取数据。
这使得2TB驱动器容量降至9.94MB。
帮助。
编辑:此外,我无法将恢复模式更改为“完整”以进行正确的备份...它只是坐着旋转...我要给它几个小时并检查它。
真痛苦。
答案1
通常在这些情况下,最好将数据库的恢复模式切换为简单模式,然后对日志文件(而不是数据库本身)进行收缩。有时,您必须收缩日志几次才能将其缩小。
如果在执行此操作之前无法获得良好的备份,请确保在执行此操作后立即获得良好的备份。
答案2
既然您说数据库处于简单恢复状态...请在计划维护期间(将会有停机时间)分块尝试此操作。
USE master
Go
ALTER DATABASE YourDB
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [YourDB] SET RECOVERY SIMPLE WITH NO_WAIT
GO
(我知道,我知道,你说这很简单。但对于简单的恢复来说,这是一些奇怪的行为。)
USE [YourDB]
GO
DBCC SHRINKFILE (N'YourDB_log' , 0, TRUNCATEONLY)
GO
和
USE [YourDB]
GO
DBCC SHRINKFILE (N'YourDB_log' , 0)
GO
(必要时可重复。)
ALTER DATABASE YourDB
SET MULTI_USER;
GO
进而把它备份。
编辑:好的,这不起作用。如果您有另一个 SQL 2005 服务器,您可能需要尝试将 mdf 复制到另一台服务器并使用
EXEC sp_attach_single_file_db @dbname='YourDb',
@physname=N'D:\Path\YourDb.mdf'
GO
如果可行,您可以在其他地方备份旧数据库文件,删除旧数据库,然后重新附加新数据库。放弃,放弃,放弃。(未提交的事务将丢失。)
答案3
上周刚遇到这个问题,我将其切换到简单模式,但它不允许我缩小数据库。我使用的解决方案是将备份转为简单模式,然后创建一个备份,理论上可以清除日志文件。在我的服务器上没有这样做,所以我继续从我刚刚创建的备份中恢复数据库,然后在检查完所有内容后删除原始文件。我的数据库文件大小现在从 200gb 变成了 25mb。然而,这样做的缺点是您会丢失所有时间点备份(这意味着您最早的备份现在是服务器上当前正在运行的备份)。这对我们来说不是问题,但对您来说可能是个问题。