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

标签 sql-server

我在使用 SQL Server 时遇到问题,我无法执行任何查询,因为托管数据库的硬盘已满。
我尝试使用 MS SMS 中的“收缩”功能来收缩数据库,但由于磁盘空间已满,这不起作用。

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

我也尝试了以下

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.

谢谢

最佳答案

SQL Server 2012 之前

BACKUP LOG LogName
  WITH TRUNCATE_ONLY;

SQL Server 2012 及更高版本
WITH_TRUNCATEONLY已被删除,因此您应该将恢复模式切换为简单并恢复以执行相同的操作。
ALTER DATABASE DatabaseName
  SET RECOVERY SIMPLE;

之后,不要忘记重新设置您原来的恢复模式!

缩小日志

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

要减少日志的文件大小,您需要发出以下命令
DBCC SHRINKFILE (DatabaseLogLogicalName, 1);

关于sql-server - 如果驱动器已满,如何缩小 MS SQL Server 中的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20375975/

相关文章:

mysql - 将多个 MySQL 查询连接在一起

sql-server - 使用 T-SQL 将 OHLC 股票市场数据分组为多个时间范围

sql - 如何将数据库架构更改为 dbo

sql-server - 如何同时更新和同步数据库表?

sql - 在 Postgres 和 SQL Server 中为日期添加一天

c# - 如何告诉 Entity Framework Function Import 存储过程返回的列不可为空?

sql - 登录本地 SQL Server 失败

mysql - 如何从两个表中获取未映射的行

sql - 如果列已经按顺序排列,是否需要在列中添加索引?

sql-server - 将函数应用于列中的一行