Generating a newly created Offline Address Book fails with Event ID's 9331 and 9335

There is one situation that can cause a newly created Offline Address List to fail when being generated, and this is when the root OAB folder has not been created in the Exchange information store. By default Offline Address Lists reside in two locations:

  • In the Address List Container in the domain controllers configuration partition
  • In the Exchange Information Store

NOTE: If you are running Exchange 2007 there will be a third location: -> On the file structure.

When an Offline Address List is created with the ESM (Exchange System Manager) that first place the object will be created is in the Active Directory. The creation of the root OAB folder in the Exchange Information Store does not happen at the same time. If you happen to rebuild your Offline Address List before the root OAB folder has been created in the information store you will fail with the following errors:

Event Type: Error
Event Source: MSExchangeSA
Event Category: OAL Generator
Event ID: 9331
Date: 1/20/2006
Time: 6:58:20 AM
User: N/A
Computer: <SERVER>
Description:
OALGen encountered error 80040107 (internal ID 50101df) accessing the public folder store while generating the offline address list for address list '/'.
- <OAB name>

Event Type: Error
Event Source: MSExchangeSA
Event Category: OAL Generator
Event ID: 9335
Date: 1/20/2006
Time: 6:58:20 AM
User: N/A
Computer: <SERVER>
Description:
OALGen encountered error 80040107 while cleaning the offline address list public under folders /o=organization/cn=addrlists/cn=oabs/cn=<OAB Name>. Please make sure the public folder store is mounted and replicas exist of the offline address list folders. No offline address lists have been generated. Please check the event log for more information.
- <OAB Name>

The root OAB folder gets created in the Exchange Information Store during the nightly store maintenance on the server where the OAB is being hosted. The responsibility for creating the Offline Address Book system folder is entirely separate from the process of generating the OAB data itself. OABGen.dll is responsible for generating the Offline Address Book data. It should be quiet obvious that the Offline Address Book data can not be generated until the root OAB folder and the subsequent OAB folders to hold that data actually exist.

There are two times when we have an opportunity to create this root OAB folder in the Exchange Information Store:

#1. When the “Site Folder Maintenance” process runs - This process runs once a day as part of the nightly store maintenance and when it is running it will call in to a function called EcSiteFolderCheck. EcSiteFolderCheck will do the following things when it is called:

  1. Find all of msexchAdminGroup objects for which the siteFolderServer is the current MDB.
  2. Find all msExchOAB objects for which the siteFolderServer is the current MDB.
  3. For each of the above objects, read siteFolderServer and siteFolderGUID.
  4. Verify the information against Mailbox Databases.
  5. Create a Schedule+FreeBusy folder if one doesn’t exist.
  6. Create a Default OAL folder if one doesn’t exist.
  7. Delete “bad” Offline Address List folders from the information store.

A good folder will satisfy the next two requirements:

  1. The legacyExchangeDN on the Active Directory object is the same as the displayName on the folder.
  2. The siteFolderGUID on the Active Directory object will map (via replID table) to the replID part of the folder’s FID (FID = Folder ID).

I must warning you that there is a limited window of opportunity for the Exchange Information Store to perform this maintenance, and sometimes some other process may take up the whole window before this gets a chance to run. This can some times become a problem when it comes to creating that root OAB folder. The Exchange Information Store's online defragmentation process is supposed to run after all the other maintenance tasks have run. Each task won’t run unless it’s been at least 24 hours since the last time it ran. So now that you know this you know that it’s possible that the OAB root folder may go uncreated for much more than 24 hours.

For more information on the Exchange information stores maintenance tasks, please see Jeremy Kelly's blog: Store Background Processes Part I - IS Maintenance

#2. Dismounting/Remounting the MAPI public folder information store - During the mounting process of the MAPI public store we run the “Site Folder Maintenance” task right then and there. It is not necessary to cycle the information store service.

When you are troubleshooting a problem like this you can turn up the MSExchangeIS diagnostic logging. You want to look for the Event ID 3043 which would indicate any site-folder maintenance errors.

Dave