Delphi如何清空日志文件

开发 开发工具
本文是笔者在Delphi学习过程中,得出的个人体会,介绍了Delphi中如何清空日志文件的具体方法,希望能与大家共同分享一下。

  Delphi如何清空日志文件?

  问题的引出:我们在数据库切割过程中,就是将单据数据中某个日期以前的数据先复制到新的数据库中(select ... into ...),然后再将原来数据库中的这些数据删除。这样操作在数量很大的数据库上时,其日志文件的增长也是惊人的。我复制一个48万条记录的表时,***发现仅这一个表的操作就使新数据库的日志文件增加了170MB,如果不加清理,那就会被日志文件占用大量宝贵的磁盘空间。况且,我们转移到的新建数据库的作用也只是用来查询,以后不会有任何Insert、Update、Delete操作的,要这些日志文件没有什么用处,因此必须在向它转移数据的过程中做一些缩小日志文件的处理,怎么办??问题由此而生...

  1. 处理过程中不记录日志

  设置方法如下:企业管理器中打开对应数据库的“属性”,页框“选项”中将“模型”改为“简单”。这样设置的结果是对此数据库的任何操作都将不记录事务日志。对应的SQL为:EXEC sp_dboption @pdbName, 'trunc. log on chkpt.', 'TRUE'

  但是,我们经过测试发现:启用此功能后,我们在对这个数据库操作时,就不能用事务操作了,程序执行到BeginTranSaction时就报错,不能执行下去,由于我们不能在对此库的操作中保证100%的正确性,因此我们还需要事务,因此这种方法适用空间有限,也不能满足我们程序的需求。

  我们还得继续查找…

  2. 处理过程中允许记录日志,但要对日志文件进行处理,时时缩小它。

  SQL Server的联机帮助告诉我们:

  在下列情况下,日志文件的物理大小将减少:

  执行 DBCC SHRINKDATABASE 语句时。

  执行引用日志文件的 DBCC SHRINKFILE 语句时。

  自动收缩操作发生时。

  下面我们逐个分析这三个方案:

  ① DBCC SHRINKDATABASE:收缩特定数据库的所有数据和日志文件,包含我们的需求,但也大于我们的需求。此方案可用,但不要着急,给人的感觉是买了一件能穿的衣服,但尺寸大了些,穿在身上有点不舒服,我们接着分析以下两个方案。

  ② DBCC SHRINKFILE:收缩相关数据库的指定数据文件或日志文件大小。与方案1的区别仅一字之差:“和”与“或”,相当于把方案1拆成两步来执行,我们需要的就是收缩日志文件。因此,它对我们来说显得比较合适,有点量体裁衣的感觉。但还有没有更好的呢,我们来看第三个方案。

  ③自动收缩:数据库也可设置为按给定的时间间隔自动收缩,服务器定期检查每个数据库中的空间使用情况。如果发现数据库中有大量闲置空间,而且它的 autoshrink 选项设置为 true,SQL Server 就缩小该数据库中的文件大小。它是周期性的执行DBCC SHRINKDATABASE,既然方案1已经是一件尺寸大了一些的衣服,则此方案就相当于又穿上了N件大尺寸衣服,一件就已经够了,我还要那么多干嘛呢?

  综合对比发现,方案2正是我们需要的。

  1.   DBCC SHRINKFILE ('+Trim(edDBMC.Text)+'_Log, TRUNCATEONLY)  
  2.  

  经过这个语句处理以后,日志文件将回到它的最小状态504KB,任何的日志记录都将清空。

  再结合我们的工具,复制完一个表之后,我们就执行方案2,处理过程中日志文件暂时占用的***空间也就是处理***数据表时产生的日志空间,但***都将清空,显示为500多KB,相对于庞大的数据文件而言,微之戡微。

【编辑推荐】

  1. Delphi基础开发技巧
  2. Delphi编程读取txt文件数据
  3. 如何在Delphi中自动录入数据
  4. 基于Delphi的屏幕抓图技术的实现
  5. Delphi初学者应小心的六大问题
责任编辑:韩亚珊 来源: 编程爱好者
相关推荐

2010-09-01 16:17:40

SQL删除日志

2012-02-03 09:55:06

Delphi

2023-09-11 11:31:53

VLC日志文件

2011-03-16 16:41:57

清空iptables

2021-03-11 23:43:20

JavaScript数组开发

2019-10-21 08:56:36

Linux日志文件拆分

2021-08-30 13:08:54

Linux实时监控日志文件

2011-04-06 13:56:36

Delphi

2021-12-29 15:02:48

Linux清空文件

2020-03-24 08:00:00

Linux日志文件

2010-10-13 15:01:03

MySQL更新日志文件

2010-07-08 10:14:57

SQLServer日志

2010-10-29 15:07:33

oracle日志

2019-03-21 09:00:00

UbuntuLinux清空垃圾

2011-04-06 13:40:48

Delphi

2010-09-13 14:12:21

SQL Server日

2010-03-09 17:57:46

2016-10-21 14:49:32

2010-05-12 15:07:50

MySQLSQL数据库

2022-06-13 11:33:59

RedoMySQL
点赞
收藏

51CTO技术栈公众号