欢迎您来到 数字平台。 您尚未登录。[登录] [注册新用户]
当前位置: 论坛首页 / 栏目 产品与服务 / 文章 737

点击:25892[回复顶层] [树状] [详细]
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 1 楼
文章id: 736
升级为2012.5.3版本后sql数据库日志扩大迅速的问题

作者: pengxiang


2012年5月10日将dp2 V2升级为2012.5.3版本(安装目录dll文件日期),在重建检索点过程中sql库对应的日志文件增长迅速,以我馆的情况中文图书库数据库文件3.2G,日志文件达到9.1G,编目库库文件2.2G,日志文件达9.1G,两个库的日志文件大小完全一致(不知是偶然还是有什么内在原因)。

如此庞大的文件给数据的备份带来的一定的难度,通过SQL Server Management Studio工具直接收缩数据库与收缩文件两种方式并没有成功达到清理日志文件的目的,文件大小基本没有变化,目前我的方法是1、选中要清除日志的数据库——右键——属性。   2、在选项页选中“选项”,恢复模式选择“简单”,点击最下边确定按钮。   3、再选中数据库右键——任务——收缩——数据库。   4、点击“确定”按钮。   搞定,日志文件已变小。 5、最后一件事就是把恢复模式再改成原来设置即可。

但是不知道此方法是否存在风险,供大家参考交流。

另外通过修改sql配置,让sql自动清理日志,目前还在测试中,不知效果如何。方法:选择要设置的数据库右键--属性--选项--自动收缩设置为True.



发表时间: 2012-05-15 09:40:55
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 2 楼
文章id: 737
关于MS SQL Server数据库日志文件尺寸过大的问题



什么是MS SQL Server数据库的日志文件?

简而言之,日志文件通过一个简化的格式记录了所有对数据库的修改操作,包括Insert, Update和Delete等能够帮助你重现对数据库内容修改的操作。日志文件的后缀名为*.LDF。

日志文件存储了所有的数据修改,所以在某些条件下,可以根据日志文件将数据库恢复到某个特定时间点的状态。

也就是说,日志文件是数据库为了增强数据安全或数据变动追溯的一个机制。

我曾遇到一客户实例:其数据库服务器因RAID磁盘出现坏道,导致存取异常,重启服务器后,数据库为Suspect状态而无法正常使用,最终得靠日志文件才复原了数据库——所以日志文件有其重要性。

所以,当我们系统重建检索点时,因为涉及到对大量已有的数据库纪录(包括目录、检索点等记录)进行删除和新增等操作,所以数据库在日志文件中记录的内容就多,就可能导致日志文件尺寸过大。

一般来说,把数据库底层的事交给数据库自己处理,我们的系统无须过多干预它。所以,原则上,日志文件庞大了,除了浪费硬盘空间外,它基本无害。

并且,日志文件也并非是无限增长的,因为SQL Server会按照一定的规则对它进行干预。

当然,如果你做了数据库备份,无须担心库受损后的恢复,那么,采用多种数据库认可的方式来减小日志文件尺寸以腾出硬盘空间,包括你所执行的收缩操作,都是允许的、无害的。



发表时间: 2012-05-16 13:57:26
最后修改时间: 2012-05-16 14:15:39
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 3 楼
文章id: 738
回复: 升级为2012.5.3版本后sql数据库日志扩大迅速的问题

作者: xietao


以下是引用 pengxiang 于 2012-5-15 9:40:55 发表的文字:

2012年5月10日将dp2 V2升级为2012.5.3版本(安装目录dll文件日期),在重建检索点过程中sql库对应的日志文件增长迅速,以我馆的情况中文图书库数据库文件3.2G,日志文件达到9.1G,编目库库文件2.2G,日志文件达9.1G,两个库的日志文件大小完全一致(不知是偶然还是有什么内在原因)。

如此庞大的文件给数据的备份带来的一定的难度,通过SQL Server Management Studio工具直接收缩数据库与收缩文件两种方式并没有成功达到清理日志文件的目的,文件大小基本没有变化,目前我的方法是1、选中要清除日志的数据库——右键——属性。   2、在选项页选中“选项”,恢复模式选择“简单”,点击最下边确定按钮。   3、再选中数据库右键——任务——收缩——数据库。   4、点击“确定”按钮。   搞定,日志文件已变小。 5、最后一件事就是把恢复模式再改成原来设置即可。

但是不知道此方法是否存在风险,供大家参考交流。

另外通过修改sql配置,让sql自动清理日志,目前还在测试中,不知效果如何。方法:选择要设置的数据库右键--属性--选项--自动收缩设置为True.

 
“如此庞大的文件给数据的备份带来的一定的难度”,不知你说的“备份”具体是个什么操作。
 
一般来说,备份SQL数据库有两种方法:
1) 将SQL Server彻底停掉,然后拷贝相关数据库文件;
2) 利用SQL Server的管理工具进行备份。
 
第一种方式的缺点是明显的,就是必须要停止所有业务,如果要在服务器运行的情况下进行备份,那就不能使用这种方法。
 
第二种方式是推荐的方式,不但可以在系统运行的情况下进行备份,而且备份操作本身会在数据库的日志系统中形成checkpoint,系统知道已经进行了这次备份,所以就允许在备份完成后,将checkpoint以前的全部日志空间释放,虽然不一定可以表面上缩小日志文件的大小,但是可以让这部分空间被后来使用,日志文件尺寸不会继续扩大。
 
你所说的“通过SQL Server Management Studio工具直接收缩数据库与收缩文件两种方式并没有成功达到清理日志文件的目的”,估计是你没有用SQL Server的备份工具来备份,所以当然无法收缩文件了,如果此时能收缩文件,数据库的安全性就受到了损害 --- 因为日志被清除了,将来利用日志恢复的机会的丢失了。我日前曾经托江经理转告与你,说full模式下必须要用SQL Server的备份工具进行了备份后,才能具备把checkpoint前面时间的日志清除的条件。
 
你说通过修改recover模式来达到压缩文件的目的,这个动作本身无害,如果你用某种方式进行过大备份的前提下。SQL Server的规则是,simple模式可以自动重复使用日志文件空间,意思也就是根本不记载历史日志。而full模式要记载历史日志,所以日志文件才会越来越大。
 
从安全性的角度,full recover模式提供了额外的安全性,所以将数据库创建为或者修改为simple模式是不可取的。日志文件变大的问题,只需要定期进行备份就可以了。SQL Server的规则很严,哪怕是你刚备份完就把备份文件删除,也要有这个动作,我刚才说了,这个动作是给SQL Server一个明确的checkpoint信号,这是步骤必须的。我也还没有来得及看SQL Server命令手册,是否也有一种可能性,用backup命令的某个选项,可以做到产生checkpoint但是不创建备份文件 --- 这也是“备份”动作呀!
 
~~~
 
“另外通过修改sql配置,让sql自动清理日志,目前还在测试中,不知效果如何。方法:选择要设置的数据库右键--属性--选项--自动收缩设置为True.” ,我是这么看的,在full recover模式下,如果不对数据库进行备份,那么没有checkpoint,自动收缩的条件达不到。估计这个自动收缩的属性是在具备一定条件下才能起作用的。还是一句话:备份操作不能免除。
 
我觉得SQL Server这样设计非常好。系统管理员不去备份数据库,数据库的日志文件就会越来越大,直到把空间撑满报错。系统管理员只好去做备份。被强迫做备份 --- 这难道不好么?否则,难道没有备份,数据库被意外损坏了才好?
 
至于备份出来的备份文件占据空间的问题,据我所知SQL Server的备份工具提供了增量备份的可能,也就是说从某个时间点到另外一个时间点的修改部分的部分,我们知道,每一天对数据库的修改量毕竟是有限的。升级以后做的大面积重建检索点的操作导致日志文件迅速扩大,这是偶然情况。
 
增量备份也显然得益于full模式下的历史日志机制。增量备份说白了备份的就是日志文件中增加的部分。
 
当然,每当彻底大备份一次后,前面的增量备份文件就可以删除了。所以空间也是可以控制的。另外需要强调的是,每一次最好把备份文件另外保存到可靠介质上例如刻录到光盘上。这样硬盘空间就不会无休止占有。那种放在硬盘上的所谓“备份文件”是很危险的,一旦硬盘损坏,后果不堪设想,以前我们是看到过这样的活生生的案例的。
 
 
~~~
 
dp2kernel和dp2library包揽了大部分关于SQL Server底层的管理性操作,所以我们系统的用户有个特点,就是对于SQL Server本身并不精通,这在免维护的角度来说是个优点,但是缺点就是用户对SQL Server缺乏基本的动力去学习一些管理操作。公司技术人员和开发人员也无形中有类似倾向。
 
现在面临的这个SQL Server固有的备份问题,我建议还是从书店买两本正规的出版物看看,或者研究一下SQL Server的官方文档,最低限度,要学会如何进行日常的备份操作。注意,我说的是利用SQL Server自带的备份工具进行的标准操作。
 
如果可能,将来dp2kernel也可以提供备份的功能界面,调用SQL Server的相关功能帮助用户进行备份。
 
我后面会给出一些我查阅的文档,给大家提供参考。
 
 


发表时间: 2012-05-17 18:24:38
最后修改时间: 2012-05-17 19:08:33



[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 4 楼
文章id: 739
创建完整数据库备份 (SQL Server)

作者: xietao


这是Microsoft的官方文档:

http://msdn.microsoft.com/zh-cn/library/ms187510.aspx

创建完整数据库备份 (SQL Server)

http://msdn.microsoft.com/zh-cn/library/ms175477

备份概述 (SQL Server)



发表时间: 2012-05-17 19:14:50
最后修改时间: 2012-05-17 19:17:32



[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 5 楼
文章id: 743
回复: 升级为2012.5.3版本后sql数据库日志扩大迅速的问题

作者: xiaohuo


以下是引用 pengxiang 于 2012-5-15 9:40:55 发表的文字:


2012年5月10日将dp2 V2升级为2012.5.3版本(安装目录dll文件日期),在重建检索点过程中sql库对应的日志文件增长迅速,以我馆的情况中文图书库数据库文件3.2G,日志文件达到9.1G,编目库库文件2.2G,日志文件达9.1G,两个库的日志文件大小完全一致(不知是偶然还是有什么内在原因)。
如此庞大的文件给数据的备份带来的一定的难度,通过SQL Server Management Studio工具直接收缩数据库与收缩文件两种方式并没有成功达到清理日志文件的目的,文件大小基本没有变化,目前我的方法是1、选中要清除日志的数据库——右键——属性。 2、在选项页选中“选项”,恢复模式选择“简单”,点击最下边确定按钮。 3、再选中数据库右键——任务——收缩——数据库。 4、点击“确定”按钮。 搞定,日志文件已变小。 5、最后一件事就是把恢复模式再改成原来设置即可。
但是不知道此方法是否存在风险,供大家参考交流。
另外通过修改sql配置,让sql自动清理日志,目前还在测试中,不知效果如何。方法:选择要设置的数据库右键--属性--选项--自动收缩设置为True.

 

经过几天的学习和测试,在收缩事务日志前必须进行事务日志截断,而触发日志截断的操作有:
1)在完整或大容量日志恢复模式下,进行数据库和日志文件的备份时会日志会自动截断;
2)在查询编辑器中用backup log dbname with no_log命令进行手工截断日志;
3)在数据库--属性--选项中将恢复模式切换到简单模式;

可以看出彭老师的方法也是一种较为简单的方法,下面我将提出另外的两种方法以供参考:

1)在完整或大容量日志恢复模式下备份数据库和日志后,再进行收缩事务日志;

选中要收缩事务日志的数据库,右击上下文菜单任务--备份,进入到备份数据库的窗口,观察该窗口发现,恢复模式为"FULL",备份类型为完整,设置好备份集过期时间和要存放备份文件的物理位置后,点击确定按钮,进行备份数据库操作。

数据库备份完成后,继续选中该数据库,右击上下文菜单任务--备份,进入到备份数据库的窗口,恢复模式仍为"FULL",备份类型为事务日志,设置好备份急过期时间和要存放备份的日志文件的物理位置后,点击确定按钮,进行备份事务日志操作。

事务日志备份完成后,继续选中该数据库,右击上下文菜单的收缩--日志,进入到收缩文件窗口,在该窗口中将文件类型修改为日志,并且在这个窗口中可以看出分配的空间和可用的空间。点击确定按钮,进行收缩事务日志。收缩完成后观察该数据库事务日志文件的物理空间已经被扩大。

2)在查询编辑器中用命令来收缩事务日志

选中要收缩事务日志的数据库,右击上下文菜单的新建查询,进入到查询编辑器,例如:

在第一行中输入:

backup log dp2kernel_dprms_14_db with no_log  //手动截断日志

第二行输入:

dbcc shrinkfile('dp2kernel_dprms_14_db_log') //收缩事务日志
然后执行就可以了。

总结之后,可以看出共有三种方法可以进行收缩事务日志,第一种是在完整或大容量日志恢复模式下对数据库和日志进行备份后再收缩事务日志。第二种是在查询编辑器中用命令进行收缩事务日志,第三种是将数据库恢复模式切换到简单模式下,然后再通过收缩数据库来收缩日志文件。

相比而言,第一种方法是比较"正规"的操作方法,也是建议用户在日志物理空间比较大时所使用的收缩事务日志的方法,因为在收缩日志前对数据库进行了"Full"模式备份。第二种方法是用命令的方法进行收缩事务日志,首先通过backup log dp2kernel_dprms_14_db with no_log进行手工截断日志,然后在手缩日志文件,我们建议您不要使用no_log手动截断事务日志因为这会破坏日志链直到下一次的备份或差异数据库备份数据库不介质故障手动截断日志只在非常特殊的情况并立即创建数据备份。 第三种方法是一种比较简单的方法。



发表时间: 2012-05-21 17:39:34
最后修改时间: 2012-06-07 14:52:37
页 1 / 1
 

在线用户
(无) 
当前栏目在线用户数 0, 总在线用户数 0