Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 корректный запрос, учитывающий доступность базы в зеркалировании  [new]
temp-for-testing
Member

Откуда:
Сообщений: 384
Добрый день.

Подскажите, как можно корректно обработать следующую ситуацию. Есть два сервера, есть база, настроено зеркалирование. Есть определенный джоб, который должен отработать на базе. И нужно этот джоб поставить на обоих серверах, но сделать так, чтобы он запускался только на принципале (не хочу, чтобы были ошибки из-за недоступности базы на зеркале). Т.е. запускаются джобы на обоих серверах, в них проверка доступности базы и в случае выполнения проверки запуск основного блока джоба.
Сначала решил сделать проверку вида
if exists(select * from sys.databases where name = 'MyDBName' and state = 0)
begin
    // do my job
end

Но в тексте запроса необходимо либо переключать контекст на нужную базу (use MyDBName), либо обращаться к обьектам напрямую с указанием базы (select * from MyDBName.dbo.MyTable). И при попытке запустить такой запрос сервер сразу генерирует сообщение об ошибке ("The database "MyDBName" cannot be opened. It is acting as a mirror database."), что и понятно - при запуске запроса сервер пытается составить план и не может получить доступ к базе.
Как корректнее всего делать такую обработку? Динамический sql, еще один джоб или может есть еще какие-то способы?
29 дек 12, 12:06    [13704888]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить