古いグローバル カタログ サーバーをオンラインに戻した後で残存オブジェクトが発生する

文書翻訳 文書翻訳
文書番号: 314282 - 対象製品
この記事は、以前は次の ID で公開されていました: JP314282
すべて展開する | すべて折りたたむ

目次

現象

長期間オフラインになっていたドメイン コントローラまたはグローバル カタログ サーバーをオンラインに戻した後、次のいずれかの問題が発生することがあります。
  • ドメイン間でユーザー オブジェクトの移動が行われたユーザーに、電子メール メッセージが配信されない。古いドメイン コントローラまたはグローバル カタログ サーバーをオンラインに戻した後、グローバル カタログに両方のユーザー オブジェクトのインスタンスが現れます。どちらのオブジェクトにも同じ電子メール アドレスが設定されているため、電子メール メッセージを配信できなくなります。
  • 既に存在しないユーザー アカウントがグローバル アドレス一覧に表示される。
  • 既に存在しないユニバーサル グループがユーザーのアクセス トークンに表示される。
これらの問題は、ドメイン コントローラまたはグローバル カタログ サーバーが、廃棄 (Tombstone) の有効期限の設定よりも長い間オフラインになっていた場合に発生することがあります。

原因

廃棄の有効期限の設定 (デフォルト値は 60 日) よりも長い間オフラインになっていたドメイン コントローラ (グローバル カタログ サーバーでもある場合があります) には、オフライン期間に他のドメイン コントローラやグローバル カタログ サーバーで削除されたオブジェクトが含まれていることがあります。また、これらのオブジェクトの廃棄状態を示す情報は残されていません。古いドメイン コントローラをオンラインに戻すと、そのドメイン コントローラではオブジェクトが削除されたことの通知を受け取ることができなくなります。いずれかのオブジェクトが変更されると、それらのオブジェクトは残りのドメインでも再度アクティブ化されます。

残存オブジェクトが、読み書き可能な名前付けコンテキストに複製される場合、標準の動作 (Loose Replication Consistency) では、受信側のドメイン コントローラでローカル データベース (DIT) に存在しないオブジェクトが再作成されます。その後、これらのオブジェクトは元のドメイン コントローラに再度複製されるため、削除されたオブジェクトが再作成されます。オブジェクトを Active Directory から完全に削除する必要がある場合 (たとえば、オブジェクトが古いドメイン コントローラから再び取り込まれた場合) は、Adsiedit や Active Directory ユーザーとコンピュータ スナップインなどの標準のツールを使用して、そのオブジェクトを削除できます。

名前付けコンテキストが読み書き可能な場合、残存オブジェクトを簡単に削除できます。この資料では、読み取り専用であるグローバル カタログの名前付けコンテキストに含まれる残存オブジェクトを削除する方法について説明します。 廃棄の問題の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
216993 [NT]Active Directory のバックアップの有効期間は 60 日
名前付けコンテキストの読み書き可能なコピー内にオブジェクトが残る問題の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
317097 残留オブジェクトにより Active Directory の複製が妨げられる

解決方法

この問題を解決するには、Windows 2000 の最新の Service Pack を入手します。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
260910 最新の Windows 2000 Service Pack の入手方法
: この修正プログラムをインストールする前に、この資料の「詳細」全体を読んでください。「詳細」には、この修正プログラムのインストール方法と使用方法に関する重要な情報が含まれています。

修正プログラム (英語版) の属性は次のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。
   日付           時刻     バージョン           サイズ     ファイル名
   ------------------------------------------------------------
   16-Jan-2002  22:07  5.0.2195.4685     123,664  Adsldp.dll
   16-Jan-2002  22:07  5.0.2195.4762     130,320  Adsldpc.dll
   16-Jan-2002  22:07  5.0.2195.4016      62,736  Adsmsext.dll
   16-Jan-2002  22:07  5.0.2195.4797     356,112  Advapi32.dll
   16-Jan-2002  22:07  5.0.2195.4797      41,744  Basesrv.dll
   11-Dec-2001  03:33  5.0.2195.4571      82,704  Cmnquery.dll
   16-Jan-2002  22:07  5.0.2195.4141     133,904  Dnsapi.dll
   16-Jan-2002  22:07  5.0.2195.4379      91,408  Dnsrslvr.dll
   11-Dec-2001  03:33  5.0.2195.4534      41,744  Dsfolder.dll
   11-Dec-2001  03:33  5.0.2195.4534     156,944  Dsquery.dll
   11-Dec-2001  03:33  5.0.2195.4574     110,352  Dsuiext.dll
   16-Jan-2002  22:16  5.0.2195.4814     521,488  Instlsa5.dll
   16-Jan-2002  22:07  5.0.2195.4630     145,680  Kdcsvc.dll

   27-Nov-2001  01:33  5.0.2195.4680     199,440  Kerberos.dll
   16-Jan-2002  22:07  5.0.2195.4829     708,880  Kernel32.dll
   04-Sep-2001  17:32  5.0.2195.4276      71,024  Ksecdd.sys
   09-Jan-2002  19:50  5.0.2195.4814     503,568  Lsasrv.dll
   09-Jan-2002  19:50  5.0.2195.4814      33,552  Lsass.exe
   08-Dec-2001  01:05  5.0.2195.4745     107,280  Msv1_0.dll
   16-Jan-2002  22:07  5.0.2195.4594     306,960  Netapi32.dll
   16-Jan-2002  22:07  5.0.2195.4686     359,184  Netlogon.dll
   16-Jan-2002  22:07  5.0.2195.4797     476,432  Ntdll.dll
   16-Jan-2002  22:07  5.0.2195.4827     916,240  Ntdsa.dll
   15-Jan-2002  09:34  5.0.2195.4839   1,688,192  Ntkrnlmp.exe
   15-Jan-2002  09:36  5.0.2195.4839   1,687,744  Ntkrnlpa.exe
   15-Jan-2002  09:36  5.0.2195.4839   1,708,480  Ntkrpamp.exe
   15-Jan-2002  09:34  5.0.2195.4839   1,665,856  Ntoskrnl.exe
   16-Jan-2002  22:07  5.0.2195.4827     388,368  Samsrv.dll
   16-Jan-2002  22:07  5.0.2195.4583     128,784  Scecli.dll
   16-Jan-2002  22:07  5.0.2195.4600     299,792  Scesrv.dll
   16-Jan-2002  22:07  5.0.2195.4600      48,400  W32time.dll
   06-Nov-2001  20:43  5.0.2195.4600      56,592  W32tm.exe
   16-Jan-2002  22:07  5.0.2195.4827     125,712  Wldap32.dll
				
: この修正プログラムはロールアップ パッケージに置き換えられました。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
326797 一部の Windows 2000 Active Directory 修正プログラムが Windows 2000 Service Pack 3 (SP3) と競合する

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。 この問題は、Windows 2000 Service Pack 3 で最初に修正されました。

詳細

この修正プログラムでは、残存オブジェクトの削除に対応しています。以下の手順では、オブジェクトの読み書き可能なコピーを持つドメイン コントローラの objectGUID と、オブジェクト自身の objectGUID が必要です。2 つ以上のオブジェクトを削除する必要がある場合、オブジェクトに親子関係がないかどうかを確認します (親子関係はオブジェクトの識別名から判断できます)。親子関係が見つかった場合には、親オブジェクトを削除する前にすべての子オブジェクトを削除するように削除の順序を決定します。

オブジェクトがどのドメインに存在するかを特定し、その結果からオブジェクトの読み書き可能なコピーを含むドメイン コントローラの名前を確認する最善の方法は、オブジェクトの識別名を特定することです。サポート ツールの Ldp.exe ツールを使用すると、重複したユーザー、グループ、または配布リストの名前または名前の一部を検索することで識別名を特定できます。
  1. Ldp.exe を起動します。
  2. [Connection] メニューの [Connect] をクリックします。
  3. [Server] ボックスにグローバル カタログの名前を入力します。接続するポートとして 3268 と入力します。[OK] をクリックします。
  4. [Connection] メニューの [Bind] をクリックします。グローバル カタログの内容をすべて照会するのに現在の資格情報では不十分な場合には、有効な資格情報を入力します。[OK] をクリックします。
  5. [View] メニューの [Tree] をクリックします。フォレスト ルートの識別名を入力します。[OK] をクリックします。
  6. ツリーの一覧でフォレスト ルートを右クリックし、[Search] をクリックします。
  7. 次の形式のフィルタを作成します。
    ([attribute]=[value])
    [attribute] と [value] は適切なデータに置き換えます。たとえば、"testuser" という名前のユーザー アカウントに設定された値を sAMAccountName 属性が持っている場合に結果を返すフィルタを作成するには、[フィルタ] ボックスに (sAMAccountName=testuser) と入力します。ユーザー オブジェクトを検索するには、cn、userPrincipalName、sAMAccountName、名前、電子メール、sn 属性が便利です。グループ オブジェクトの場合は、cn、sAMAccountName、または名前を使用します。[value] フィールドには、必要に応じて、アスタリスク (*) も使用できます。

    LDAP (Lightweight Directory Access Protocol) フィルタの構文の詳細については、次のマイクロソフト Web サイトを参照してください。
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/search_filter_syntax.asp
  8. 検索範囲として [Subtree] をクリックします。
  9. [Options] をクリックします。[Search Options] ダイアログ ボックスで、[Attributes] ボックス内のテキストの末尾に移動します。
  10. テキスト (一覧) の末尾に objectGUID; を追加します。[OK] をクリックします。
  11. [Run] をクリックして、検索を実行します。
  12. 結果を参照します。表示されたオブジェクトの中から、グローバル カタログから削除する必要があるオブジェクトを特定します。たとえば、オブジェクトが名前付けコンテキストの読み書き可能なコピー上に存在しない場合は、見つかったオブジェクトに問題があることを示します。
  13. 必要に応じて、検索の内容を変更し、再度実行します。
  14. 残存オブジェクトが特定できた場合、その識別名と objectGUID をメモしておきます。
オブジェクトの識別名を取得したら、識別名の "dc=" 部分からオブジェクトの存在するドメインを特定します。たとえば、cn=FirstName LastName,cn=Users,dc=name1,dc=name2,dc=com のドメインは、name1.name2.com です。次に、ドメインのドメイン コントーラ (グローバル カタログ サーバーでもある場合があります) を見つけます。

repadmin /showreps dc-name コマンドを実行します (dc-name は、見つかったドメイン コントローラの名前です)。Repadmin.exe はサポート ツールに含まれています。出力結果から、ドメイン コントローラの objectGuid をメモしておきます。
C:\>repadmin /showreps some-DC
Your-Site\some-DC
DSA Options : (none)
objectGuid : d1fa2207-ae85-466f-88fd-908f1c623ea7
残存オブジェクトが存在するすべてのグローバル カタログ サーバーに、この資料に記載されている修正プログラムをインストールしてください。残存オブジェクトの読み書き可能なコピーが存在することが判明したドメイン コントローラについては、残存オブジェクトが存在するグローバル カタログ サーバーを兼ねていない限り、修正プログラムのインストールは必要ありません。削除操作を行う各グローバル カタログ サーバーからは、特定されたドメイン コントローラへのネットワーク接続ができる必要があります。

削除対象のオブジェクトが少ない場合

削除対象が数個のオブジェクトとグローバル カタログのみの場合、Ldp.exe を使用して、次の手順を実行します。
  1. 修正プログラムがインストールされた (残存オブジェクトのコピーが存在する) 各グローバル カタログ サーバーに、エンタープライズ管理者の資格情報を使用してログオンします。
  2. Ldp.exe を起動し、ローカル ドメイン コントローラのポート 389 に接続します ([Server] ボックスは空欄にします)。
  3. [Connection] メニューの [Bind] をクリックします。既にエンタープライズ管理者としてログオンしているため、すべてのボックスを空欄にします。
  4. [Browse] メニューの [Modify] をクリックします。
  5. [Dn] ボックスを空欄にします。
  6. [Attribute] ボックスに RemoveLingeringObject と入力します。
  7. [Values] にその値として <GUID= と入力します。
  8. 前の手順で repadmin /showreps dcname コマンドを実行して得られたドメイン コントローラの GUID を上記の値の末尾に追加します。

    : この例では、dcname は残存オブジェクトの書き込み可能な名前付けコンテキストをホストするドメイン コントローラです。
  9. > : <GUID= を上記の値の末尾に追加します。スペースは省略しないでください。
  10. 残存オブジェクトの GUID を上記の値の末尾に追加します。
  11. > を上記の値の末尾に追加します。
  12. 完全な値は次のようになります。
    <GUID=85dd0fee-de1b-461c-b9c0-27e9e8249484> : <GUID=eeeb70e5-4501-4895-a572-94a87e8f8ac7>
  13. [Operation] の [Replace] をクリックし、[Enter] をクリックします。
  14. [Run] をクリックして、要求を実行します。Ldp.exe ウィンドウの右側の画面に要求の結果が表示されます。次のような結果が表示されます。
    ***Call Modify...
    ldap_modify_s(ld, '(null)',[1] attrs);
    Modified "".

削除対象のオブジェクトが多い場合

削除対象のオブジェクトおよびグローバル カタログ サーバーが多い場合、次のスクリプトを使用すると操作が簡単になります。
  1. 新しいフォルダに Walkservers.cmd という名前のファイルを作成し、このファイルに次のテキストを貼り付けます。
    for /f %%j in (server-list.txt) do walkobjects %%j
  2. Walkobjects.cmd という名前のファイルを作成し、このファイルに次のテキストを貼り付けます。
    for /f "delims=@" %%i in (object-list.txt) do cscript //NoLogo MODIFYROOTDSE.VBS %1 "%%i" >>update-%1.log


    : このコマンドは 1 行に入力します。表示画面のサイズによっては、複数行にまたがって表示される場合があります。
  3. Modifyrootdse.vbs という名前のファイルを作成し、このファイルに次のテキストを貼り付けます。
    '********************************************************************
    '*
    '* File:        MODIFYROOTDSE.VBS
    '* Created:     January 2002
    '* Version:     1.0
    '*
    '* Main Function: Writes Active Directory information to clean up 
    '* objects as per: Q314282.
    '* Usage: Modifyrootdse.vbs <TargetServer> <GUID PAIR>
    '* Parameter are fed into the script using a pair of batch files.
    '*
    '* Copyright (C) 2002 Microsoft Corporation
    '*
    '********************************************************************
    
    OPTION EXPLICIT
    ON ERROR RESUME NEXT
    
    Dim objDomain
    Dim ObjValue, strServerName, adsLdapPath 
    Dim i
    
    'Get the command-line arguments
        if Wscript.arguments.count <> 2 Then
         Print "Invalid Number of Parameters. Use with WalkServers.CMD and WalkObjects.CMD"
        WScript.quit
    End If
    
        strServerName = Wscript.arguments.item(0)
        ObjValue = Wscript.arguments.item(1)
    
        adsLdapPath = "LDAP://" & strServerName & "/RootDSE"
    
        Set objDomain = GetObject(adsLdapPath)
        If Err.Number <> 0 Then
            WScript.Echo "Error opening ROOTDSE. Error number is: " & Err.Number & ". Error description is: " & Err.Description & "."
        Set objDomain = Nothing
            WScript.quit
        End If
    
        objDomain.Put "RemoveLingeringObject", ObjValue
        objDomain.Setinfo
    
        If Err.Number = 0 Then
           WScript.Echo "Object " & ObjValue & " was removed."
    Else
           WScript.Echo "Object " & ObjValue & " could not be removed. Error number is: " & Err.Number & ". Error description is: " & Err.Description & "."
        End If
    WScript.Quit
    						
    : Modifyrootdse.vbs を手動で起動する場合、スペースを含むパラメータは二重引用符で囲んでください。

  4. 残存オブジェクトが存在するすべてのグローバル カタログ サーバーの一覧を作成します。同じフォルダの Server-list.txt ファイルにサーバー名を列挙します。DNS サフィックス検索を避けるために、完全修飾ドメイン名を使用します。
  5. 前の手順で取得した GUID のペアを Object-list.txt ファイルに追加します。次の構文を使用して、各行に 1 つのペアを追加します。
    <GUID = DC GUID> : <GUID = object GUID>
    GUID のペアの入力例を以下に示します。
    <GUID=85dd0fee-de1b-461c-b9c0-27e9e8249484> : <GUID=eeeb70e5-4501-4895-a572-94a87e8f8ac7>
  6. Walk-servers.cmd ファイルを実行します。このスクリプトにより、Server-list.txt ファイルに列挙されているグローバル カタログ サーバーごとに、Update-server-name.log という名前のファイルが生成されます。このログ ファイルには、各行に 1 つの削除対象のオブジェクトが出力されています。
残存オブジェクトは必ずしもすべてのグローバル カタログ サーバーに存在するわけではないため、ログ ファイル内にエラーがあってもそれが問題とは限りません。ただし、"操作が拒否されました" または "操作エラー" という形式のエラー メッセージが記録されている場合は、GUID または値の構文に関するエラーであることを示します。これらのエラーが発生した場合は、以下の事項を検証してください。
  • ドメイン コントーラの GUID が、オブジェクトが存在するドメインの書き込み可能なコピーを含むドメイン コントローラの正しい GUID であることを確認します。
  • オブジェクトの GUID が、グローバル カタログ (読み取り専用) の名前付けコンテキスト内の残存オブジェクトを指していることを確認します。
  • ここでの手順を適用するすべてのドメイン コントローラおよびグローバル カタログ サーバーに修正プログラムがインストールされていることを確認します。修正プログラムのインストール後にサーバーを再起動したことを確認します。

環境内の多くの残存オブジェクトを修正するために Walkservers.cmd を実行したときのエラー メッセージ

Object <GUID=ae856ce5-839a-4e44-b2fb-f37082ca2555> : <GUID=514f7510-451a-4297-8129-9b4c8ab79axx> could not be removed. Error number is: -2147016672. Error description is: .

原因

このエラーは、残存オブジェクトが存在する書き込み可能なパーティションを含まないドメイン コントローラに対してスクリプトが実行されたために発生します。Ldp.exe ツールを使用して残存オブジェクトの場所を確認してください。

次の例では、エラー メッセージを引き起こした削除対象の残存オブジェクトは、corp.company.local ドメインにありますが、objects-list.txt ファイルでは、<GUID=ae856ce5-839a-4e44-b2fb-f37082ca2555> は、corp.company.local に対する書き込み可能なパーティションを持たない company.local ドメインのドメイン コントローラに関連付けられています。
ldap_search_s(ld, "DC=company,DC=local", 2, "(cn=User*)", attrList, 0, &msg)
Result <0>: (null)
Matched DNs:
Getting 4 entries:
>> Dn: CN=User\, Joe,OU=Exec,OU=Corporate Users,DC=corp,DC=company,DC=local
	 1> canonicalName: corp.company.local/Corporate Users/Exec/User, Joe; 
	 1> cn: User, Joe; 
	 1> description: CEO; 
	 1> displayName: User, Joe; 
	 1> distinguishedName: CN=User\, Joe,OU=Exec,OU=Corporate Users,DC=corp,DC=company,DC=local; 
	 4> objectClass: top; person; organizationalPerson; user; 
	 1> objectGUID: 814226ed-3414-4193-b96d-3a5ea4bf9351; 
	 1> name: User, Joe; 
>> Dn: CN=User\, Joe,OU=Migration,DC=corp,DC=company,DC=local
	 1> canonicalName: corp.company.local/Migration/User, Joe; 
	 1> cn: User, Joe; 
	 1> description: Disabled Account; 
	 1> displayName: User, Joe; 
	 1> distinguishedName: CN=User\, Joe,OU=Migration,DC=corp,DC=company,DC=local; 
	 4> objectClass: top; person; organizationalPerson; user; 
	 1> objectGUID: 514f7510-451a-4297-8129-9b4c8ab79axx; 
	 1> name: User, Joe;
次のコマンドを実行して、corp.company.local ドメイン内のサーバーの GUID を取得します。
repadmin /showreps DC-name
このコマンド内の DC-name は、corp.company.local ドメインのドメイン コントローラの名前を表します。Objects-list.txt ファイル内の GUID を、corp.company.local ドメインのドメイン コントローラの GUID に一致するように変更してください。
<GUID=c4fd9c30-b433-40a1-a862-9fdf1f804dc8> : <GUID=514f7510-451a-4297-8129-9b4c8ab79a7c>
最初の GUID は、corp.company.local ドメインのドメイン コントローラの GUID です。2 番目の GUID は、LDAP (Lightweight Directory Access Protocol) 検索で見つけた残存オブジェクトの GUID です。

Walk-servers.cmd を実行すると、今度は -2147016672 エラーなしでコマンドが正常に終了します。

これらの方法を使用してもログ ファイル内のエラーが解決できない場合には、別の問題が発生している可能性があります。さらに支援が必要な場合は、Microsoft Product Support Services にお問い合わせください。

Windows 2000 Datacenter Server 用の修正プログラムの入手方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
265173 Datacenter Program と Windows 2000 Datacenter Server
複数の修正プログラムのインストールを 1 回の再起動のみで行う方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
296861 複数の Windows 更新プログラムまたは修正プログラムを同時にインストールし、再起動を 1 回で済ませる方法
Windows 2000 と Windows 2000 の修正プログラムを同時にインストールする方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
249149 Microsoft Windows 2000 および Windows 2000 ホットフィックスのインストール

プロパティ

文書番号: 314282 - 最終更新日: 2011年5月17日 - リビジョン: 3.0
この資料は以下の製品について記述したものです。
  • Microsoft Windows 2000 Professional
  • Microsoft Windows 2000 Server
キーワード:?
kbhotfixserver kbqfe kbbug kbdirservices kbfix kbwin2000presp3fix kbwin2000sp3fix KB314282
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com