Sql server 数据库';测试';由于';日志备份&x27;。C驱动器的可用空间问题
我正在使用MSSQL存储数据。当我试图删除表中的数据时,它显示了一个错误 由于“日志备份”,数据库“测试”的事务日志已满 另外,我已经检查了C驱动器的大小,现在几乎满了,在执行此删除操作之前,可用空间是10GB 当我搜索错误时,我发现备份事务日志可以解决问题。我做了同样的操作,但C驱动器仍然是满的Sql server 数据库';测试';由于';日志备份&x27;。C驱动器的可用空间问题,sql-server,Sql Server,我正在使用MSSQL存储数据。当我试图删除表中的数据时,它显示了一个错误 由于“日志备份”,数据库“测试”的事务日志已满 另外,我已经检查了C驱动器的大小,现在几乎满了,在执行此删除操作之前,可用空间是10GB 当我搜索错误时,我发现备份事务日志可以解决问题。我做了同样的操作,但C驱动器仍然是满的 如何解决此问题?检查数据库恢复模型。它可能被设置为满。你可以试着换成简单的 USE [master]; GO -- 1) Compacts all the databases in database
如何解决此问题?检查数据库恢复模型。它可能被设置为满。你可以试着换成简单的
USE [master];
GO
-- 1) Compacts all the databases in database server instance
EXEC sp_MSforeachdb 'DBCC SHRINKDATABASE (''?'' , 0, TRUNCATEONLY);DBCC SHRINKDATABASE (''?'' , 0);'
GO
-- 2) Compacts all the databases in database server instance that matches certain database name
DECLARE @SQL NVARCHAR(MAX) = '';
SELECT @SQL = @SQL + 'DBCC SHRINKDATABASE ('+ name +', 0, TRUNCATEONLY);DBCC SHRINKDATABASE ('+ name +', 0);'
FROM sys.databases
WHERE name LIKE '%database_name%'
ORDER BY name ASC;
EXEC (@SQL);
GO
更多信息:
DELETE TOP (1000) FROM table WHERE condition;
GO
编辑:
要立即压缩数据库,您可以刷新日志。如果将数据库恢复模型更改为SIMPLE,将获得最佳结果
USE [master];
GO
-- 1) Compacts all the databases in database server instance
EXEC sp_MSforeachdb 'DBCC SHRINKDATABASE (''?'' , 0, TRUNCATEONLY);DBCC SHRINKDATABASE (''?'' , 0);'
GO
-- 2) Compacts all the databases in database server instance that matches certain database name
DECLARE @SQL NVARCHAR(MAX) = '';
SELECT @SQL = @SQL + 'DBCC SHRINKDATABASE ('+ name +', 0, TRUNCATEONLY);DBCC SHRINKDATABASE ('+ name +', 0);'
FROM sys.databases
WHERE name LIKE '%database_name%'
ORDER BY name ASC;
EXEC (@SQL);
GO
您的数据库处于
FULL
恢复模式。您的log
已满,因为您没有进行定期日志备份,这是在full
恢复模式中清除日志的唯一方法。因此,您现在需要的是日志备份
。
这将截断您的日志。日志截断不会更改日志大小,但允许重用日志
当我搜索错误时,我发现备份事务
日志将解决问题。我做了相同的操作,但C驱动器仍然存在
满满的
正如我所说,日志截断只允许覆盖日志,它不会改变日志的大小
您的实际ldf
和mdf
文件大小是多少?如果您的日志比数据文件大,则意味着您的备份策略错误,您需要将日志文件缩小到适当的大小
您还需要计划定期日志备份
,或者评估简单恢复模式是否更适合您。根据评论,我已经缩小了事务日志文件,它释放了大约13GB的空间。由于我的数据库的恢复模型已满,首先我备份了事务日志,然后将数据库的恢复模型更改为Simple。在此之后,我缩小了日志文件,并再次将其设置为“完整”
ALTER DATABASE AdventureWorks2012
SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE (AdventureWorks2012_log, 1)
GO
ALTER DATABASE AdventureWorks2012
SET RECOVERY FULL
谢谢@sepupic,感谢你在帖子中提到的非常准确的方法。清理完空间后,我根据@Pedro Martins的评论将记录小批量删除。请看这里:或这里:转到C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL\Log
并删除较大的.LDF文件。这些是日志文件,可以在不损害系统的情况下删除。事务日志是SQL Server的关键部分。不要试图删除它们。是否有任何问题,如果我收缩而不是按照sepupic Comments删除它们来删除数据,我可以使用此信息。我的问题是C驱动器现在已满。我想这是在我试图同时删除整个数据时发生的,它生成了一个大的事务日志。那么我如何删除此事务日志尝试以下操作:使用[master];GO--1)压缩数据库服务器实例EXEC sp_MSforeachdb'DBCC SHRINKDATABASE(“”?“”,0,TRUNCATEONLY)中的所有数据库;DBCC收缩数据库('',0);'GOThanks Pedro..将尝试这一次,我阅读了Valerica在上述评论中提到的帖子。这就像执行Shrink命令时Shrink操作对SQL Server性能的影响一样。它还会导致索引碎片,并会降低搜索一系列索引的查询的性能。这是真的吗?收缩是清理空间的推荐方法吗?@Kesiya Abraham>>>它还会导致索引碎片@Kesiya Abraham您描述的是数据文件收缩,当数据从文件末尾移动到文件开头时。我所描述的是日志收缩,日志文件中没有数据移动,这是不可能的。谢谢sepupic。这是我的错误,我认为收缩不仅意味着日志文件,还意味着数据文件…这将非常有用。谢谢:)这是我在过去一个小时里找到的第一个有效答案!