sql server 2008数据库日志太大解决方法

来源:互联网 发布:淘宝短链接api 编辑:程序博客网 时间:2024/04/28 07:51


环境:

数据文件.mdf为22G,日志文件.ldf为33G,用常规方法清除日志文件时,报错:

USE [master]GOALTER DATABASE TestDB SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE TestDB SET RECOVERY SIMPLE --简单模式GOUSE CHIANG_SCM_DBGODBCC SHRINKFILE (N'Test_log' , 5, TRUNCATEONLY) USE [master]GOALTER DATABASE Test SET RECOVERY FULL WITH NO_WAITGOALTER DATABASE Test SET RECOVERY FULL --还原为完全模式GO


消息 5069,级别 16,状态 1,第 1 行
ALTER DATABASE 语句失败。
消息 9002,级别 17,状态 6,第 1 行
数据库 'TestDB' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。

因为数据文件和日志文件都很,不好移动,当时硬盘空间也不够大,于是只要删除掉日志文件。

这时一定要保持原库的.mdf 文件是完好。条件允许最好有多个备份。


请在SQL Server的查询分析器中按以下步骤执行

假设数据库名为: TestDB(如果您的数据库名不是TestDB,需要更改以下语句中相应的TestDB为您的数据库名称)

  1. 建立一个空库,数据库名与原名称一致。

  2. 停止控制台的服务MSSQLSERVER,将有数据的.mdf文件复制过来覆盖现有的空库的.mdf文件。

  3. 启动控制台的服务MSSQLSERVER,打开企业管理器,这时发一点击数据TestDB时,就报错。

  4. master数据库打开查询分析器,执行下面命令,注意要一条一条地执行。

--修改数据库为紧急模式

ALTERDATABASETestDBSETEMERGENCY

--使数据库变为单用户模式

ALTERDATABASETestDBSETSINGLE_USER

--修复数据库日志重新生成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误。当您指定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修复报告的错误。但是,这些修复可能会导致一些数据丢失。

DBCCCheckDB(TestDB,REPAIR_ALLOW_DATA_LOSS)  --执行到这条时就会发现报错,不理它,继续执行第四条

--使数据库变回为多用户模式

ALTERDATABASETestDBSETMULTI_USER

    5. 刷新数据TestDB,这时发数据库已经可以,各个节点的“+”号都可以展开,表也可以查询,也可以建表了,数据库可以用了。

    6.  数据库――右键――属性――文件,这时可以看到日志文件的路径在哪里,以后要定时观察。

 

防止数据库日志过大最好的办法是定时查看日志,清空日志。

同时做好数据库的备份工作。





0 0
原创粉丝点击