Перейти к содержимому

Как в always on mssql синхронизировать JOB на вторичной реплики и удалять JOB со вторичной когда удалили на первичной.

задача с primary always on копировать JOB на secondary  реплику.

Set-DbatoolsInsecureConnection -SessionOnly
$StartTime = (Get-Date)

# Скрипт проверяет джобы и копирует их на вторичные реплики, если их там нет по имени.
$AGLSN = 'shr-db01'
 
$primaryReplica = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Primary
$secondaryReplicas = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Secondary

# Получение списка джобов на первичной реплике, исключая указанные системные задания
$JobsOnPrimary = Get-DbaAgentJob -SqlInstance $primaryReplica.Name -ExcludeJob 'syspolicy_purge_history', 'AlwaysOn_Latency_Data_Collection', 'dba_Monitoring_Long_Query_Execution', 'sp_WhoIsActive'

# Обработка каждой вторичной реплики
$secondaryReplicas | ForEach-Object {
    
    $JobsOnSecondary = Get-DbaAgentJob -SqlInstance $_.Name -ExcludeJob 'syspolicy_purge_history', 'AlwaysOn_Latency_Data_Collection', 'dba_Monitoring_Long_Query_Execution', 'sp_WhoIsActive'

    
    # Найдем джобы, которые есть на первичной, но отсутствуют на вторичной реплике
    $diffToAdd = $JobsOnPrimary | Where-Object Name -notin ($JobsOnSecondary.Name)
    
    # Найдем джобы, которые есть на вторичной реплике, но отсутствуют на первичной (для удаления)
    $diffToRemove = $JobsOnSecondary | Where-Object Name -notin ($JobsOnPrimary.Name)
    
    # Копируем недостающие джобы на вторичную реплику
    if($diffToAdd) {
    $diffToAdd | ft
        Copy-DbaAgentJob -Source $primaryReplica.Name -Destination $_.Name -Job $diffToAdd.Name -DisableOnDestination -force |` 
        Select-Object DateTime, Type, DestinationServer, name, status, Notes |` 
        Format-Table -Property * -AutoSize |` 
        Out-String -Width 1024 |` 
        Out-File D:\DBA_scripts_AG\DBA_synchronize_AG_log.txt -Append
    }
    
    # Удаляем джобы, которых нет на первичной реплике
    if($diffToRemove)  {
    $diffToRemove | ft
        $diffToRemove | ForEach-Object {

            Remove-DbaAgentJob -SqlInstance $_.ComputerName -Job $_.Name -Confirm:$false  |` 
            Format-Table -Property * -AutoSize |` 
            Out-String -Width 1024 |` 
            Out-File D:\DBA_scripts_AG\DBA_synchronize_AG_log.txt -Append
        }
    }
}

$EndTime = (Get-Date)
$TotalTime = $EndTime - $StartTime
$TotalTime.ToString()

 

 

Как в always on mssql синхронизировать JOB на вторичной реплики и удалять JOB со вторичной когда удалили на первичной.

Similar Posts:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика