直接使用DBCC SHRINKFILE,BACKUP LOG WITH NO_LOG 和 WITH TRUNCATE_ONLY 选项已废止

本文介绍在 SQL Server 2008 中如何进行日志备份及使用简单恢复模式来收缩数据库日志文件。由于 TRUNCATE_ONLY 选项已被废弃,文章提供了详细的步骤说明如何通过改变恢复模式来实现日志文件的截断和收缩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意  
BACKUP LOG WITH NO_LOG 和 WITH TRUNCATE_ONLY 选项已废止。使用完整恢复模式或大容量日志恢复模式时,如果必须删除数据库中的日志备份链,请切换至简单恢复模式。有关详细信息,请参阅有关从完整恢复模式或大容量日志恢复模式切换的注意事项。
 

有关常规日志截断的详细信息,请参阅事务日志截断。

http://msdn.microsoft.com/zh-cn/library/ms186865.aspx 
 
liyihongcug
 
SQL SERVER 2008 中 BACKUP LOG WITH TRUNCATE_ONLY 已不再被支持,要收缩数据库日志,首先需要通过将数据库恢复模式设置为 SIMPLE 来截断该文件。

语句如下:

USE DATABASENAME; GO

-- Truncate the log by changing the database recovery model to SIMPLE.

ALTER DATABASE DATABASENAME SET RECOVERY SIMPLE;

GO

-- Shrink the trun cated log file to 1 MB.

DBCC SHRINKFILE (DATABASENAME_Log, 1); GO

-- Reset the database recovery model.

ALTER DATABASE DATABASENAME SET RECOVERY FULL; GO

也可以通过图形界面来完成。

通过先备份日志,然后再收缩日志文件,如下: back database mydb to disk='mydb_bak'; dbcc shinkfile(mydb_log,10);--收缩至10m

<think>好的,我现在需要帮助用户解决SQL Server事务日志已满的问题,特别是由log_backup引起的。首先,我得回忆一下用户提供的引用内容,看看有什么相关的解决方案。 根据引用[1],数据库完全备份不会截断事务日志,只有日志备份才能实现这一点。如果没做日志备份,日志文件会一直增长,空间无法重用。所以用户的问题可能是因为没有定期进行日志备份,导致日志文件满了。 用户提到的错误9002,引用[3]也提到了这个错误,并指出事务日志已满的原因是LOG_BACKUP。这说明当前的事务日志备份没有及时进行,导致日志空间无法释放。 接下来,解决方案的第一步应该是立即备份事务日志,如引用[4]建议的,使用BACKUP LOG命令。这会触发日志截断,释放空间。然后可能需要调整日志文件的大小,或者收缩日志文件,但收缩前必须先备份日志,否则无法释放空间。 另外,引用[5]提到了使用DBCC SHRINKFILE来收缩日志文件,但需要注意在备份日志之后操作,否则可能无法有效收缩。同时,需要检查日志文件是否设置合理的大小自动增长选项,避免频繁自动增长影响性能。 还要考虑是否有可用性组的问题,如引用[2]提到的AVAILABILITY_REPLICA,如果主副本的事务日志没有被次要副本强化,可能导致日志无法截断。需要检查可用性组的状态,确保副本之间的同步正常,这可能也是日志增长的原因之一。 用户可能需要设置定期的日志备份计划,避免再次出现这种情况。同时,监控日志文件的大小增长情况,合理配置自动增长参数,比如按百分比增长而不是固定大小,防止日志突然填满磁盘空间。 总结处理步骤应该是:立即备份日志,收缩日志文件,检查并调整日志文件大小自动增长设置,检查可用性组状态,设置定期日志备份任务。这样分步骤处理,确保每一步都正确执行,避免遗漏关键操作。</think>### SQL Server事务日志已满(LOG_BACKUP)解决方案 #### 问题分析 当出现"事务日志已满 due to 'LOG_BACKUP'"错误(错误9002)时,表明事务日志文件空间已耗尽且未及时进行日志备份。根据引用[1][3],事务日志截断必须通过日志备份实现,否则日志文件会持续增长[^1][^3]。 #### 分步解决方案 1. **立即执行事务日志备份** 执行以下命令释放日志空间: ```sql BACKUP LOG [数据库名] TO DISK = N'路径\日志备份文件名.trn' ``` 这是最关键的一步,通过日志备份触发日志截断机制[^4]。 2. **收缩日志文件(可选)** 备份后若需回收物理空间: ```sql USE [数据库名] DBCC SHRINKFILE(N'日志逻辑文件名', 目标大小_MB) ``` 使用`DBCC SHRINKFILE`前必须完成日志备份[^5]。 3. **检查日志文件配置** ```sql SELECT name, size/128.0 [当前大小_MB], growth [增长量], is_percent_growth [百分比增长] FROM sys.database_files WHERE type_desc = 'LOG' ``` 建议配置: - 初始大小预留足够空间 - 增长方式选择百分比(如10%) - 设置最大文件大小限制 4. **设置定期日志备份计划** - 简单恢复模式:自动截断日志 - 完整/大容量恢复模式:需定期执行日志备份 ```sql -- 创建维护计划或使用SQL Agent配置定期备份 ``` 5. **检查可用性组状态(如有)** 若数据库属于可用性组,检查主副本与次要副本同步状态。引用[2]指出当主副本日志未在次要副本强化时,可能阻止日志截断[^2]。 #### 预防措施 - 监控日志空间使用率: ```sql SELECT name, (size*8.0/1024) [总大小_MB], (FILEPROPERTY(name, 'SpaceUsed')*8.0/1024) [已用_MB] FROM sys.database_files WHERE type_desc = 'LOG' ``` - 配置自动警报(当日志使用率>70%触发通知) - 对于高频事务系统,缩短日志备份间隔
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值