如果驱动器已满,如何缩小MS SQL Server中的数据库?

时间:2013-12-04 12:54:13

标签: sql-server

我遇到SQL Server问题我无法执行任何查询,因为托管数据库的硬盘已满。 我尝试使用MS SMS中的“Shrink”功能缩小数据库但由于磁盘空间已满而无法正常工作。

如何在不崩溃数据库的情况下截断日志,还缩小大小?

我也尝试过以下

USE myDatabaseName;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE myDatabaseName
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (myDatabaseName_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE myDatabaseName
SET RECOVERY FULL;
GO

但出现以下错误

Msg 3023, Level 16, State 3, Line 2
Backup and file manipulation operations (such as ALTER DATABASE ADD FILE) on a database must be serialized. Reissue the statement after the current backup or file manipulation operation is completed.
Msg 5069, Level 16, State 1, Line 2
ALTER DATABASE statement failed.

由于

2 个答案:

答案 0 :(得分:2)

SQL Server Pre 2012

BACKUP LOG LogName
  WITH TRUNCATE_ONLY;

SQL Server 2012及更高版本

WITH_TRUNCATEONLY已被删除,因此您应将恢复模式切换为简单并恢复为执行相同的操作。

ALTER DATABASE DatabaseName
  SET RECOVERY SIMPLE;

之后,请不要忘记重新启动原始恢复模式!

收缩日志

仅仅因为你截断了日志,这并不意味着磁盘上的文件大小已经改变了。

要减少日志的文件大小,您需要发出以下命令

DBCC SHRINKFILE (DatabaseLogLogicalName, 1);

答案 1 :(得分:1)

简短回答: 带有TRUNCATE_ONLY的备份日志

答案很长:备份你的数据库并先阅读:

Managing Transaction Logs