SQLServer 2005&08镜像导致日志文件LDF过大的问题解决
镜像是一个很好的灾难恢复手段,配置简单,切换快速。网上教如何配置的文章很多,这里介绍下如何处理LDF过大导致磁盘撑爆的情况。
首先要明确的是镜像不能清日志的, 镜像是的工作跟日志是有关联的。常用的.清空日志DUMP TRANSACTION 'db_name' WITH NO_LOG;和截断事务日志BACKUP LOG 'db_name'WITH NO_LOG;都是无效的。 1建立多个日志文件,以免单个日志文件撑爆
2根据日志的增长情况,经常备份日志 BACKUP LOG DB_Name to disk = 'X:\\DB_Name_Log.log' 3 收缩日志 DBCC SHRINKFILE (Log_Name),但是这个几乎没用。不过经过备份后,日志文件内部已经截断了,及时备份可以截断活动日志,让日志文件内标内记非活动的虚文件可重复使用. 查询日志的使用情况以及在被那些应用占用 dbcc sqlperf(logspace) go
Database
Name Log Size (MB) Log Space Used (%) Status
--------------------------------------------------------------------------------------------------------------
DB_Name 77404.91 9.809758 0
select name, recovery_model_desc, log_reuse_wait,log_reuse_wait_desc from sys.databases
name recovery_model_desc log_reuse_wait log_reuse_wait_desc
--------------------------------------------------------------------------------------------------------------
master SIMPLE 0 NOTHING
tempdb SIMPLE 1 CHECKPOINT
model FULL 0 NOTHING
msdb SIMPLE 1 CHECKPOINT
DB_Name FULL 5 DATABASE_MIRRORING
Backup FULL 4 ACTIVE_TRANSACTION
--EOF--
原文链接; http://hi.http://www.cmpx.com.cn//daitouliumang/item/9b978c30ebf4a7c0382ffacf sqlserver 2008 设置了镜像,但日志文件增长过快,磁盘空间很快就用完了,
如果要清空日志,必须把恢复模式改成简单,但设置了镜像就无法更改,只能是完整 所以要对日志文件进行备份,每15分钟或1个小时备份一次 然后再用下面语句清理日志,这里我只收缩到4G,
DECLARE @I INT SET @I=1 WHILE @I<3 BEGIN
BACKUP LOG 库名 TO DISK = N'F:\\X.bak'
DBCC SHRINKFILE('库名_Log', 4096) 收缩文件到4G
SET @I=@I+1 END 1、日志备份会清理日志中已经完成的部分,活动的以及还没有传递到镜像的日志将保留(没及时传送到镜像的就是活动的)
2、在镜像环境下每15分钟或1小时做一个日志备份,事务日志及时备份可以截断活动日志,让日志文件内标记非活动的虚文件可重复使用 3、镜像持续可用的话,多保留一次备份。
只会在主体数据库上产生备份文件。
直接在主库上上备日志,再收缩日志:dbcc shrinkfile(2,128)就可以了。 镜像文件会自动随主变动收缩掉。
微软从来都不建议使用自动收缩功能,这个在很多地方都有提到。
注释
DBCC SHRINKFILE 适用于当前数据库中的文件。将上下文切换到数据库,以发出引用该特定数据库中文件的 DBCC SHRINKFILE 语句。有关更改当前数据库的更多信息,请参见 USE。 所生成的数据库不能比 model 数据库更小。
使用 DBCC SHRINKFILE 以将文件减小到比其最初创建时更小。之后,文件的最小大小重置为新指定的大小。
若要删除在文件中可能出现的任何数据,请在执行ALTER DATABASE 之前执行 DBCC SHRINKFILE('file_name', EMPTYFILE)。
要收缩的数据库不必在单用户模式下;收缩文件时,同时其他用户可以在数据库中工作。不必在单用户模式下运行 SQL Server 以对系统数据库进行收缩。
SQLServer2008 截断数据库日志
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;