Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Job + Availability Groups  [new]
Acce_Ekb
Member

Откуда: Екатеринбург
Сообщений: 87
Добрый день,

правильно ли я понимаю, что для предотвращения ошибок job на secondary replica достаточно в код шагов job-а добавить следующую инструкцию:

if ( DATABASEPROPERTYEX( DB_NAME(), 'Updateability' ) = 'READ_ONLY' ) 
  -- выход
  -- ..
-- иначе выполнение шага
  -- ..


В http://dba.stackexchange.com/questions/45137/sql-server-agent-jobs-and-availability-groups такой вариант предлагается среди прочих. Мне он нравится больше, чем вариант с проверками sys.availability_groups (см. по ссылке), т.к. не нужно знать имя группы.
10 ноя 16, 14:16    [19879257]     Ответить | Цитировать Сообщить модератору
 Re: Job + Availability Groups  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
И этот код всегда возвращает корректное значение вне зависимости от того, включено ли Readable Secondary?
10 ноя 16, 14:25    [19879314]     Ответить | Цитировать Сообщить модератору
 Re: Job + Availability Groups  [new]
Acce_Ekb
Member

Откуда: Екатеринбург
Сообщений: 87
Гавриленко Сергей Алексеевич,

Можно без намеков, можно прямо говорить, что не верно.
Мне вот именно для этой задачи хочется получить быстрый рецепт, а не погружение в тему. Я понимаю, что здесь этого не любят, но иногда вижу ответы и на более тупые вопросы.

Продолжаю изучать документацию:
A readable secondary replica allows read-only access to all its secondary databases. However, readable secondary databases are not set to read-only. They are dynamic.


То есть, исходное предположение неверное.

Буду использовать более сложную проверку, пример из первой ссылки:
CREATE FUNCTION [dbo].[svf_DbReplicaState](@database_name sysname)
RETURNS bit
AS
BEGIN

IF EXISTS(
    SELECT        adc.database_name
    FROM            sys.dm_hadr_availability_replica_states AS ars INNER JOIN
                             sys.availability_databases_cluster AS adc ON ars.group_id = adc.group_id
    WHERE        (ars.is_local = 1) AND (ars.role_desc = 'PRIMARY') AND (adc.database_name = @database_name))

    RETURN 1
RETURN 0
END
10 ноя 16, 14:47    [19879450]     Ответить | Цитировать Сообщить модератору
 Re: Job + Availability Groups  [new]
o-o
Guest
товарищи, у которых есть это alwayson,
подтвердите, так или нет определяется, что это primary replica для данного @db_id?
у меня проверить не на чем, из справки вроде так должно быть?
if exists 
	(select *
	from sys.dm_hadr_database_replica_states
	where database_id = @db_id
		  and is_primary_replica = 1)
print 'primary replica'      
10 ноя 16, 17:58    [19880420]     Ответить | Цитировать Сообщить модератору
 Re: Job + Availability Groups  [new]
o-o
Guest
да даже 2014-ый экспресс знает.
вот текст встроенной функции:

CREATE function sys.fn_hadr_is_primary_replica(
    @database_name sysname )
returns bit
as
begin
     declare @is_primary bit
	 
     SELECT @is_primary = is_primary_replica 
     FROM sys.dm_hadr_database_replica_states 
     WHERE database_id = DB_ID(@database_name) 
          and is_local = 1
	 
     return @is_primary
end

у меня правильный ход мысли.
а если верить хэлпу,
что secondary replica про primary в sys.dm_hadr_database_replica_states строк не возвращает,
то у меня то же самое и написано, т.к. тогда не надо на проверять is_local = 1
10 ноя 16, 18:23    [19880488]     Ответить | Цитировать Сообщить модератору
 Re: Job + Availability Groups  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Btw, в 2012 в sys.dm_hadr_database_replica_states нет флага is_primary_replica.
10 ноя 16, 18:25    [19880492]     Ответить | Цитировать Сообщить модератору
 Re: Job + Availability Groups  [new]
o-o
Guest
Гавриленко Сергей Алексеевич
Btw, в 2012 в sys.dm_hadr_database_replica_states нет флага is_primary_replica.

и как тогда определить, на primary replica мы или нет?
у человека джобы не должны на secondary работать,
а под рукой alwayson нет.
а поди надо, чтоб и на 2012-ом пахало
10 ноя 16, 18:30    [19880501]     Ответить | Цитировать Сообщить модератору
 Re: Job + Availability Groups  [new]
o-o
Guest
смотрю хэлп за 2012, там и role_desc нет, ну т.е. как и ожидалось,
ни флага, ни расшифровки, а значит и этот код 19879450 пролетает
10 ноя 16, 18:38    [19880517]     Ответить | Цитировать Сообщить модератору
 Re: Job + Availability Groups  [new]
o-o
Guest
не, все ок,
это у них названия похожие, а так все есть.
в sys.dm_hadr_availability_replica_states есть role,
и это то, что надо
10 ноя 16, 18:49    [19880548]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить