【sql】——日志表过大,整理日志表(事务日志已满 请参阅sys.databases中的log_reuse_wait_desc列)

本文介绍了解决在大量数据导入过程中遇到的数据库事务日志已满问题的方法,包括备份数据库、截断事务日志及收缩数据库等步骤。

把一个表大量数据insert   into   到另一个数据库的表时,提示
数据库   'webdisk '   的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅   sys.databases   中的   log_reuse_wait_ desc   列。  

 

————解决办法

--先备份数据库

--截断事务日志
backup   log   数据库名   with   no_log
go

--收缩数据库
dbcc   shrinkdatabase(数据库名)
go

 

 

——————结果

DbId   FileId      CurrentSize MinimumSize UsedPages   EstimatedPages
------ ----------- ----------- ----------- ----------- --------------
6      1           5960        384         5944        5944
6      2           128         128         128         128

(2 行受影响)

DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。

SQL Server 中,当数据库事务日志时,通常会影响数据库的正常操作。为了解决这个问题,可以通过查询系统视图 `sys.databases` 来查找事务日志无法重用的原因。`sys.databases` 提供了关于数据库状态和日志文件的重要信息,其中 `log_reuse_wait` 和 `log_reuse_wait_desc` 对于诊断事务日志空间无法释放的问题非常关键。 ### 查询事务日志无法重用的原因 可以通过以下 SQL 查询语句来获取数据库 `myerp800` 的日志重用等待原因: ```sql SELECT name AS database_name, log_reuse_wait, log_reuse_wait_desc AS log_reuse_wait_reason FROM sys.databases WHERE name = 'myerp800'; ``` 该查询将返回 `myerp800` 数据库的名称、日志重用等待代码(`log_reuse_wait`)以及对应的描述(`log_reuse_wait_desc`),帮助判断当前事务日志无法释放的原因。 ### 常见的 `log_reuse_wait_desc` 值及处理方法 1. **LOG_BACKUP** 事务日志的空间无法重用,因为尚未执行事务日志备份。 - **解决方法**:对数据库执行事务日志备份。 ```sql BACKUP LOG myerp800 TO DISK = 'C:\backup\myerp800_log.bak'; ``` 2. **ACTIVE_TRANSACTION** 示存在一个长时间运行的未提交事务,导致事务日志无法截断。 - **解决方法**:查找并终止长时间运行的事务。 ```sql DBCC OPENTRAN('myerp800'); ``` 该命令会显示数据库中最早的活动事务和未提交的分布式事务。根据输出信息,可以找到并终止相关的事务。 3. **REPLICATION** 数据库启用了事务复制,事务日志需要等待复制代理处理完事务后才能释放。 - **解决方法**:检查复制代理的状态,并确保复制正常运行。 4. **DATABASE_MIRRORING** 数据库正在使用镜像功能,事务日志需要等待镜像服务器确认接收日志记录后才能释放。 - **解决方法**:检查镜像服务器的状态和网络连接。 5. **AVAILABILITY_REPLICA** 数据库属于可用性组,事务日志需要等待次要副本确认接收日志记录后才能释放。 - **解决方法**:检查可用性组的状态和次要副本的同步情况。 6. **OLDEST_PAGE** 事务日志需要等待检查点刷新脏页到磁盘后才能释放。 - **解决方法**:确保检查点进程正常运行,或手动执行检查点。 ```sql CHECKPOINT; ``` ### 处理事务日志的其他方法 除了查询 `sys.databases` 视图外,还可以采取以下措施: - **增加事务日志文件的小**:如果事务日志文件的小不足,可以考虑增加日志文件的小或添加新的日志文件。 ```sql ALTER DATABASE myerp800 ADD LOG FILE (NAME = 'myerp800_log2', FILENAME = 'C:\data\myerp800_log2.ldf', SIZE = 512MB); ``` - **切换数据库恢复模式**:如果不需要事务日志备份,可以将数据库的恢复模式更改为 `SIMPLE`,以便自动截断事务日志。 ```sql ALTER DATABASE myerp800 SET RECOVERY SIMPLE; ``` ### 查询事务日志空间使用情况 可以通过以下查询检查事务日志的空间使用情况: ```sql DBCC SQLPERF(LOGSPACE); ``` 该命令将返回所有数据库事务日志使用情况,包括日志文件小、已使用空间百分比等信息。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值