sql 2000 事务日志的介绍及收缩
1、事务日志简介
作为大型的关系型数据库,最重要的事情之一就是数据库完整性,也就是说数据必须是正确的,不能因为一些不可知的突发事件(如突然掉电)损坏数据。为了避免这种情况,SQL数据库采用了两步写入磁盘的办法,第一步先写我做了什么,比如开了一个进货单,这一步完成后,再执行第二步,把这个进货单的内容写入数据库,这两步都成功了,才算完成,有一步有问题,这个单据都不会记到数据库中。这样,您的事务操作(对数据库的修改操作,查询不记事务)的每一步都要记录进日志文件,如果您不注意经常截断事务日志的话,随着时间的增长,事务日志会很快的增长,最后要比您的数据量大的多。可以经常看到,数据库文件只有几十兆,而日志文件却几千兆的情况。
2、截断事务日志
事务日志分成两部分,一部分是不活动的,也就是说这部分的操作都已经成功的写入数据库了,而另一部分是活动的,也就是说,这部分日志,只是确认执行了上述第一步,还没有确信已经写入数据库的部分。我们需要截断的就是不活动的部分。这部分可以如下方法截断:Backup Log ‘数据库名’with truncate_only
警告:在运行上述截断日志之后,强烈建议进行数据库完全备份。
3、缩小文件大小
使用上述第2步就把不活动的日志删除了,但是文件并没有变小,只是把原先旧日志占用的空间释放了,又可以向里面记入新的日志了。要想把物理文件也变小(比如已经几千兆了),请使用如下命令:DBCC Shrinkdatabase (数据库名)
运行上述命令后就可以把日志文件缩小了(一般都缩为1M左右)
4、把数据文件或日志文件的增长不受限制
如果您做不到经常维护数据库,不能经常的截断日志,日志文件就会逐渐变大,一旦大到您设置的大小限制,日志就再也不能写入了,您对数据库的所有改变操作也就无法进行了,这时候您就需要用上面的方法把日志文件截断。不过,您可以把文件的大小设置大一些或不受限制,请在企业管理器中设置数据库属性即可。也可以运行下述命令:alter database 数据库名modify file (name = 逻辑文件名,Maxsize =
Unlimited)
此处的逻辑文件名就是您在企业管理器中看到的文件名。
说明:
微软公司的SQL 2000有个小错误,有时候会报告逻辑文件名不存在的问题,这时候您就应该看看真正的逻辑文件名是什么,如果您的数据库是从一个备份文件中还原的,那么可以使用下面的命令看看逻辑文件名到底是什么,此处假设您已经把备份文件复制到C盘的根目录,备份文件名为Database.bak:
restore filelistonly from disk = ‘c:\Database.bak’
运行上述命令后,可以看出所有的逻辑文件名(LogicalName列的内容),取出这里的逻辑文件名,比如“真文件名”,运行如下命令alter database 数据库名modify file (name = 真文件名, Maxsize = Unlimited)
这个命令就会成功,再到企业管理器中去看,就发现文件大小已经无限制了。
5、数据库日常维护
为了让数据库更好的工作,不至于影响业务,日常需要对数据库进行维护,一般分为以下几个方面:
a. 日常的备份。建议每天进行备份,如果数据库太大,每天全库备份不现实,可以采用一周完全备份一次,每天差异备份一次或两次
b. 维护索引。索引能够大幅的提高查询性能,但是随着数据碎片的增加,性能会越来越差,所以要经常的维护索引,可以根据具体情况,每周或每月维护一次索引。
c. 截断日志。根据业务量的大小,可以不定期的截断日志。(方法参照下面)
方法一:
在SQL 2000中,每个数据库事实上存在两个物理文件,分别为.mdf和.ldf 的扩展名。前者是数据文件,后者就是保存事务日志的文件。事务日志是SQL 2000中用于记录数据库操作记录的功能,不过如果长时间不进行维护,这个文件就会越来越庞大,必须清除一下。上次我的服务器上一个网站,因为数据库比较庞大(2G多),加上长时间没有维护,导致后来事务日志文件达到数十GB,把保存数据库文件的分区都给撑爆了。当时我没有过清除事务日志的经验,上网了一些资料,很多都把这事说得很复杂,要在查询分析器里运行若干个命令什么的。其实后来我
到了一个最简单的方法,只要在查询分析器里运行一条命令,再在企业管理器里进行一点小操作就行了。步骤如下:
一、运行查询分析器,运行下面这条命令(把命令中的“数据库名”替换成要清除日志的数据库名称):
DUMP TRANSACTION 数据库名WITH NO_LOG
二、打开企业管理器,到这个数据库,右键点击,选择“所有任务”->“收缩数据库”:
如图:
三、在“收缩数据库”的对话框中,点击下面的“文件”按钮:
三、在接下来的对话框中,在顶部的“数据库文件”后面选择以“_log”结尾的文件,这个是数据库的日志文件。然后直接点击下面的确定按钮。
四、出现收缩成功的提示之后,再次在企业管理器中在这个数据库上点击右键查看属性,选择“事务日志”标签页,可以看到事务日志已经被
成功清空了。
方法二:
1、首先备份数据库
然后备份文件,备份日志文件,可改名
在查询分析器里执行sp_attach_single_file_db,将生成新的日志文件
具体怎么做,我也没做过,让有经验的人回答。,我去收集一下这方面的资料
truncate的数据如何恢复从大洋网摘录的方法,未试过
用bcp命令把数据库中的记录都导出来保存到另一台机器,然后用truncate table tablename的方式把所有记录都清空,然后执行dump transaction dbname with no_log,发现log文件已显著减少,再用bcp命令导入,导入后log文件又增大,但再用dump transaction dbname with no_log,效果不仅是使日志占的空间减少,日志文件的size也显著减少。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。