[post][/post]根据系统的报错信息、系统日志或者应用程序的报错,怀疑出错原因是域控制器上的Active Directory,这时可能您最先想到的就是使用Ntdsutil工具的修理功能来修复。但是,我建议您最好把它作为所有可用方法中最后的方案。如果有一个有效的备份,最好使用备份来恢复系统,应该始终把使用备份来恢复作为您首选的方案。
对目录数据库使用修复功能并不总是能够达到预期的结果。比如,如果数据库文件真的损坏了,即使使用Ntdsutil也没有办法恢复所有的对象和属性值。实际上,在某些情况下使用修复工具反而会造成更多的数据丢失,所以在尝试使用这种修复工具之前,注意把这台服务器从网络中隔离开来,以避免影响到其他域控制器的Active Directory复制。在确认修复后的服务器一切正常以后再连接到网络中来。
下面以Windows Server 2003为例来介绍如何使用Ntdsutil修复Active Directory数据库。
要对数据库进行修理请按照以下步骤。
(1)打开命令行提示符窗口,输入下面的命令:
Ntdsutil
(2)当出现Ntdsutil的提示后,输入下面的命令:
repair
当其他一切努力都失败的时候,您可能才会发现从Active Directory的备份中恢复一个Windows 2000域控制器(甚至可以恢复整个Active Directory网络)才是最有效的。虽然要把Active Directory从一个备份恢复到一个域控制器上不是一件难事,但是在您进行任何恢复之前,需要对网络体系和逻辑关系仔细考虑。如果在一个网络中存在一台以上的Windows 2000 域控制器,Active Directory将不再只存放在一个地方,这是一个非常重要的问题,它直接决定了将来的恢复过程。试着问问自己以下的几个问题。
是否本地的Active Directory数据库损坏了,其他复制过的域控制器也损坏了吗?当一个域控制器从一个好的备份中恢复以后,是否应该覆盖其他Active Directory中的数据?如果要覆盖,那么是否会丢失所有修改过的数据(例如新建或删除的组织单位、修改过的用户和计算机)?能否只恢复本地的Active Directory从而让它恢复正常(可能因为数据库损坏、文件丢失或其他原因造成这台服务器与其他不一致)?在恢复以后,这台服务器应该从哪些域控制器上接收更新数据?
回答以上问题将有助于您决定使用哪一种恢复模式:非授权(Nonauthoritative)模式或者授权(Authoritative)模式。
非授权恢复模式:大多数的恢复操作都是基于非授权模式的。通常当您发现本地一台Windows 2000域控制器有问题,并且确信网络上其他的域控制器的Active Directory是正常的时候,一般会采用非授权恢复模式。在非授权恢复过程中,所有恢复后的数据都会根据比较升级序号(USN)收到网络上最新的更新(包括Active Directory的对象)。Active Directory在同一个域中,通过比较升级序号来跟踪最新修改。
授权恢复模式:当其他的域控制器包含了无效的复制和数据时,可以采用授权恢复模式。在这种情况下,可以手工指定要恢复的整个Active Directory的数据库。指定本地恢复的数据库是授权的(也就是在与其他域控制器复制时,以本地恢复的版本为准)。授权恢复模式要修改Active Directory的升级序号,这样它的序号就高于其他的域控制器,从而使本地恢复的数据复制到其他的域控制器上。
您可以使用一台服务器的备份来恢复这台服务器本身,在通常情况下不能用这台服务器的备份去恢复其他的服务器。但是,如果某台域控制器真的停机了,还是可以使用这台服务器的备份恢复到另一台服务器上以取代原来服务器的。在制定备份策略的时候,一定要把这些限制考虑进去。要对整个网络做完整的备份,需要对网络内的每一个域控制器做好备份。还有,要特别注意定期备份域森林中的第一台域控制器。这台域控制器在整个域森林中都是唯一的,它包含了一些对整个网络来说都是独一无二和至关重要的数据。
如果使用Windows Server 2003自带的备份工具(Ntbackup.exe),要想成功恢复系统状态(包括Active Directory),还要必须做到以下几点。如果没有达到以下的要求,恢复操作是将会是失败的。
(1)服务器名称必须和备份的服务器名称相同。
(2)“\%systemroot%”文件夹所在的驱动器的字符必须和备份的服务器的驱动器字符相同。
(3)“\%systemroot%”文件夹所在的目录必须和备份的服务器所在的目录相同(例如都保存在“C:\winnt”目录下)。