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的日志文件问题的主要内容,如果未能解决你的问题,请参考以下文章
sqlserver 2005中文版如何清除.LDF的日志文件