Recently, I was tasked with making an 60TB database highly available by adding it to an availability group. The following, is how I successfully completed adding the very large database (VLDB) to an Availability Group that had two replicas in the primary data center and a third replica in another data center with no downtime. We wanted to utilize the least amount of time during the initial synchronization process so we leverage log shipping to prepare the database on each replica.
We will call the three servers DC1Server1, DC1Server2, and DC2Server3. We will have a pre-created AG called SQL2014AG1. We will say that the 60TB database is named VLDB.
Previously we did a side by side upgrade to upgrade VLDB from running on SQL Server 2012 to SQL Server 2014 on new hardware. Previously, we also leveraged the new hardware to upgrade a subset of the data and build out the Availability Group for testing and training purposes.
- Create Availability Group. This was created in advance to deliver a proof of concept and to provide training for understanding how to use and manage an Availability Group. Therefore, there was no reason to break this and recreate it. If needed, you could obviously create the AG as part of this deployment where we just Add the VLDB into the AG. Creating an Availability Group will not be covered here.
- Configure Log Shipping. The primary database in log shipping should be on the instance that is also the read/write replica for the availability group. In this case, VLDB already exists and is configured as primary on DC1Server1. This is also the primary replica for the SQL2014AG1 availability group. If you need examples on how to configure log shipping checkout my article on MSSQLTips.com.
- Identify the Log Shipping backup Job. This job usually starts with LSBackup_ for your database. This will be on DC1Server1.
- Execute the SQL Agent Job to take a log transactional log backup
- Disable the SQL Agent Job when the backup completes.
- On the secondary servers (DC1Server2 and DC2Server3) identify the LSCopy_ job for your database named VLDB.
- Execute the SQL Agent Job to copy the last log backup that you just created in step three.
- Disable the SQL Agent Job when copy backup job completes.
- On the secondary servers (DC1Server2 and DC2Server3) identify the LSRestore_ job for your database named VLDB.
- Execute the SQL Agent Job to restore the backups pending to be restored. This should include your backup taken in Step four.
- Disable the SQL Agent Job when the restore completes.
- Validate that the last log backups were copied and restored. This can be done using sp_help_log_shipping_monitor stored procedure on each instance. We would do this on DC1Server1 to validate the last log backup that was completed. On DC1Server2 and DC2Server3 we can validate that the backup was copied and also restored.
- On the primary server DC1Server1 add the VLDB to the existing availability group named SQL2014AG1. You can do this via the GUI.
- In SSMS under Availability Groups expand “SQL2014AG1” Availability Group and right click on Availability Databases and select “Add Database” to add VLDB.
- Select the “VLDB” database in the checkbox
- Select Join Only to start data synchronization as we used Log shipping to keep the VLDB in sync across all servers.
- Connect to all existing secondary servers (DC1Server2, and DC2Server3)
- Validate adding the Database to the Availability Group
- Add the Availability Group to your Availability Group named SQL2014AG1
- Validate that Adding VLDB was successful to SQL2014AG1
- Remove log shipping on DC1Server1 for the VLDB database.
- Enable your log backup process for all three servers. This would be used to replace log shipping for taking transactional log backups.