Archive for February, 2013
Offline seed of Exchange 2010 DB in DAG environment
Posted by Sam in DAG, Exchange 2010, Poweshell on 27 February, 2013
Adding a member server to the DAG is an easy and worthy process, as it could provide protection against server failures and for remote sites it could save on bandwidth in regard to RPC (Outlook client) traffic to mail server.
In our situation, we have a stretched cluster which extends the DAG over a microwave link. copying a database over that link could take days, or weeks especially if we are talking about several databases with over 300 GB in size. This article will take you over offline seeding, this process proved successful in our case and very effective, but in order to get a successful result each of the steps outlined below have to be covered in that order.
Steps to offline seed Exchange 2010 DB
1. Before you even start, you should stop backing up the databases. Backups could truncate your logs files and cause the database to fail at the other end if any of the logs are missing.
2. Using DISKSHADOW.EXE tool, this tool is part of Windows 2008/2008 R2. With this tool we will be able to create a read only copy of the database volume before copying it to an external or network media.
3. At the command prompt, type DISKSHADOW.EXE
4. You can query available disk shadows by running: list shadows all
5. Set the snapshot as crash consistent type : Set Context Persistent
6. Add your volume ready for a snapshot (in our case the K drive): add volume K: alias kdrive
8. To create the VSS snapshot type: create
9. To expose the snapshot as a read only, type: expose %kdrive% Z:
10. Now at that point you should be able to see a Z drive available, it will give you a read only access which allows you to copy the content to a USB drive or directly to the target if the bandwidth permits. In our case we shipped it on a USB drive to our other remote site where we loaded it onto a temp drive on the target Exchange server. After copying the database, you can remove the volume and snapshot by running the following command using the Diskshadow.exe utility:
unexpose Z:
delete shadows volume K:
11. At this point we can create another database copy by running this Exchange PS command: (Make sure to use the -seedingpostponed key)
Add-MailboxDatabaseCopy -Identity DatabaseName -MailboxServer TargetExchangeServerName –SeedingPostponed
12. Place the database .db file in its corresponding directory
13. Then run PS: Resume-MailboxDatabaseCopy “DatabaseName\TargetExchangeServerName“
Now Exchange would validate the database and copy the required and missing log files form the source Exchange server.
Dynamic Distribution Group – Excluding Security Group
It has been a while since I have posted anything on my blog, due to change of responsibilities and the new job. Now I am mainly focused on VMware and Exchange.
Most people know that Dynamic Distribution Groups are great in offering flexible and automatic management of user membership in addition to all the features offered by normal distribution groups. By the way, I won’t be detailing how to use Set-DynamicDistributionGroup cmdlet in setting a dynamic group up (please refer to powershell help by typing help Set-DynamicDistributionGroup -Examples to see some examples of how to use -RecipientFilter property).
If you image that you have all your users in one OU (which is possible) , Dynamic Distribution Group look at a specific recipient container. In some cases you want to exclude a single user from the list, now that is easy, make sure (-not(Name -like ‘name‘) is entered into your recipient filter.
Excluding one name is easy, but you don’t want to keep adding a name at a time. You could bind all of your members who you want to exclude from your dynamic group in a security group and add this line to your recipient filter (-not(MemberofGroup -eq ‘Security_Group_FQDN‘)).
Whoever is added to that Security group won’t be a member of the dynamic distribution group.
To get members of a dynamic distribution group
$group = get-DynamicDistributionGroup “Group_Name“
$members = get-recipient -RecipientPreviewFilter $group.RecipientFilter