Skip to Content
Primo RPA OrchestratorСистемным администраторамФиксированное секционирование таблиц с журналом Робота и Оркестратора для SQLServer

Секционирование существующих таблиц с журналом Робота и Оркестратора для SQLServer - Вариант с фиксированной схемой секционирования

1. Создание файловых групп

Для секционирования по месяцам необходимо создать файловые группы на каждый месяц.

ALTER DATABASE ltoolslogs ADD FILEGROUP logs01; ALTER DATABASE ltoolslogs ADD FILEGROUP logs02; ALTER DATABASE ltoolslogs ADD FILEGROUP logs03; ALTER DATABASE ltoolslogs ADD FILEGROUP logs04; ALTER DATABASE ltoolslogs ADD FILEGROUP logs05; ALTER DATABASE ltoolslogs ADD FILEGROUP logs06; ALTER DATABASE ltoolslogs ADD FILEGROUP logs07; ALTER DATABASE ltoolslogs ADD FILEGROUP logs08; ALTER DATABASE ltoolslogs ADD FILEGROUP logs09; ALTER DATABASE ltoolslogs ADD FILEGROUP logs10; ALTER DATABASE ltoolslogs ADD FILEGROUP logs11; ALTER DATABASE ltoolslogs ADD FILEGROUP logs12;

Подключаем к каждой группе файл хранилища. Путь к файлам .ndf зависит от конфигурации SQL Server, может быть, например:
C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA

Для файлов .ndf используйте шаблон именования с датой, если планируете автоматическое создание секций через SQL Agent. Например: logs_20260415.ndf. Это упростит идентификацию секций при мониторинге.

ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs01, FILENAME = '<file-groups-path>\logs01.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs01; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs02, FILENAME = '<file-groups-path>\logs02.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs02; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs03, FILENAME = '<file-groups-path>\logs03.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs03; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs04, FILENAME = '<file-groups-path>\logs04.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs04; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs05, FILENAME = '<file-groups-path>\logs05.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs05; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs06, FILENAME = '<file-groups-path>\logs06.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs06; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs07, FILENAME = '<file-groups-path>\logs07.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs07; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs08, FILENAME = '<file-groups-path>\logs08.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs08; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs09, FILENAME = '<file-groups-path>\logs09.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs09; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs10, FILENAME = '<file-groups-path>\logs10.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs10; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs11, FILENAME = '<file-groups-path>\logs11.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs11; ALTER DATABASE ltoolslogs ADD FILE ( NAME = logs12, FILENAME = '<file-groups-path>\logs12.ndf', SIZE = 10 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) TO FILEGROUP logs12;

2. Создание функции секционирования

CREATE PARTITION FUNCTION LogsPartitionFunction(int) AS RANGE RIGHT FOR VALUES (2,3,4,5,6,7,8,9,10,11,12);

Функция создает 12 секций (по одной на месяц). Количество значений в FOR VALUES равно 11, так как они задают границы между секциями, а не сами секции.

3. Создание схемы секционирования

CREATE PARTITION SCHEME LogsPartitionScheme AS PARTITION LogsPartitionFunction TO ( 'logs01', 'logs02', 'logs03', 'logs04', 'logs05', 'logs06', 'logs07', 'logs08', 'logs09', 'logs10', 'logs11', 'logs12' );

4. Предварительная проверка данных

Перед добавлением вычисляемой колонки убедитесь, что в таблицах Logs и OrchEvents нет NULL значений в поле OrchTimestampUtc. При наличии NULL секционирование может работать некорректно.

-- Проверка на NULL SELECT COUNT(*) FROM Logs WHERE OrchTimestampUtc IS NULL; SELECT COUNT(*) FROM OrchEvents WHERE OrchTimestampUtc IS NULL;

Если запросы вернули количество больше 0, необходимо обработать NULL значения перед продолжением.

5. Настройка таблицы Logs

Добавляем вычисляемую колонку для секционирования:

ALTER TABLE Logs ADD PartitionColumn AS MONTH(OrchTimestampUtc) PERSISTED;

Создаём индекс для партиционирования:

CREATE NONCLUSTERED INDEX IX_Logs_Partition ON [Logs] ([PartitionColumn]) ON [LogsPartitionScheme]([PartitionColumn]);

6. Настройка таблицы OrchEvents

Добавляем вычисляемую колонку для секционирования:

ALTER TABLE OrchEvents ADD PartitionColumn AS MONTH(OrchTimestampUtc) PERSISTED;

Создаём индекс для партиционирования:

CREATE NONCLUSTERED INDEX IX_OrchEvents_Partition ON [OrchEvents] ([PartitionColumn]) ON [LogsPartitionScheme]([PartitionColumn]);

7. Примечание по порядку выполнения

При первоначальном включении секционирования (выполнение пунктов 1–6) секция на следующий месяц создается автоматически только через сутки, после первого переключения таблиц в секционированный режим.

Порядок действий по дням:

ДеньДействие
День 1Выполнить пункты 1–6 документации (создание файловых групп, функции, схемы, индексов)
День 2 и далееНастроить задание SQL Agent для ежедневного выполнения EXEC dbo.create_partition;

Важно: Если запустить процедуру EXEC dbo.create_partition; в тот же день (День 1), она завершится с ошибкой, потому что автоматическое переключение таблиц еще не произошло, и механизм секционирования не до конца инициализирован. Файл ltoolslogs_YYYYMMDD.ndf успешно создается на следующий день после настройки.

8. Удаление данных из секций

Удаление данных из секций успешно выполняется командой:

DROP TABLE public."Logs/OrchEvents....";