SQLserver的日志文件问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLserver的日志文件问题相关的知识,希望对你有一定的参考价值。

备份数据库时发现一个表的库文件只有1.4G,但日志有6.5G…备份工作进行因此进行得很痛苦。
物理备份(直接拷数据和日志文件备份)的方式,是否可以不带日志只备份数据文件本身??请高手指教!谢谢
环境:sqlserver 2000 @ win2k server

处理方法

/*--特别注意

请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.

一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--*/

--下面的所有库名都指你要处理的数据库的库名

1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG

3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(库名)

--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1)

4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库

b.在我的电脑中删除LOG文件

c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库

此法将生成新的LOG,大小只有500多K

或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

a.分离
EXEC sp_detach_db @dbname = \'库名\'

b.删除日志文件

c.再附加
EXEC sp_attach_single_file_db @dbname = \'库名\',
@physname = \'c:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\库名.mdf\'

5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

--SQL语句设置方式:
EXEC sp_dboption \'库名\', \'autoshrink\', \'TRUE\'

6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小)

--SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
参考技术A 可以的,没问题.只要你保证备份是一个可以接受的状态就可以,而不用考虑备份以后的更新 参考技术B 删除日志记录,压缩数据库,就可以减少.

SQL Server 日志文件混淆

【中文标题】SQL Server 日志文件混淆【英文标题】:SQL Server Log File Confusion 【发布时间】:2009-01-17 19:22:47 【问题描述】:

我正在寻找有关 SQL Server 日志文件的清晰信息。我有一个较大的数据库(2GB),最近由于某种原因没有备份。数据库的日志文件增长到 11GB 左右,据我了解,这是数据库中发生的所有事务和语句。

我的问题:

是什么导致数据库日志文件被刷新? “冲洗”实际上是什么意思? 对大型日志文件执行文件收缩或数据库收缩会有什么后果?

【问题讨论】:

【参考方案1】:

备份事务日志后,这些事务会从日志中截断,但操作使用的空间不会自动恢复。如果您正在执行定期事务日志备份,这可能是一件好事。假设该空间用于交易并且将来会再次被需要。不断缩小事务日志可能不利于性能,因为当再次需要时,数据库将需要扩展日志。

因此,要解决您的问题,请先进行完整备份和事务日志备份。您无需进入简单模式或单用户模式。然后收缩数据库并每隔几个小时设置一次事务日志备份。在我的服务器上,我每 10 分钟执行一次,但这完全取决于人们对其环境的需求频率。监控日志大小如何变化,确保留出足够的空间,使其不必定期扩展,再加上一些额外的乐趣。

当你收缩数据库时,使用DBCC SHRINKFILE 而不是DBCC SHRINKDATABASE,因为后者会收缩整个数据库,而不仅仅是日志文件。此外,您无法控制回收多少空间。

【讨论】:

【参考方案2】:

备份通常会清除事务日志。事务日志保留自上次备份以来的所有更改。根据您备份数据库的方式,您可能根本不需要保留完整的事务日志。如果您使用的是 MS SQL2000/MS SQL2005,将恢复模式设置为 Simple 会删除事务日志。

一旦您确定您拥有一个干净的数据库副本(没有丢失的风险),就可以安全地删除事务日志。有一些 SQL 命令可以执行此操作,但我通常将恢复模式更改为 Simple,然后缩小数据库,然后在必要时将恢复模式设置回 Full

如果您需要更多信息,请提供您正在使用的 SQL 版本以及如何执行备份,我会看看是否可以详细说明您的具体设置。

【讨论】:

【参考方案3】:

实际上,我不认为备份数据库会缩小日志,备份事务日志本身会缩小日志。 SQL Server 对两者进行了区分。

通常,我要么让所有数据库“简单”恢复,要么将备份事务日志作为我定期维护计划的一部分(通常每周一次)。

【讨论】:

以上是关于SQLserver的日志文件问题的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver2016还原加载日志文件

sqlserver 2005中文版如何清除.LDF的日志文件

sqlserver 收缩日志文件啥用

如何删除sqlserver数据库日志文件

sql server 2008 日志文件已经到了最大值,还会记录日志吗

怎样收缩SqlServer2005的日志文件