OpsMgr 2007: DataAccessLayer Event ID 33333 with "should not generate data about this managed object"

Here's another issue that seems to get a bit of traffic so I thought I'd give you all a heads up just in case you run across it:  

========

Problem:

In System Center Operations Manager 2007, a management server repeatedly logs events that are similar to the following:

Event Type: Warning
Event Source: DataAccessLayer
Event Category: None
Event ID: 33333
Date:
Time:
User: N/A
Computer: SERVERNAME
Description:
Data Access Layer rejected retry on SqlError:
Request: p_ManagedEntityInsert
Class: 16
Number: 777980008
Message: Health service ( A3CD389E-0C17-C2DA-3587-F1F262188B36 ) should not
generate data about this managed object ( D774F816-742B-09AF-1D3E-1DA59D9DD1BD ).

Event Type:    Error
Event Source:    Health Service Modules
Event Category:    None
Event ID:    10801
Date:     
Time:       
User:        N/A
Computer:    SERVERNAME
Description: Discovery data couldn't be insert to the database. This could have happened because  of one of the following reasons:

     - Discovery data is stale. The discovery data is generated by an MP recently deleted.
     - Database connectivity problems or database running out of space.
     - Discovery data received is not valid.
The following details should help to further diagnose:
Health service ( A3CD389E-0C17-C2DA-3587-F1F262188B36 ) should not generate data about this managed object ( D774F816-742B-09AF-1D3E-1DA59D9DD1BD )..

Additionally, you may notice that topology views are not populated in the Active Directory, Cluster or Exchange management packs.

Cause:

The DataAccessLayer 33333 event with the "should not generate data about this managed object" message can occur when the agent proxy option is not enabled for domain controllers, cluster nodes or Exchange servers.

Resolution:

You must enable this setting to allow the Active Directory, Cluster and Exchange management packs to generate topology.

From the Active Directory MP Guide:

Enable the Agency Proxy Setting on All Domain Controllers

Enabling the Agency Proxy allows each domain controller to discover its connection object between other domain controllers. Connection objects are hosted by the forest, and the forest is discovered by the topology discovery, which is run on the Operations Manager 2007 principal Management Server.

Note: If you do not want to change this security setting, or if you do not need to discover connection objects, disable the AD Remote Topology discovery rule by using an override.

To enable the Agency Proxy setting on all domain controllers

1. Open the Operations Console and click the Administration button.
2. In the Administration pane, click Agent Managed.
3. Double-click a domain controller in the list.
4. Click the Security tab.
5. Select Allow this agent to act as a proxy and discover managed objects on other computers.
6. Repeat steps 3 through 5 for each domain controller.

==========================================================================================================================

From the Exchange MP Guide:

How to Enable the Exchange Topology View

To enable the Exchange Topology view, do the following:

1. Enable the agent proxy on all managed servers running Exchange Server 2003. For more information about the agent proxy, see the "How to Configure an Operations Manager 2007 Agent-Managed Computer as a Proxy for Agentless Managed Computers" topic in the Operations Manager 2007 Help.

2. Use overrides to enable Exchange Topology Discovery on a managed server running Exchange Server 2003. Exchange Topology Discovery will update after the next discovery interval, up to one hour, or you can stop and start the Operations Manager 2007 HealthService on the server running Exchange.

========

IMPORTANT: You must restart the OpsMgr Health Service before the new agent proxy setting takes affect.

More Information:

If the number of agents in the environment makes manually enabling agent proxy impractical, you can use the following PowerShell script:

param ($serverName,$groupDisplayName)
add-pssnapin "Microsoft.EnterpriseManagement.OperationsManager.Client";
set-location "OperationsManagerMonitoring::";
new-managementGroupConnection -ConnectionString:$serverName;
set-location $serverName;
$group = get-monitoringobject | where {$_.DisplayName -eq $groupDisplayName}
$relatedMonitoringObjects = $group.GetRelatedMonitoringObjects()
foreach($monitoringObject in $relatedMonitoringObjects)
{
$agent = get-agent | where {$_.PrincipalName -eq $monitoringObject.DisplayName}
if($agent -ne $null)
{
    "Enabling proxying for " + $agent.PrincipalName
    $agent.ProxyingEnabled = $true
    $agent.ApplyChanges()
}
}

To run the script, copy and paste the above script to Notepad, save the file on the management server as C:\EnableProxying.ps1 and run it using the following syntax:

powershell C:\EnableProxying.ps1 -ServerName:localhost -groupDisplayName:'AD Domain Controller Group (Windows 2003 Server)'

The above command will enable agent proxy on the local management server for all agents that are members of the computer group with display name 'AD Domain Controller Group (Windows 2003 Server)'. To run this script against a different computer group, change the computer group display name in the -groupDisplayName parameter.

Note: I did virtually no real testing so if it causes you any grief don't blame me. I'm probably also obligated to state that this is not a Microsoft sanctioned script and as such Microsoft makes no warranties or guarantee's, nor does Microsoft support the use of this script in any way.  

This is more of a 'use at your own risk' type of thing but hopefully you'll find it useful.

Hope this helps!

Michael Sadoff | Support Escalation Engineer