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

dbatools

Как сделать шаг проверки первичной реплики в задании в always on

Задача в job сделать первым шагом проверку primary сервера

$StartTime = (Get-Date)
#Добавление шага проверки в джобы
$Sql_primary = 'db01'   # Первичная реплика
 
$JobNames =  Get-DbaAgentJob -SqlInstance $Sql_primary -ExcludeJob 'syspolicy_purge_history', 'AlwaysOn_Latency_Data_Collection', 'dba_Monitoring_Long_Query_Execution', 'sp_WhoIsActive'
foreach ($JobName in $JobNames) {
 
$jobStep = @{
    SqlInstance = $Sql_primary
    Job = $JobName.Name
    StepId = 1
    StepName = "CheckAO"
    Subsystem = "TransactSql"
    Command = "--шаг в джобах для проверки аг
    IF (master.sys.fn_hadr_is_primary_replica ('beer') = 0)
    BEGIN
        EXEC msdb.dbo.sp_stop_job @job_id =  `$(ESCAPE_SQUOTE(JOBID))
    END"
    OnSuccessAction = "GoToNextStep"
    OnFailAction = "QuitWithFailure"
    Insert = $true
    #Force = $true
    }
 New-DbaAgentJobStep @jobStep
}
 
$EndTime = (Get-Date)
$TotalTime =$EndTime-$StartTime
$TotalTime.ToString()

 

Как бэкапить логины (login) и задания (JOB) mssql через dbatools

Задача настроить бэкап в папку включенных и отключённых job и login с mssql

Set-DbatoolsInsecureConnection -SessionOnly
$StartTime = (Get-Date)
$AGLSN = 'db01' #'msk-dblistener' # имя листенера группы доступности
$ExcludeJobs = ''
$ExcludeLogins = ''
$BackupPath = '\\ARC03\sql_backup$\' # В конце обязательно должен стоять "\"
$CurrDate = (Get-Date -Format 'yyyy.MM.dd.HH.mm')

$PrimaryReplica = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Primary

# Папки для хранения бэкапов
$BackupDisabledJobPath = $BackupPath + $primaryReplica.Name + '\BackupDisabledJob'  # Папка для выключенных джобов
$BackupEnabledJobPath = $BackupPath + $primaryReplica.Name + '\BackupEnabledJob'  # Папка для включённых джобов
$BackupDisabledLoginPath = $BackupPath + $primaryReplica.Name + '\BackupDisabledLogin'  # Папка для выключенных логинов
$BackupEnabledLoginPath 
Читать далее

Как синхронизировать обьекты в always on c первичной реплики на вторичную

$StartTime = (Get-Date)
#Копируем все объекты силой (-force), хорошо выполнять раз в сутки
$AGLSN = 'shr-db01'
  
$primaryReplica =    Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Primary
$secondaryReplicas = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Secondary
 
      
$secondaryReplicas | ForEach-Object {
         
 
    Copy-DbaAgentJobCategory -Source $primaryReplica.Name -Destination $_.Name -Force   | Select-Object DateTime, Type, DestinationServer, name, status, Notes | Format-Table -Property * -AutoSize | Out-String -Width 1024 | Out-File C:\DBA_scripts_AG\DBA_synchronize_AG_log.txt -Append
    Copy-DbaAgentOperator -Source $primaryReplica.Name -Destination $_.Name -Force      | Select-Object DateTime, Type, DestinationServer, name, status, Notes | Format-Table -Property * -AutoSize | Out-String -Width 1024 | Out-File C:\DBA_scripts_AG\DBA_synchronize_AG_log.txt -Append
    Copy-DbaAgentAlert -Source $primaryReplica.Name -Destination $_.Name -Force         
Читать далее

Как в 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'

    
    # Найдем джобы, которые есть на 
Читать далее

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

Задача синхронизировать копировать логины с первичной реплики на вторичную и так же удалять логины на вторичной реплики если удалили логин на первичной.

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

$AGLSN = 'db01'
 
$primaryReplica = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Primary
$secondaryReplicas = Get-DbaAgReplica -SqlInstance $AGLSN | Where-Object Role -eq Secondary
$secondaryReplicas.name
# Получение логинов на первичной реплике
$LoginsOnPrimary = Get-DbaLogin -SqlInstance $primaryReplica.Name  -ExcludeSystemLogin

# Обработка каждой вторичной реплики
$secondaryReplicas | ForEach-Object {
    
    $LoginsOnSecondary = Get-DbaLogin  -SqlInstance $_.Name -ExcludeSystemLogin
    
    # Найдем логины, которые отсутствуют на вторичной реплике, но есть на первичной
    $diffToAdd = $LoginsOnPrimary | Where-Object Name -notin ($LoginsOnSecondary.Name)
    
    # Найдем 
Читать далее
Яндекс.Метрика