powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выполнение джобов на вторичных репликах AlwaysOn
14 сообщений из 14, страница 1 из 1
Выполнение джобов на вторичных репликах AlwaysOn
    #40043738
Mr. X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тема не раз поднималась, но не раскрыта полностью, на мой взгляд.

Например, выполнение на первичной реплике кода

IF sys.fn_hadr_is_primary_replica (N'AdventureWorks2012') = 1
BEGIN
DECLARE @dt datetime;
SET @dt = GETDATE();
EXEC [AdventureWorks2012].[dbo].[sp_Proc] @dt
END

проходит без ошибок, а на вторичной можно увидеть ошибку:

Msg 976, Level 14, State 1, Line 7
The target database, 'AdventureWorks2012', is participating in an availability group and is currently not accessible for queries. Either data movement is suspended or the availability replica is not enabled for read access. To allow read-only access to this and other databases in the availability group, enable read access to one or more secondary availability replicas in the group. For more information, see the ALTER AVAILABILITY GROUP statement in SQL Server Books Online.

Вопрос касается только редакции Standard.

В базе (можно в пустой) в AG нужно создать процедуру

USE [AdventureWorks2012]
GO

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_Proc] @dt datetime
AS
BEGIN
SET NOCOUNT ON;

SELECT DATEADD(hh, 1, @dt);
END
GO

USE master
GO

Решение в виде динамики для этого не вариант, на мой взгляд. А есть ли другие решения ?

Если закомментировать параметр у процедуры, то работает без ошибок на всех репликах:

IF sys.fn_hadr_is_primary_replica (N'AdventureWorks2012') = 1
BEGIN
DECLARE @dt datetime;
SET @dt = GETDATE();
EXEC [AdventureWorks2012].[dbo].[sp_Proc] --@dt
END

...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043744
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. X,

а select @@version ?

у меня на вторичке (readonly) процедуры с параметрами проблем не имеют при использовании проверки через sys.fn_hadr_is_primary_replica

попробуйте проверять через dmv sys.dm_hadr_database_replica_states
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043784
Mr. X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

Напомню: Вопрос касается только редакции Standard .
Версия: Microsoft SQL Server 2016 (SP2-CU15) (KB4577775) - 13.0.5850.14 (X64) Sep 17 2020 22:12:45 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)

Аналогичная проблема и на других версиях. Даже на Microsoft SQL Server 2005 - 9.00.5266.00 (X64) Mar 17 2011 15:18:02 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1) - знаю что для нее нет AlwaysOn :). Тут Mirroring ведет себя аналогичным образом.

sys.dm_hadr_database_replica_states - пробовал, результат тот же.
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043819
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. X,

Вы хотите сказать, что sys.fn_hadr_is_primary_replica (N'AdventureWorks2012') в стандартной редакции возвращает некорректный результат или это проблема компиляции?
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043872
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Mr. X,

Вы хотите сказать, что sys.fn_hadr_is_primary_replica (N'AdventureWorks2012') в стандартной редакции возвращает некорректный результат или это проблема компиляции?


ReadOnly реплика, емнип, энтерпрайз фича.
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043873
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. X,

Сделайте первый шаг джоба в бд мастер.
Внутри проверку на праймари реплику и ошибку в случае вторички.
Настройти переходы из этого шага: ошибка - завершить джоб без ошибки, не ошибки - переход на следующий шаг.
Во втором шаге просто вызов нужной процедуры.
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043906
Mr. X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
Mr. X,

Вы хотите сказать, что sys.fn_hadr_is_primary_replica (N'AdventureWorks2012') в стандартной редакции возвращает некорректный результат или это проблема компиляции?


Функция возвращает корректный результат. Тут или на стадии компиляции или на стадии выполнения. На вторичной ноде в SSMS парсинг (Ctrl+F5) проходит успешно, а выполнение с ошибкой. В степе джоба тоже есть парсинг и он на впоричке уже дает ошибку, но сохранить можно. При выполнении однако будет ошибка.
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043908
Mr. X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex
Mr. X,

Сделайте первый шаг джоба в бд мастер.
Внутри проверку на праймари реплику и ошибку в случае вторички.
Настройти переходы из этого шага: ошибка - завершить джоб без ошибки, не ошибки - переход на следующий шаг.
Во втором шаге просто вызов нужной процедуры.


Да это решение лучше динамики и я в общем то к нему и склоняюсь, но надеюсь что есть более элегантное решение.
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043945
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
Mr. X,

Сделайте первый шаг джоба в бд мастер.
Внутри проверку на праймари реплику и ошибку в случае вторички.
Настройти переходы из этого шага: ошибка - завершить джоб без ошибки, не ошибки - переход на следующий шаг.
Во втором шаге просто вызов нужной процедуры.


А как будете реагировать, если это первичная реплика, но из-за внешних причин (например, кластер дурит), реплика находится в промежуточном состоянии?
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043963
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гладченко,

что означает "в промежуточном состоянии"? Существует состояние, при котором возможна потеря данных?
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043966
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гладченко
msLex
Mr. X,

Сделайте первый шаг джоба в бд мастер.
Внутри проверку на праймари реплику и ошибку в случае вторички.
Настройти переходы из этого шага: ошибка - завершить джоб без ошибки, не ошибки - переход на следующий шаг.
Во втором шаге просто вызов нужной процедуры.


А как будете реагировать, если это первичная реплика, но из-за внешних причин (например, кластер дурит), реплика находится в промежуточном состоянии?

Ну так информация об этом состоянии в любом случае есть.
В зависимости от потребностей, которые заложен в джоб, и принимать решение.
Если это обработка данных в базе, то смысла ее запускать при "дурящем" кластере нет.
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40043967
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Александр Гладченко,

что означает "в промежуточном состоянии"? Существует состояние, при котором возможна потеря данных?



Всякие резолвинг на всех нодах и тому подобное.
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40044110
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

но в этом случае джобы приостановятся, верно? Поскольку первичная реплика ещё не будет выбрана.
...
Рейтинг: 0 / 0
Выполнение джобов на вторичных репликах AlwaysOn
    #40044113
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
msLex,

но в этом случае джобы приостановятся, верно? Поскольку первичная реплика ещё не будет выбрана.



Те джобы, которые уже перешли к этому моменту на второй шаг, и которым не требуется доступ к БД будут продолжать работать.
Те, что работают с БД, зафейлятся, и не будут запускаться (не будут переходить на второй шаг) до момента выбора первичной реплики.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выполнение джобов на вторичных репликах AlwaysOn
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]