SQLServer 2005&08镜像导致日志文件LDF过大的问题解决 联系客服

发布时间 : 星期五 文章SQLServer 2005&08镜像导致日志文件LDF过大的问题解决更新完毕开始阅读da9cebb65727a5e9846a615f

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.china-audit.com//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;

GO

-- Shrink the truncated 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

每 个事务日志由多个虚拟日志文件组成(virtual log file).虚拟日志文件没有固定的大小,也没有固定的个数。在创建事务日志文件或者扩展事 务日志文件时,SQL SERVER便会自动创建合适大小的虚拟日志文件,DBA无法控制虚拟日志文件的大小和个数。在扩展日志文件后,虚拟文件的大小是 现有日志大小和新文件增量大小之和。因此,如果在创建数据库时,对数据库指定了比较小的初始大小,又指定了比较小的日志增长量,随着事务日志的自动扩展, 虚拟日志文件个数会越来越多,从而影响了数据库性能。因此,在创建数据库时,尽量指定比较合适的初始事务日志大小,同时指定合理的事务日志增长量,这点可 以参考数据文件的标准。如果大于10G或者更大的话,则指定固定的增长量,如果比较小,则指定按百分比的增长量来进行。