解决方案:如何应对域控制准备工具错误?

日期: 2010-07-22 作者:Gary Olsen翻译:Dan 来源:TechTarget中国 英文

上篇文章中,我们解析了Windows Server 2008中域控制准备工具复制链接ID的冲突错误,本文中,我们将讨论如何解决这个问题。 案例分析   在我曾经接触到的一个案例中,一个名叫“Cognos”的应用程序有两个属性,每个属性都有链接 ID值。   在Windows Server 2003中,这些属性值正常工作,但在Windows Server 2008中,系统中出现了使用这些同一链接ID值的新属性。因此,当域控制准备工具运行时我们就会发现这些错误。

该应用程序的文档明确指出它使用的链接ID值不会超过13800,但实际上却并没有照此执行。   解决这个问题的诀窍就是找出Windows S……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

上篇文章中,我们解析了Windows Server 2008中域控制准备工具复制链接ID的冲突错误,本文中,我们将讨论如何解决这个问题。

案例分析

  在我曾经接触到的一个案例中,一个名叫“Cognos”的应用程序有两个属性,每个属性都有链接 ID值。

  在Windows Server 2003中,这些属性值正常工作,但在Windows Server 2008中,系统中出现了使用这些同一链接ID值的新属性。因此,当域控制准备工具运行时我们就会发现这些错误。该应用程序的文档明确指出它使用的链接ID值不会超过13800,但实际上却并没有照此执行。

  解决这个问题的诀窍就是找出Windows Server 2008中与Cognos属性相冲突的对象,然后为这些属性提供新的ID值。微软知识库第969307号文章详细阐述了这个问题,并且也是用Cognos为例。但是这篇文章,至少在我看来,描述的不是很清楚、容易误导读者,所以在这里我要更正某些在该文中出现的错误。下面是解决该域控制准备工具错误的过程:

  1、诊断错误。Adprep运行时出现了错误:“域控制准备工具无法更新林信息”。在域控制准备工具日志文件中,我们可以看到如下信息:

Adprep was unable to upgrade the schema on the schema master. [Status/Consequence] The schema will not be restored to its original state. [User Action] Check the Ldif.err log file in the C:WINDOWSdebugadpreplogs20100301111718 directory for detailed information.

  打开LDIF.err或(LDIF.err.34)文件,我们看到:

Entry DN_CN=ms-PKI-DPAPIMasterKeys,CN=Schema,CN=Configuration,DC=Corp,
DC=com Add error on line 123: Unwilling To Perform The server side error is "Schema update failed: An attribute with the same link identifier already exists." An error has occurred in the program
An identical error exists in the LDIF.err file.

  2、找到有同一链接ID值的新属性。域控制准备工具使用的是名为SCHxx.ldf(其中xx为连续的整数)的文件来修改活动目录架构。这些文件保存在Windows Server 2008光盘中的SourcesADPrep目录下,出现问题的属性就被列在这些文件中。从上面提到的错误信息中可知,出错的属性就是CN=ms-PKI-DPAPIMasterKey。

  简单搜索一下DVD中的.ldf文件,即可找到出错的属性,得到其链接ID为2046。在这个例子中,包含出错属性的文件是SCH34.ldf。至此,我们知道新属性和链接ID 204是6一起加入的,接下来要做的就是找到目录中哪些属性拥有该链接 ID。

  3、找出链接ID相冲突的属性(本例中,链接ID为2046)。使用一次简单的LDIFDE搜索,我们就能找到冲突的Cognos属性:

ldifde -f linkID.ldf -d "CN=Schema,CN=Configuration,DC=,DC=com" -r "(&(objectclass=*)(linkid=2046))"

  本例中的输出文件为linkID.ldf,在记事本中打开后我发现了如下内容:

DN: CN=camDBSignonRef,CN=Schema,CN=Configuration,DC=corp,DC=com
          2> objectClass: top; attributeSchema
          1> cn: camDBSignonRef
          <snip>
          1> linkID: 2046

  如果我们想从一个没有安装Cognos的Windows 2008域上转储ms-PKI-DPAPIMasterKey属性,那么它的链接ID就会是2046。由于我们不应该搞乱Windows系统的属性,我们可能会修改Cognos的属性,。但正如之前所提到的,链接ID的具体值是什么根本无关紧要,只要它们是唯一的非零正整数就行。再声明一次,重要的是ID值必须唯一。

  在本例中,我们还发现了另一个Cognos属性与Windows的ms-DS-Bridgehead-Servers-Used属性相冲突,这也意味着你需要找出的属性可能不止一个。

  4、解决办法。必须给新的属性(本例中是Windows2008属性)分配新的链接ID。按照上面所提到的KB 969307号文章 “解决方案”部分中的步骤做就行了,主要有以下几步:

  1)将Windows Server 2008光盘中的Adprep目录拷贝到服务器硬盘上。我建议你新建一个目录C:ADPrep,然后再拷贝。

  2)打开LDIF.err.xx文件(包含冲突属性的文件),用1.2.840.113556.1.2.50替代冲突属性的链接ID(在本例中为2046)。这串数字会引起系统自动为该属性分配新的唯一ID。

  3)从你拷贝.ldf文件的目录(步骤1中的C:ADPrep)运行域控制准备工具,修改链接ID。

  4)注意,如果你的属性具有后向链接,那么你同样需要对它们进行修改。上面提到的微软知识库文件中有详细的修改说明。

  值得注意的是,如果开发人员在开发过程中没注意这些问题,那么上述错误就很容易发生。再重申一次,链接ID必须是唯一的。你在Windows属性或在应用程序中对链接ID进行修改并不重要,但属性的选择会相对容易并且可以正常运行。

相关推荐