修复Exchange Server中的文件级数据库错误1018、1019、1022
错误消息1018、1019和1022的主要原因是Exchange Database Files页面的损坏。本文主要介绍有关Exchange服务器错误的详细信息;导致这些错误的问题,三者之间的区别以及如何修复这些文件级数据库错误。
Exchange服务器内置功能具有识别内置页面级损坏的能力,与数据库损坏相关的症状有:
- 1018年JET_errReadVerifyFailure
- 1019年JET_errPageNotInitialized
- 1022年JET_errDiskIO
实际上,MS Exchange数据库的损坏发生在不同的级别。然而,最常见的损坏可能性是:EDB文件页面损坏、b树结构紊乱、EDB文件索引损坏。如果Exchange数据库受到这些因素中的任何一个的影响,则损坏分为以下几种:
- 页面级别
- 应用程序级别
- 数据库级
使用Eseutil.exe /K开关确定并修复数据库的页级完整性。同样,应用程序和数据库级别的损害是由于b树结构中的问题造成的。EDB文件的表或索引被归类为逻辑损坏。请参阅下图:
图1:说明了错误1018、1019、1022的原因和级别
虽然主要目标是解决错误,但有必要了解这些错误背后的原因以及EDB文件中页面的组织。从逻辑上讲,EDB文件由4KB的集合组成(其中4KB的集合表示4的倍数),并以连续的方式编号。可扩展存储引擎(ESE)将所有信息存储在EDB文件中,这些文件以B-Tree和B+ Tree结构进一步组织。B-Tree结构由指向下一个相邻页面或前一个页面的页面组成。事实上,由于快速遍历树,用户可以获得即时搜索结果,尽管它是一个存储大量信息的仓库。即时搜索结果被归结为3个级别的B-Tree,即根,内部和叶子。这意味着,对于具有50GB文件的数据页,属性只能读取4或5个磁盘中的数据。然而,EDB文件的表、图、索引和其他结构也是B+树的组成部分,而Exchange Store (ESE)是多个B+树的集合。
图2:说明b树基础结构的级别
如上图所示,在B+树中,底层或叶节点上有数据,ESE树的上两层由结构信息组成。如果一个叶节点损坏了,那么数据损坏就不是很大。相反,如果树中的结构页被损坏,那么该结构中可用的整个表数据就会丢失。应用Eseutil/P或/D选项可能无法修复节点中可用的数据,但可以使用ISINTEG实用程序检查数据的完整性。
EDB文件也是按页面划分的。前两个页是Database Header的一部分,数据库的第三个物理页是它的逻辑页。在这里,页码和页面的Checksum值同样重要。当我们将ESE数据库写入磁盘时,会在页面上执行一个数学计算,这个计算称为Checksum。校验和值被写入报头。当ESE读取页面时,如在在线备份期间或当用户执行标准功能时,它计算Checksum值并与Header匹配。如果校验和值不匹配,则表明在页级存在损坏。
有些页面不计算Checksum, EDB将其标记为“未初始化页面”。创建未初始化的页面是为了扩展更多数据的空间,由于它们不包含任何数据,因此校验和和页码的值为零。然而,一旦未初始化的页面填满了数据,它就会被转换为初始化状态,即使没有数据也不能恢复到未初始化状态。原因是EDB设置了一个标志来提醒该页面作为校验和和页码。
现在我们对Exchange数据库的结构有了一个大致的了解,让我们来检查错误及其解决方法。
- 1018 JET_errReadVerifyFailure原因
- 报头的校验值与重新计算的值不匹配
- 写在硬盘上的数据损坏或写在未分配的位置
- NTFS文件系统有问题
- 识别错误的校验和
- 创建正确的校验和,但在不适当的位置应用
当用户对Exchange数据库执行操作时,以下原因之一会导致Exchange服务器错误- 1018:
有时,Exchange Server也负责Exchange Server错误-1018:
- 1019 JET_errPageNotInitialized原因
ESE尝试访问它认为其中有数据的页面。在这种情况下,数据库的前一页链接到其下一页,并指示存在有效数据。当数据库文件大小增加时,会初始化用零填充的新页,从而导致此错误。如果现有页面指向这些新页面,那么问题就出在ESE数据库引擎上。
第二个最突出的原因Exchange服务器错误-1019是文件系统问题。文件系统将不属于数据库的数据映射到数据库文件中。由于错误几天、几周或几个月都没有报告,因此很难跟踪和解决。
- 1022 JET_errDiskIO . 1022原因
这是三个错误中最严重的一个。作为一个通用错误,它会导致数据库出现问题。ESE尝试从数据库中不存在但有指向该页的指针的页中读取。以下情况会导致错误:
- 任何第三方实用程序都会截断数据库
- 基于文件的防病毒软件删除或阻止部分文件
- 用户拒绝了本地系统帐户打开filePoint的权限。需要注意的是,正常的在线备份停止是因为Exchange Server错误-1022阻止它继续进行。
解决Exchange Server错误1018、1019、1022的解决方案:
1.使用在线备份恢复
当页面出现Exchange Server Errors 1018错误时,它将呈现为不可读,并且如果具有指向其他页面的指针的页面损坏,则备份进程将停止。由于备份在此时终止,因此它没有任何损坏。然后可以使用可靠的备份介质恢复备份。
如果备份不是最新的(如果很晚才检测到错误),那么Exchange数据库最终可能会丢失关键数据。如果可以使用Eseutil命令修复数据库,则可以避免这种情况。
由于数据库严重损坏,在经历Exchange服务器错误- 1022之后,修复数据库并不容易。恢复方法也不是可行的选项,因为数据库备份可能不是当前的,并且在备份恢复后会导致数据库丢失。
2.使用Eseutil /p Switch修复数据库
在这种情况下,使用语法解决错误:
Eseutil / p
C:\program files\exchsrvr\bin>Eseutil/p "C:\program files\exchsrvr\mdbdata\priv1.edb .
在修复后检查报头中的修复计数的语法
Eseutil / mh
C:\program files\exchsrvr\bin>Eseutil/mh "C:\program files\exchsrvr\mdbdata\priv1.edb
在这种情况下,将删除逻辑数据库中的损坏页,但是一个明显的缺点是Eseutil命令会在数据库中的损坏页处创建空白,从而导致数据库丢失。
3.使用Eseutil/d开关对Exchange数据库进行离线碎片整理
通过数据库的离线碎片整理和Eseutil/D的帮助来扭转这种情况。使用以下语法:
Eseutil / d
C:\programfiles\exchsrvr\ bin>Eseutil/d "C:\programfiles\exchsrvr\mdbdata\priv1.edb
对修复后的数据库执行脱机碎片整理的缺点是:
- Eseutil不会修复EDB文件中的损坏,而是只从Exchange数据库中删除空白。
- 由于Eseutil删除了数据库中的空白,因此页面的逻辑和物理编号彼此不匹配。
4.使用Isinteg修复数据库
Isinteg帮助纠正和同步数据库的逻辑页和物理页。
C:\program files\exchsrvr\bin>isinteg -s servername -fix -tests alltests
使用Isinteg语法的缺点是它可能工作,也可能不工作,如果差异很大,那么数据库修复的机会就会进一步减少。
5.使用Exchange恢复软件
修复Exchange数据库的最可靠的软件之一是星修交换用于修复Exchange数据库并确保没有数据丢失的软件。只需执行搜索、扫描、保存EDB文件三个主要步骤即可获得所需的结果。
结论
虽然Exchange管理员是使用Eseutil交换机和Isinteg解决错误的专家,但仍然存在Exchange服务器错误-1018、1019、1022等错误,这些错误会在修复和整理碎片过程后导致Exchange数据库丢失。更好的选择是使用Exchange恢复工具,如Stellar Repair for Exchange。该软件修复EDB文件并将其导出为PST。此外,它还可以将修复后的EDB直接导出到Office 365或Live Exchange服务器,从而减少Exchange停机时间。