Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ALTER AUTHORIZATION ON DATABASE::MyDB TO sa и AlwaysOn  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 624
Добрый день!

Есть следующая конфигурация:
Два сервера Node1 и Node2
SELECT @@VERSION

Microsoft SQL Server 2016 (SP1-CU6) (KB4037354) - 13.0.4457.0 (X64)   Nov  8 2017 17:32:23   
Copyright (c) Microsoft Corporation  Enterprise Evaluation Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor) 

Настроен AlwaysOn: Node1 - primary, Node2 - secondary
Настроена маршрутизация для использования Node2 как ReadOnly

Проблема:
При кроссбазовом запросе, где данные берутся из баз MyDB1 и MyDB2 получаем ошибку
"Идентификатор безопасности владельца базы данных, записанный в базе данных master, отличается от идентификатора безопасности владельца базы данных, записанного в базе данных "MyDB1". Устраните это различие, сбросив владельца базы данных "MyDB1" с помощью инструкции ALTER AUTHORIZATION."

При попытке выполнить инструкцию ALTER AUTHORIZATION ON DATABASE::MyDB1 TO sa получаем логичную ошибку "Не удалось обновить базу данных "Online", так как она предназначена только для чтения."

Запросы, которые используют только данные из MyDB1 выполняются без проблем.

Видимые пути решения проблемы:
1. Удалить маршрутизацию, запустить на Node2 инструкцию ALTER AUTHORIZATION ON DATABASE::MyDB1 TO sa, вернуть маршрутизацию.
2. Убрать базу MyDB1 из AlwaysOn, запустить на Node2 инструкцию ALTER AUTHORIZATION ON DATABASE::MyDB1 TO sa, вернуть базу в AlwaysOn.
3. Переехать на Node2, , запустить на Node2 инструкцию ALTER AUTHORIZATION ON DATABASE::MyDB1 TO sa, переехать обратно на Node1.

Все решения не очень желаемые, потому что это всё настроено в бою, боевые запросы уже идут на вторую ноду, переводить их на первую долго и хлопотно.
Есть ли какие-то другие варианты?
Если нет, то какой из моих вариантов сработает с большей вероятностью?
Может кто-то сталкивался с такой же проблемой?
9 фев 18, 17:13    [21180856]     Ответить | Цитировать Сообщить модератору
 Re: ALTER AUTHORIZATION ON DATABASE::MyDB TO sa и AlwaysOn  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36696
1. При чем здесь маршрутизация? От этого база на вторичной ноде не станет доступной для alter.
2. База на вторичной ноде будет в restoring и никакой alter вы ей не сделаете.
3. failover сделайте и пломеняйте.

Если не хотите проблем в будущем, делайте рестор на вторичной ноде под логином, который должен быть владельцем базы. Хотя trustworthy все равно слетит.

Oblom
Все решения не очень желаемые, потому что это всё настроено в бою, боевые запросы уже идут на вторую ноду, переводить их на первую долго и хлопотно.
Если они направлены туда через ApplicationIntent=ReadOnly, то все они пойдут автоматом (ну, почти) на первичную, если вторичные будут недоступны. Если сделано как-то по-другому, то ССЗБ.

Сообщение было отредактировано: 9 фев 18, 17:24
9 фев 18, 17:21    [21180876]     Ответить | Цитировать Сообщить модератору
 Re: ALTER AUTHORIZATION ON DATABASE::MyDB TO sa и AlwaysOn  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 624
Гавриленко Сергей Алексеевич
1. При чем здесь маршрутизация? От этого база на вторичной ноде не станет доступной для alter.
2. База на вторичной ноде будет в restoring и никакой alter вы ей не сделаете.
3. failover сделайте и пломеняйте.

Если не хотите проблем в будущем, делайте рестор на вторичной ноде под логином, который должен быть владельцем базы. Хотя trustworthy все равно слетит.

Спасибо за развернутый ответ, значит будем переезжать.

Гавриленко Сергей Алексеевич
Oblom
Все решения не очень желаемые, потому что это всё настроено в бою, боевые запросы уже идут на вторую ноду, переводить их на первую долго и хлопотно.
Если они направлены туда через ApplicationIntent=ReadOnly, то все они пойдут автоматом (ну, почти) на первичную, если вторичные будут недоступны. Если сделано как-то по-другому, то ССЗБ.

А это хорошая новость, сделано да через ApplicationIntent=ReadOnly
9 фев 18, 17:43    [21180924]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить