Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 数据库';测试';由于';日志备份&x27;。C驱动器的可用空间问题_Sql Server - Fatal编程技术网

Sql server 数据库';测试';由于';日志备份&x27;。C驱动器的可用空间问题

Sql server 数据库';测试';由于';日志备份&x27;。C驱动器的可用空间问题,sql-server,Sql Server,我正在使用MSSQL存储数据。当我试图删除表中的数据时,它显示了一个错误 由于“日志备份”,数据库“测试”的事务日志已满 另外,我已经检查了C驱动器的大小,现在几乎满了,在执行此删除操作之前,可用空间是10GB 当我搜索错误时,我发现备份事务日志可以解决问题。我做了同样的操作,但C驱动器仍然是满的 如何解决此问题?检查数据库恢复模型。它可能被设置为满。你可以试着换成简单的 USE [master]; GO -- 1) Compacts all the databases in database

我正在使用MSSQL存储数据。当我试图删除表中的数据时,它显示了一个错误

由于“日志备份”,数据库“测试”的事务日志已满

另外,我已经检查了C驱动器的大小,现在几乎满了,在执行此删除操作之前,可用空间是10GB

当我搜索错误时,我发现备份事务日志可以解决问题。我做了同样的操作,但C驱动器仍然是满的


如何解决此问题?

检查数据库恢复模型。它可能被设置为满。你可以试着换成简单的

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。这是我的错误,我认为收缩不仅意味着日志文件,还意味着数据文件…这将非常有用。谢谢:)这是我在过去一个小时里找到的第一个有效答案!