|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Тема не раз поднималась, но не раскрыта полностью, на мой взгляд. Например, выполнение на первичной реплике кода 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 15:55 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Mr. X, а select @@version ? у меня на вторичке (readonly) процедуры с параметрами проблем не имеют при использовании проверки через sys.fn_hadr_is_primary_replica попробуйте проверять через dmv sys.dm_hadr_database_replica_states ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 16:07 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
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 - пробовал, результат тот же. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 18:29 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Mr. X, Вы хотите сказать, что sys.fn_hadr_is_primary_replica (N'AdventureWorks2012') в стандартной редакции возвращает некорректный результат или это проблема компиляции? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 22:01 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Владислав Колосов Mr. X, Вы хотите сказать, что sys.fn_hadr_is_primary_replica (N'AdventureWorks2012') в стандартной редакции возвращает некорректный результат или это проблема компиляции? ReadOnly реплика, емнип, энтерпрайз фича. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 07:45 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Mr. X, Сделайте первый шаг джоба в бд мастер. Внутри проверку на праймари реплику и ошибку в случае вторички. Настройти переходы из этого шага: ошибка - завершить джоб без ошибки, не ошибки - переход на следующий шаг. Во втором шаге просто вызов нужной процедуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 07:48 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Владислав Колосов Mr. X, Вы хотите сказать, что sys.fn_hadr_is_primary_replica (N'AdventureWorks2012') в стандартной редакции возвращает некорректный результат или это проблема компиляции? Функция возвращает корректный результат. Тут или на стадии компиляции или на стадии выполнения. На вторичной ноде в SSMS парсинг (Ctrl+F5) проходит успешно, а выполнение с ошибкой. В степе джоба тоже есть парсинг и он на впоричке уже дает ошибку, но сохранить можно. При выполнении однако будет ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 10:35 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
msLex Mr. X, Сделайте первый шаг джоба в бд мастер. Внутри проверку на праймари реплику и ошибку в случае вторички. Настройти переходы из этого шага: ошибка - завершить джоб без ошибки, не ошибки - переход на следующий шаг. Во втором шаге просто вызов нужной процедуры. Да это решение лучше динамики и я в общем то к нему и склоняюсь, но надеюсь что есть более элегантное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 10:44 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
msLex Mr. X, Сделайте первый шаг джоба в бд мастер. Внутри проверку на праймари реплику и ошибку в случае вторички. Настройти переходы из этого шага: ошибка - завершить джоб без ошибки, не ошибки - переход на следующий шаг. Во втором шаге просто вызов нужной процедуры. А как будете реагировать, если это первичная реплика, но из-за внешних причин (например, кластер дурит), реплика находится в промежуточном состоянии? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 12:18 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Александр Гладченко, что означает "в промежуточном состоянии"? Существует состояние, при котором возможна потеря данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 13:10 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Александр Гладченко msLex Mr. X, Сделайте первый шаг джоба в бд мастер. Внутри проверку на праймари реплику и ошибку в случае вторички. Настройти переходы из этого шага: ошибка - завершить джоб без ошибки, не ошибки - переход на следующий шаг. Во втором шаге просто вызов нужной процедуры. А как будете реагировать, если это первичная реплика, но из-за внешних причин (например, кластер дурит), реплика находится в промежуточном состоянии? Ну так информация об этом состоянии в любом случае есть. В зависимости от потребностей, которые заложен в джоб, и принимать решение. Если это обработка данных в базе, то смысла ее запускать при "дурящем" кластере нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 13:21 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Владислав Колосов Александр Гладченко, что означает "в промежуточном состоянии"? Существует состояние, при котором возможна потеря данных? Всякие резолвинг на всех нодах и тому подобное. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 13:22 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
msLex, но в этом случае джобы приостановятся, верно? Поскольку первичная реплика ещё не будет выбрана. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 17:22 |
|
Выполнение джобов на вторичных репликах AlwaysOn
|
|||
---|---|---|---|
#18+
Владислав Колосов msLex, но в этом случае джобы приостановятся, верно? Поскольку первичная реплика ещё не будет выбрана. Те джобы, которые уже перешли к этому моменту на второй шаг, и которым не требуется доступ к БД будут продолжать работать. Те, что работают с БД, зафейлятся, и не будут запускаться (не будут переходить на второй шаг) до момента выбора первичной реплики. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 17:28 |
|
|
start [/forum/topic.php?fid=46&fpage=34&tid=1685101]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
95ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 373ms |
total: | 562ms |
0 / 0 |