Published on

November 2, 2020

Концепции SQL Server: SSRS в группе постоянной доступности Always On

В этой статье блога мы обсудим концепцию интеграции SQL Server Reporting Services (SSRS) с группой постоянной доступности Always On (AG). Эта интеграция обеспечивает высокую доступность и функциональность SSRS в случае сбоя.

Установка SSRS

Начиная с SQL Server 2017, Microsoft приняла решение отделить SSRS от контейнера установки SQL Server. Это означает, что SSRS больше не устанавливается по умолчанию, и требуется отдельный этап установки. Отдельный установщик SSRS добавляет все необходимые компоненты в базу данных движка SQL Server, такие как базы данных ReportServer и ReportServerTemp, а также веб-сервис и веб-приложение.

Если вам нужно установить SSRS, вы можете следовать инструкциям, предоставленным в официальной документации Microsoft: Установка SQL Server Reporting Services.

Группы постоянной доступности Always On

Группы постоянной доступности Always On (AG) – это решение Microsoft для обеспечения высокой доступности и восстановления после сбоя (HADR) для SQL Server. Оно позволяет вам включать базы данных в группу, которая синхронизируется между активным сервером (основным) и пассивными серверами (репликами). Это обеспечивает доступность и актуальность баз данных в случае сбоя.

Если вы хотите узнать больше о группах постоянной доступности Always On, вы можете обратиться к официальной документации Microsoft: Группы постоянной доступности Always On – SQL Server.

Подписки SSRS

Подписки SSRS – это мощная функция, которая позволяет планировать и автоматизировать рендеринг и доставку отчетов. С помощью подписок вы можете выбрать отчет, формат, расписание и способ доставки, делая ваших пользователей более самостоятельными и освобождая ваше время. Подписки особенно полезны для регулярных потребностей в отчетности, таких как отправка отчетов по электронной почте или сохранение их в общей папке.

Если вы хотите узнать больше о подписках SSRS, вы можете обратиться к официальной документации Microsoft: Подписки и доставка SSRS.

Проблема

Когда в группу постоянной доступности включены базы данных, критически важные для работы, важно также включить базы данных ReportServer и ReportServerTempDB. Это обеспечивает доступность источников данных (баз данных OLTP) и платформы отчетов (SSRS) в случае восстановления после сбоя. Однако простое добавление этих баз данных в AG недостаточно для полной поддержки SSRS для HADR.

С обеими базами данных SSRS в AG большая часть функциональности доступна, и портал отчетов SSRS может обслуживать отчеты и соблюдать механизм безопасности. Однако подписки SSRS перестанут работать, несмотря на то, что таблица подписок синхронизирована. Это происходит потому, что SSRS зависит не только от заданий и логинов, но и от пользовательской роли базы данных, называемой RSExecRole, которая должна существовать как в базе данных master, так и в базе данных msdb.

Решение

Решение этой проблемы довольно простое. Вам нужно создать роль базы данных RSExecRole как в базе данных master, так и в базе данных msdb, и предоставить ей необходимые разрешения для функциональности подписок SSRS. Microsoft предоставляет документацию, которая проводит вас через этот процесс: Создание роли базы данных RSExecRole.

Вот пример кода, который создает роль базы данных RSExecRole и предоставляет необходимые разрешения:

USE master;
GO

IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE [type] = 'R' AND [name] = 'RSExecRole')
BEGIN
    CREATE ROLE [RSExecRole];
END

GRANT EXECUTE ON dbo.xp_sqlagent_enum_jobs TO [RSExecRole];
GRANT EXECUTE ON dbo.xp_sqlagent_is_starting TO [RSExecRole];
GRANT EXECUTE ON dbo.xp_sqlagent_notify TO [RSExecRole];
GO

USE msdb;
GO

IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE [type] = 'R' AND [name] = 'RSExecRole')
BEGIN
    CREATE ROLE [RSExecRole];
END

GRANT EXECUTE ON dbo.sp_add_category TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_job TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_jobschedule TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_jobserver TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_jobstep TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_delete_job TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_help_category TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_help_job TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_help_jobschedule TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_verify_job_identifiers TO [RSExecRole];
GRANT SELECT ON dbo.syscategories TO [RSExecRole];
GRANT SELECT ON dbo.sysjobs TO [RSExecRole];
GO

Было бы идеально, если бы роль базы данных RSExecRole и разрешения создавались по умолчанию, независимо от установки SSRS. Это упростило бы процесс настройки и обеспечило бы более гладкую работу для DBA.

Как бы пели Beach Boys – “you know it’s gonna make it much better”!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.