Exchange 2010 : OABGen Issues – PublicFolderDatabase

Exchange 2010 : OABGen Issues – PublicFolderDatabase

I came across an issue recently with an Exchange 2010 migration (same Organisation/Forest) where the OAB was not updating. On further investigation I identified that the following events were being logged on the mailbox database servers which were the home mailbox database servers for the affected users:

Log Name:      Application

Source:        MSExchangeSA


OABGen encountered error 80040111 while cleaning the offline address list public folders under /o=ORGNAME/cn=addrlists/cn=oabs/cn=OABNAME.  Please make sure the public folder database 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.


Using the command Get-OfflineAddressBook | select-object name,PublicFolderDatabase it was possible to identify that the PublicFolderDatabase that the OAB was set to publish to was incorrect.

Unforunately there is not an Esxchange Shell command to change this, you must use ADSIedit. Using ADSIedit browse to the following location, changing the items in bold to match your environment:

“CN=OABName,CN=Offline Address Lists,CN=Address Lists Container,CN=ORGNAME,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=DOMAIN,DC=LOCAL

Right-click this object and select properties. We’re interested in the siteFolderServer attribute – you’ll probably find this is incorrectly set if you’re getting the error above.

Next use the Exchange Shell to get the DN of a Public Folder Database in the same site; get-publicfolderdatabase | select-object DistinguishedName | fl

Copy the DN of the Public Folder Database into the siteServerName attribute of the failed OAB.

Update: 29/09/2011 – You should also confirm the replication scope of the OAB Public Folder mentioned in the error.  

You then have to restart the Exchange information Store service on the affected servers – of course this will interrupt mailbox database connectivity so if you have a DAG then I would suggest you perform failovers to minimise impact – if not then this may be an out of hours change!

Once completed run the Exchange Shell command from above to confirm that the PublicFolderDatabase setting is correct; Get-OfflineAddressBook | select-object name,PublicFolderDatabase

You can also perform an update of the OAB (update-offlineaddressbookname“) and then download it in a cached mode client to confirm functionality.

Exchange 2010 : View Transport Server Queue

Exchange 2010 : View Transport Server Queue

Use the following Exchange Shell command to view the current queue o all transport servers:

get-transportserver | get-queue

This can be limited to a subset of servers using the query below. This method of changing the scope of the command relies on you servers having a similar name, in this case all servers start “UK” :

get-transportserver “UK*” | get-queue

Exchange 2010 : View Mailbox Database Size

Exchange 2010 : View Mailbox Database Size

Use the following Exchnage Shell command to view the size of ALL Mailbox Databases within your Exchange Organisation.

Get-MailboxDatabase -Status | select ServerName,Name,DatabaseSize

You can limit this to particular Databases using the command below, this will return sizing information on Mailbox Databases which have a name starting with “UK” – this could be modified to FR for example if all of your Mailbox Databases in France started with “FR” :

Get-MailboxDatabase “UK*”  -Status | select ServerName,Name,DatabaseSize

ESX 4.X : Increased RAM use on Intel EPT Enabled Processors


Why does memory utilisation appear higher on ESX 4.X when using Intel EPT Enabled Processors?


There is an simple reason why memory usage on your ESX 4.X boxes looks higher than on 3.5; ESX3.5 doesn’t support Intel EPT for HW MMU this is why you’ve not seen this in ESX 3.5. Had you been running AMD RVI capable processors you’d have encountered this with an upgrade from 3.0 to  3.5; ESX 4 was the first ESX platform to support Intel EPT;


Interpretation of esxtop counters is key here, counters we’re interested in:

·         “GRANT” (the amount of physical memory granted to a VM/pool)

·         “SHRD” (the shared portion of  “GRANT”.)

·         “SHRDSVD” (estimated saving due to TPS)

·         “COWH” (indication of memory which can be reclaimed by TPS)


When using Intel EPT –  – (or AMD RVI) and where a VM supports HWMMU the ESX kernel will use 2MB pages instead of 4KB pages. On these VM’s you will see low values for SHRD/SHRDSVD.


HWMMU is supported on all versions of Windows from 2003 onwards; it is also the default setting for VM’s running these operating systems on hardware that supports Intel EPT;



How can we interpret memory usage on ESX 4.X when using HWMMU?


Using esxtop you will find that Linux based VM’s will have high values for SHRD/SHRDSVD, this is because they do NOT use Intel EPT and therefore do not use HWMMU. As MMU is virtualised (software) small pages are used which play nicely with TPS. Windows 2003+ VM’s will use HWMMU and therefore will use large pages.


You can check the HWMMU status of a VM by checking the vmware.log and looking for “HV Settings” –look at the value for “virtual mmu” if ‘software’ the VM is not using HWMMU (Intel EPT) if ‘hardware’ it is.


Large Page support can be disabled (therefore forcing TPS to work regardless of contention), but there is a CPU performance impact (not massive to be fair but mileage may vary on this). At the end of the day TPS will kick in a claim back memory (significant amounts – at 94% used.


I hope this makes sense and sheds some light on why the ESX 4 boxes appear to be using more RAM.

Exchange 2003 : Manual Log File Cleanup

Exchange 2003 : Manual Log File Cleanup

1) Stop Affected Databases
2) Check Database State;
             Execute: eseutil /MH “<filename>.edb”
             Execute: eseutil /MH “<filename>.stm”

 Check Value of ‘State’ for both – should be Clean Shutdown or Consistent state

 Check Value of ‘ Log Required’ if 0-0 then no logs are required to start the DB,
 otherwise it will tell you the log range required to start the DB.

You can safely remove all the numbered log files that are less than the lowest entry in any Log Required field for any database in the storage group. Remember to move, not delete, the log files. Remember, the most recent logfile will be the prefix, i.e. E00.log as a result the last log in ‘Log Required’ may not exist.

NAPP : iSCSi Initiator and Snap Server Replacement

NAPP : iSCSi Initiator and Snap Server Replacement


Snap Server can have IP address set to by holding down the reset button whilst powering on.


Once configured ensure GuardianOS is upgraded to the most recent entitlement.


To reconfigure the backup server (normally

  1. Load Microsoft iSCSI initiator
  2. Remove all iScsi Targets under Persistent Targets
  3. Go to Targets > Refresh
  4. Highlight the new Target > Logon > Tick Automatically Restore This Connection
  5. Under Disk Management Partition & Format the drive:
      500GB Drive I:\ ‘Daily Backups’
      Remaining Drive W:\ ‘Weekly Backups’
  6. Verify the Backup Software paths are correct for the Backup to Disk targets.

Exchange 2010 : Export-Csv EmailAddressPolicies by Priority

Exchange 2010 : Export-Csv EmailAddressPolicies by Priority

Use the following Exchange Shell command to export EmailAddressPolicy information, yes this is a large command in order to join all of the multi-string values together:

{code lang:xml showtitle:false lines:false hidden:true}Get-EmailAddressPoicy | select-object name,priority,RecipientFilter,RecipientFilterType,IncludedRecipients,EnabledPrimarySMTPAddressTemplate,Enabled,@{name=’ConditionalDepartment’;Expression={[STRING]::JOIN(";",($_.ConditionalDepartment))}},@{name=’ConditionalCompany’;Expression={[STRING]::JOIN(";",($_.ConditionalCompany))}},@{name=’ConditionalStateOrProvince’;Expression={[STRING]::JOIN(";",($_.ConditionalStateOrProvince))}},@{name=’ConditionalCustomAttribute1′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute1))}},@{name=’ConditionalCustomAttribute2′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute2))}},@{name=’ConditionalCustomAttribute3′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute3))}},@{name=’ConditionalCustomAttribute4′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute4))}},@{name=’ConditionalCustomAttribute5′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute5))}},@{name=’ConditionalCustomAttribute6′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute6))}},@{name=’ConditionalCustomAttribute7′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute7))}},@{name=’Conditio,alCustomAttribute8′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute8))}},@{name=’ConditionalCustomAttribute9′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute9))}},@{name=’ConditionalCustomAttribute10′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute10))}},@{name=’ConditionalCustomAttribute11′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute11))}},@{name=’ConditionalCustomAttribute12′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute12))}},@{name=’ConditionalCustomAttribute13′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute13))}},@{name=’ConditionalCustomAttribute14′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute14))}},@{name=’ConditionalCustomAttribute15′;Expression={[STRING]::JOIN(";",($_.ConditionalCustomAttribute15))}},@{name=’RecipientContainer’;Expression={[STRING]::JOIN(";",($_.RecipientContainer))}},@{name=’ObjectClass’;Expression={[STRING]::JOIN(";",($_.ObjectClass))}},@{name=’NonAuthoritativeDomains’;Expression={[STRING]::JOIN(";",($_.NonAuthoritativeDomains))} } | sort-object priority | export-csv C:\export.csv{/code}</p>'</p>’