我有一个数据库,其中包含350 MB数据文件(.mdf)和4.9 GB日志文件(.ldf)。恢复模型设置为FULL

当我尝试收缩日志文件时,它没有收缩。

我知道收缩数据库是不好的,应该这样做完成。但是我仍然在尝试收缩日志文件。现在使用的MB和日志空间为98.76%!全部都在使用中。

我尝试进行日志备份,然后缩小日志文件。缩小并没有减小大小。

我将恢复模型更改为SIMPLE,然后再次尝试缩小,但这也无济于事。 br />
DBCC SQLPerf(logspace) 


,发现现在没有打开的事务。我该如何解决?

#1 楼

这是我自己的问题的答案。

运行以下查询以获取有关日志文件重用等待的信息:

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = 'DBName'


我得到了以下输出:

 log_reuse_wait_desc
-------------------
REPLICATION 
 


数据库中还有一些与复制相关的对象,即使在删除复制后也是如此。

要从数据库中删除复制,可以使用sp_removedbreplication。但这对我们不起作用,因为当时复制处于不活动状态,并且实际上复制早已被删除。

解决方案是使用SQL的import选项将数据库内容导入到另一个数据库中。服务器。

评论


我遇到了同样的问题,并使用它来查看数据库中是否存在活动事务。 log_reuse_wait_desc提供了ACTIVE_TRANSACTION。交易一旦完成,收缩就可以了。

–squillman
17年6月1日14:52

#2 楼

收缩日志的步骤将是

通过SSMS或T-SQL备份事务日志,然后对SSMS执行收缩

命令,如果您正确的话单击数据库名称

BACKUP LOG <Databasename> TO DISK N'<path\database_log.ldf';
GO

DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS


您可能不得不多次执行此操作

如果有事务或作业阻止了该操作,请使用活动监视器可以识别进程并将其终止,或者使用SQL Agent作业活动监视器来结束作业。

源:http://support.microsoft.com/kb/907511

评论


但是我遇到的问题不同。请在下面查看我的答案

– Navaneet
13年4月30日在14:33

很高兴听到您知道,感谢您的更新!

–Cougar9000
13年4月30日在14:51

错误的语法-缺少等号:BACKUP LOG <数据库名称> TO DISK = N'<路径\ database_log.ldf';

–反向工程师
19年4月17日在9:06



#3 楼

阅读如何缩小SQL Server日志以获取解释,说明日志的循环性质如何防止截断后的缩小。您可能会将最后一个LSN点记录到位于LDF尾部的VLF中。从直觉上来说,您必须通过生成日志写入来推进日志,以使其缩小。

#4 楼

您需要先创建备份,具体取决于为数据库设置的备份模型,然后才能收缩数据库。

您可以尝试运行以下命令:

或者您可以从SSMS进行操作并使用可用的图形工具(有关详细信息,请参见此处:http://msdn.microsoft.com/zh-cn/library/ms187510.aspx)

一旦备份了数据库,就可以对其进行压缩。但是,收缩数据库不是一个好主意,因为索引碎片过多会占用,并且搜索数据会变慢。

希望这会有所帮助。

评论


我知道如何进行备份和截断日志并减少日志文件的大小。但是对于这个数据库我有问题。我只是从sys.databases中查询选择log_reuse_wait_desc,其中name ='dbname',发现复制引起了问题。但是我没有在上面设置复制。那么如何从此数据库中删除复制,如日志重用wait_desc所示?

– Navaneet
2013年4月30日12:44



您正在使用哪个SQL Server版本?

–托尼·科斯特拉克(Toni Kostelac)
13年4月30日在12:58

复制可能设置为作业,因此打开SQL Server代理文件夹,然后展开作业文件夹,检查是否设置了复制作业,如果这样,请通过右键单击并选择“停止作业”将其关闭

–托尼·科斯特拉克(Toni Kostelac)
13年4月30日在13:01



如果您使用的是SQL Server 2005及更高版本,则sp_removedbreplication'DB_NAME'将删除复制。对于sql server 2000 ..请参阅blogs.msdn.com/b/repltalk/archive/2010/11/17/…

–金沙(Kin Shah)
13年4月30日在13:14

但是我遇到的问题是不同的。请参阅我的答案

– Navaneet
2013年4月30日14:34在

#5 楼

我发现我必须对数据库和事务日志都执行2或3个备份,以使事务日志实际减小大小。我有一个使用完全恢复模型创建的数据库。每天晚上,它都会执行数据库和事务日志的备份,但是不可避免地,事务日志似乎会在2-3周内持续增长。当剩余磁盘空间达到1GB时,我将看到事务日志约为30GB。我遵循了Microsoft建议的步骤,并且在备份数据库和事务日志的第4或第5次迭代之后,事务日志最终将释放其额外的空间并缩小。然后,我返回并删除已创建的多个备份。

评论


我认为您做错了。如果正确备份了日志,则未使用的日志应被截断。我的问题中给出的命令可以帮助您解决问题。

– Navaneet
2014年1月7日下午6:40

#6 楼

对于阻止收缩日志文件的复制,我的解决方法是:


将DB Recovery Model设置为Simple

使DB脱机
创建备份日志文件(以防万一)
删除日志文件
使数据库联机

对我而言,它可以正常工作。进入数据库后,将自动创建日志,日志大小为512kb,而不是70GB。但这只是一种解决方法。根本问题没有解决。就我而言,我们正在使用复制。

评论


这是一个糟糕的建议,永远不要删除您的事务日志,诸如此类的各种问题都可能来自此。

–汤姆五世
15年8月31日在8:53