科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道关于Exchange循环日志和备份

关于Exchange循环日志和备份

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Exchange管理员都碰到一个头痛的问题:日志文件霸占磁盘空间。磁盘空间是有限的,但Exchange只要在运行,日志文件的产生就是无限的,虽然每个只有5M大小,但日志文件的产量很惊人的。

来源:IT试验室 2008年4月10日

关键字: Exchange server 电子邮件 协作办公 微软 Office

  • 评论
  • 分享微博
  • 分享邮件

    情景一:用户使用OUTLOOK(MAPI)发送接收邮件
  在该情景下,用户将邮件通过MAPI协议提交给数据库,直接被保存EDB文件中。当用户通过MAPI访问邮箱里的邮件时,如果被访问的邮件在EDB里,直接返回,如果在STM里(如外来邮件),则执行转换,将STM转换为EDB文件格式,再返回用户。

  情景二:用户使用标准SMTP/POP3/IMAP4等协议访问
  用户使用非MAPI协议提交的邮件,内容保存在STM文件里,但是由于EDB里有邮箱结构,STM没有,因此系统会把邮件的重要信息提取出来,放在EDB里。当用户用MAPI提取邮件时,过程同上,当用户通过标准协议访问时,同样需要进行格式转换,转换为STM文件格式返回。这些转换是在后台发生的。对用户来说是透明的。通过上面的描述,你会看到,这两个文件是紧密联系的缺一不可。所以,在任何时间我们都不要单独操作这两个文件,它们是一个整体。同时也要注意的是,无论用户使用何方式访问邮箱,都需要向EDB文件请求邮箱结构信息,这是需要注意的。

  看完上面两个情景解释,你对默认的“priv1.edb”、“priv1.stm”两个数据文件应该有区分和了解吧?!寡人刚接触Exhange的时候对这两个文件的区别也很感冒!

    四、LOG文件的重大作用

  前面提到过了,他是霸占磁盘空间的罪魁祸首,有些管理员一看日志文件很多的时候,于是开始删除日志文件,删到后来觉得烦琐了,于是就“启用循环日志”来减少烦琐的工作。我前面说了,你启用这个功能的话,你就可以向上帝祈求了...

    很多刚接触Exchange的管理员会提出疑问:日志文件到底有什么用?是不是多余的?那我们来看看日志的重大作用。对于一个SG来说,系统会产生一系列的日志,每个大小为5M,这些日志的扩展名为LOG,前缀一般是E00、E01……除了这些连续的日志文件外,还有一些特殊的日志文件(res1.log,res2.log,e0x.chk),它们又有什么用呢?如果对Exchange数据做完全备份 (Full Backup)的话,备份后日志文件会自动删除的,然后重新产生。老实说,十个管理员有九个对备份工作都怕怕,因此对这些日志是痛恨不已啊。我自己也做系统管理,对数据备份这个麻烦的工作的确很感冒,但是说到最后:备份工作必须做!不得不做!话题好像扯远了,呵呵...那么微软在Exchange数据库系统中引入日志到底有什么作用呢?我们从以下几个方面来考察一下日志的作用:

  1、作为一个企业级的邮件系统,必须要保证数据安全和完整。必须能够面对随时可能发生的意外灾难,把数据损失降低到最小。
  2、必须提供高性能的邮件处理能力,对数据库中的邮件的事务操作在完成后必须马上(或是说立即)被记录在存储介质上(见前面的事务持久性说明)
  3、灾难发生后,使用数据库备份恢复必须要返回到灾难发生前一刻的数据库状态(这是至关重要的!)

  现在我们来更进一步的看一下,当用户要修改邮箱中的内容时,被修改的内容首先被提取出来放到内存中,实际的修改是发生在内存里的,这是众所周知的,当修改完成后,这些内容必须被尽快写回存储介质,这样才表示一个事务成功完成了。

  从事务的描述中我们可以看到,事务是具有Atomic特性的,为了保证数据库的一致和完整,事务必须全部成功或全部失败,如果事务失败,则必须回滚到事务开始的状态。而当邮件在内存中修改完成后,此时事务并没有完成,因为还没有写到磁盘上。一旦系统崩溃,这些修改就丢失了。所以要确保事务修改完成,必须尽快将修改写回到数据库里去(也就是硬盘上),这也是事务的持久性要求。

  注意,这里说的第一时间或是尽快,是一个什么样的概念呢?如果我们直接修改EDB文件,由于EDB文件比较大,那么在硬盘上修改一个大文件,就需要花费大量的时间在等待和寻找数据存储块上(学过操作系统原理的人应该知道的),当系统出现高负载的繁忙状态时,这将是一个非常大的瓶颈,也就无法做到 “尽快”了。那怎么办呢?所以数据库系统使用了日志文件,而日志文件只有5MB大小,向这些文件写入修改肯定是很快速的,因此当内存的修改完成后,这些结果就会立即写入日志中,以保证了事务的持久性。当成功写入日志后,该事务就成功完成了(现在在硬盘上了,不会因为当机丢失了)接下来,ESE引擎会在后台慢慢将这些日志里的修改记录写回真正的数据库里去(这对用户来说已经不是那么重要了,这时候可能你的邮件都已经到对方了),这就是日志的第一个作用:确保事务在第一时间(尽可能快的)保存到非易失存储器上(磁盘上),提供了事务持久性支持。我自己是变相的把他理解为邮件数据缓存的,不知道这样是否科学,呵呵!根据上面的描述,我们看到运行中的Exchange数据库,是由三个部分组成的:

  * 内存中已经完成处理还没有写会到日志里的内容(Dirt page)
  * 还没有写到数据库文件里的日志内容
  * EDB和STM数据库文件

  对于第一个部分(内存中的),一旦掉电就会丢失的,是最不安全的。而对于第二部分的内容,系统通过检查点文件(CHK)来标记哪些日志已经被写入数据库了,而哪些还没有。CHK文件类似一个指针。我们可以用 “ESEUTIL /MK”来检查CHK文件里的内容,在该命令的输出中的checkpoint:<0x8,26d1,29>这样的东西就是检查点位置,它表示 E0x00008的日志的页面序号已经被成功写入数据库了。大家可以自己看看。。:)

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章