Skip to content

Commit

Permalink
Добавлены скрипты по репликации AlwaysOn
Browse files Browse the repository at this point in the history
- Приостановка репликации для всех реплик на вторичном сервере
- Возобновление репликации для всех реплик на вторичном сервере, у которых статус "Не синхронизируется"
- Небольшие правки в документации к сервисной базе
  • Loading branch information
YPermitin committed Sep 13, 2023
1 parent 9f06ca4 commit e17c3a2
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
Возобновление остановленной ранее репликации для всех баз реплик на сервере в случаях:
* Статус "Не синхронизируется"
* У реплики имеются ранее принятые транзакции. Необходимо проверять, т.к. у реплик
в распределенных групп доступности статус "Синхронизировано" как у первичных баз.
Используется на вторичном сервере с репликами.
*/

DECLARE @databaseName sysname,
@sql nvarchar(max);

DECLARE replicas_cursor CURSOR FOR
SELECT
adc.database_name
FROM sys.dm_hadr_database_replica_states AS dhdrs
INNER JOIN sys.availability_databases_cluster AS adc
ON dhdrs.group_id = adc.group_id AND
dhdrs.group_database_id = adc.group_database_id
INNER JOIN sys.availability_groups AS ag
ON ag.group_id = dhdrs.group_id
INNER JOIN sys.availability_replicas AS ar
ON dhdrs.group_id = ar.group_id AND
dhdrs.replica_id = ar.replica_id
WHERE 1 = 1
AND dhdrs.synchronization_state_desc IN (
'NOT SYNCHRONIZING' -- База не синхронизируется
)
-- У реплик должно быть заполнено поле last_received_lsn
AND dhdrs.last_received_lsn is not null;
OPEN replicas_cursor;

FETCH NEXT FROM replicas_cursor INTO @databaseName;

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @databaseName;

SET @sql = '
USE [master];
ALTER DATABASE [' + @databaseName + '] SET HADR RESUME;'

EXEC sp_executesql @sql

FETCH NEXT FROM replicas_cursor INTO @databaseName;
END
CLOSE replicas_cursor;
DEALLOCATE replicas_cursor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
Остановка репликации для всех баз реплик на сервере в случаях:
* Статус "Синхронизируется" или "Синхронизировано"
* У реплики имеются ранее принятые транзакции. Необходимо проверять, т.к. у реплик
в распределенных групп доступности статус "Синхронизировано" как у первичных баз.
Используется на вторичном сервере с репликами.
*/

DECLARE @databaseName sysname,
@sql nvarchar(max);

DECLARE replicas_cursor CURSOR FOR
SELECT
adc.database_name
FROM sys.dm_hadr_database_replica_states AS dhdrs
INNER JOIN sys.availability_databases_cluster AS adc
ON dhdrs.group_id = adc.group_id AND
dhdrs.group_database_id = adc.group_database_id
INNER JOIN sys.availability_groups AS ag
ON ag.group_id = dhdrs.group_id
INNER JOIN sys.availability_replicas AS ar
ON dhdrs.group_id = ar.group_id AND
dhdrs.replica_id = ar.replica_id
WHERE 1 = 1
AND dhdrs.synchronization_state_desc IN (
'SYNCHRONIZING', -- Состояние "Синхронизируется", для обычных групп доступности
'SYNCHRONIZED' -- Состояние "Синхронизировано", для распределенных групп доступности
)
-- У реплик должно быть заполнено поле last_received_lsn
AND dhdrs.last_received_lsn is not null;
OPEN replicas_cursor;

FETCH NEXT FROM replicas_cursor INTO @databaseName;

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @databaseName;

SET @sql = '
USE [master];
ALTER DATABASE [' + @databaseName + '] SET HADR SUSPEND;'

EXEC sp_executesql @sql

FETCH NEXT FROM replicas_cursor INTO @databaseName;
END
CLOSE replicas_cursor;
DEALLOCATE replicas_cursor;
2 changes: 1 addition & 1 deletion SQL-Server-Maintenance/Service-Database/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -790,7 +790,7 @@ EXECUTE [dbo].[sp_ClearFiles]

```sql
DECLARE @cutoffDate datetime = DATEADD(week, -4, GETDATE());
EXECUTE [dbo].[sp_ClearFiles]
EXECUTE [SQLServerMaintenance].[dbo].[sp_ClearFiles]
-- Каталог для очистки. Обязательный параметр.
@folderPath = 'C:\Backup'
-- Расширение файлов для удаления. Обязательный параметр.
Expand Down

0 comments on commit e17c3a2

Please sign in to comment.