Присоединение существующей базы данных к группе доступности

Я переношу некоторые существующие (динамические) SQL на C# через пространство имен SMO. Однако у меня возникли небольшие проблемы с выяснением того, как присоединиться к существующей базе данных к моей группе доступности AlwaysOn. Пространство имен SMO имеет объект базы данных и объект AvailabilityDatabase, но они кажутся несколько ортогональными... Я не вижу способа перемещаться между этими двумя концепциями. В нашей существующей реализации мы создаем базу данных, выполняем с ней некоторые операции, создаем полную резервную копию, а затем присоединяем ее к группе доступности. Я пытаюсь воссоздать этот рабочий процесс в SMO, но зависаю на этапе присоединения к группе доступности. Если я сделаю это...

AvailabilityGroup ag = new AvailabilityGroup(sqlServer, myExistingAgName);
AvailabilityDatabase agDb = new AvailabilityDatabase(ag, myExistingDbName);
agDb.JoinAvailablityGroup();

Операция завершается с ошибкой и сообщает мне, что база данных доступности еще не создана. Однако, если я сделаю это...

AvailabilityGroup ag = new AvailabilityGroup(sqlServer, myExistingAgName);
AvailabilityDatabase agDb = new AvailabilityDatabase(ag, myExistingDbName);
agDb.Create();
agDb.JoinAvailablityGroup();

Операция завершается с ошибкой и сообщает мне, что создание базы данных доступности не удалось. Хотя в сообщении об ошибке это явно не указано, я предполагаю, что причиной сбоя было то, что БД с именем myExistingDbName уже существует, что и ожидалось. Я уверен, что мне просто не хватает здесь чего-то фундаментального, но документация MSDN не очень иллюстративна, и мне не повезло найти какие-либо учебные пособия/примеры такого рода вещей в Интернете.


person Dan Forbes    schedule 12.01.2015    source источник


Ответы (1)


Чтобы добавить базу данных в группу доступности на основном сервере, я использовал следующее...

// note that the Availability Group is instantiated differently than above
AvailabilityGroup ag = sqlServer.AvailabilityGroups[availabilityGroup];
AvailabilityDatabase agDb = new AvailabilityDatabase(ag, database);
agDb.Create();

После восстановления базы данных на вторичном(ых) сервере(ах), вот что я использовал для присоединения к группе доступности...

AvailabilityGroup ag = sqlServer.AvailabilityGroups[availabilityGroup];
ag.AvailabilityDatabases[database].JoinAvailablityGroup();
person Dan Forbes    schedule 12.01.2015