Банк данных
Сервис используется для хранения пользовательских данных в Платформе с использованием СУБД MSSQL или PostgreSQL.
Важно
Ознакомьтесь с требованиями к версиям используемых СУДБ в разделе Ограничения и рекомендации.
В случае неуспешного подключения Банка данных к Базе данных причина ошибки указывается в ЦМ на вкладке Основные в деталях состояния или на вкладке Журнал.
Создание сервиса
Чтобы создать сервис Банк данных:
В ЦН перейдите в раздел Сервисы.
Нажмите на кнопку + над таблицей сервисов. В рабочей области страницы отобразится интерфейс создания / редактирования сервиса, содержащий две вкладки: Основные и Параметры сервиса.
На вкладке Основные заполните следующие поля:
Название: произвольное название сервиса, необязательно для заполнения.
Имя: уникальное имя сервиса, обязательно для заполнения.
Комментарий: описание сервиса, необязательно для заполнения, поддерживается многострочный ввод.
Включен: для активации сервиса установите флажок.
Правило обработки очередей: выбор настроенного Правила обработки очередей в разделе ЦН Обработка данных.
Настройка сервисов: для создания сервиса выберите вариант Банк данных.
На вкладке Параметры сервиса произведите следующие действия:
Выберите используемую СУБД:
MSSQL
Примечание
Если на сервере СУБД MSSQL отключен параметр оптимизированных запросов FILESTREAM, в журнале работы сервиса будет регистрироваться соответствующее предупреждение, не блокирующее работу сервиса. Для нормальной работы сервиса с оптимизированными запросами включите параметр FILESTREAM на стороне сервера СУБД. Если работа с оптимизированными сервисами не требуется, отключите параметр useMemoryOptimizedTable в конфигурации Банка данных для избежания регистрации предупреждений.
PostgreSQL
Внимание
Особенности работы с версии 3.1.1.0
Сервис подключается по имени базы данных PostgreSQL в регистре, указанном в настройках. По умолчанию подключение производится по имени базы данных в нижнем регистре. Если Сервис подключен к базе данных, имя которой содержит символы верхнего регистра, рекомендуется выключить сервис, переименовать базу данных и включить сервис снова.
Примечание
Для работы сервиса с CУБД PostgreSQL пользователь должен обладать правами Вход разрешен (Can login) и Создание баз (Create databases).
Установите флажок Регистрация действий, если действия в банке данных должны журналироваться в таблицу masterjournal базы данных (по умолчанию флажок не установлен). После установки флажка появляется возможность выбрать период хранения журнала действий; значение по умолчанию: 0 (Не ограничено).
Заполните следующие поля:
Сервер
Экземпляр
Порт
Имя базы данных
Примечание
Если база данных, указанная в настройках банка данных, не существует, Платформа самостоятельно создаст базу данных с указанным именем.
Имя СУБД PostgreSQL не должно содержать буквы в верхнем регистре, в противном случае подключение Платформы к СУБД будет невозможно. Начиная с версии 3.1.0 для корректного подключения необходимо переименовать СУБД и указать новое имя базы данных в настройках сервиса до применения конфигурации
Настройте параметры аутентификации:
Установите флажок Вход по имени пользователя и паролю
Введите имя пользователя и пароль, если для доступа к банку данных требуется аутентификация.
Если данные пользователя хранятся в базовом сервисе Управление пользователями, установите флажок Получать пароль из модуля Credential. В результате поле Пароль отображаться не будет.
Внимание
Если проставлен флажок Получать пароль из модуля Credential, то пароль берется из Credential при условиях:
совпадение Имени пользователя в Банке данных с Именем в Учетных данных систем.
указан Банк данных в параметре Внешняя система/Сервис в Учетных данных систем.
Нажмите на кнопку Сохранить изменения.
Нажмите на кнопку Применить конфигурацию.
Убедитесь, что в диспетчере задач появился процесс банка - DatareonPlatformDataBank.
Пример конфигурации сервиса банка данных:
{ "$type": "DT.ClusterConfiguration.NodeModule, DT_Core", "config": { "$type": "DT.ConfigurationRepository.Configuration.ModuleConfiguration.StorageConfig, DT_ConfigurationRepository", "changeLog": false, "storeDay": 0, "databaseConfiguration": { "$type": "DT.ClusterConfiguration.DBConnectionConfig, DT_Core", "databaseType": "MsSql", "useConnectionString": false, "useUsernameAndPassword": true, "connectionString": "", "serverAddress": "DTplatform31", "serverPort": 1433, "serverInstance": "sqlexpress", "database": "MyDB", "account": { "$type": "DT.ClusterConfiguration.Account, DT_Core", "userName": "Testing", "useCredential": false }, "integratedSecurity": false, "pooling": true, "minimumPoolSize": -1, "maximumPoolSize": -1, "connectionLifetime": -1, "properties": [], "setDbOptimizeOptions": true }, "sendingStrategy": "" }, "isActive": true, "folderId": null, "entityId": "e24de33c-a25f-494c-a97c-042b8775c21c", "clusterId": "140e7996-8609-4ebd-a783-ca63855dbb9a", "name": "Банк_данных", "description": "Банк данных", "comment": "", "version": 1, "tagsCollection": [], "fieldsFromGlobalBusiness": { "$type": "System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib],[System.String, System.Private.CoreLib]], System.Private.CoreLib" }, "className": "DataBank", "classNameStr": "Банк данных" }
Основные параметры:
Параметры работы Банка данных:
changeLog (boolean): UI настройка Регистрация действий.
storeDay (integer): UI настройка Период хранения журнала действий, указывается цифра в днях.
sendingStrategy (string): UI настройка Правило обработки очередей.
Параметры работы банка с СУБД:
databaseType (enum): UI настройка СУБД.
useConnectionString (boolean): использование параметров из строки подключения (connectionString) для подключения к базе данных.
useUsernameAndPassword (boolean): UI настройка Вход по имени пользователя и паролю.
Примечание
При использовании строки подключения (connectionString) и включенном параметре useUsernameAndPassword = true логин и пароль берутся из блока account, даже если в connectionString указаны другие значения. При useUsernameAndPassword = false используются все данные из connectionString (путь подключения к базе данных и учетные данные).
connectionString (string): строка подключения к базе данных MSSQL или PostgreSQL. Для использования строки подключения необходимо включить параметр useConnectionString.
Со списком возможных ключей, а также примерами строк подключений можно ознакомиться на следующих сайтах:
serverAddress (string): UI настройка Сервер.
serverPort (integer): UI настройка Порт.
serverInstance (string): UI настройка Экземпляр.
database (string): UI настройка Имя базы данных.
userName (string): UI настройка Имя пользователя.
useCredential (boolean): UI настройка Получать пароль из модуля Credential.
integratedSecurity (boolean): проверка подлинности Windows при подключении к СУБД. Значение по умолчанию false.
Примечание
В связи с техническими особенностями значение true не поддерживается на СУБД PostgreSQL.
pooling (boolean): управление использования пула соединений. По умолчанию установлено true (включена пуловая обработка соединений, то есть соединения с БД повторно используются), true рекомендуется для повышения производительности.
minimumPoolSize (integer): минимальное количество соединений в пуле. Значение -1 означает использование значения по умолчанию (0).
maximumPoolSize (integer): максимальное количество соединений в пуле. Значение -1 означает использование значения по умолчанию (100).
connectionLifetime (integer): максимальное время жизни соединения (в секундах). После истечения времени соединение будет закрыто и заменено новым. Значение -1 соответствует значению по умолчанию (3600 секунд = 1 час).
properties (array): дополнительные свойства. Позволяет задавать специфические параметры для разных СУБД в виде массива объектов типа ключ-значение.
Например:
properties: [ { "Application Name": "MyApp", "Connect Timeout" : 30, "Packet Size": 4096 } ]
setDbOptimizeOptions (boolean) - включение оптимизационной настройки для MS SQL
SET AUTO_CLOSE OFF; ALTER DATABASE [DBName] SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON;
Технические параметры:
isActive (boolean): UI настройка Включен (Основные).
folderId (string): ID папки.
entityId (string): ID Сервиса, присваивается системно.
clusterId (string): ID Кластера, присваивается системно.
name (string): UI настройка Имя (Основные).
description (string): UI настройка Название (Основные).
comment (string): UI настройка Комментарий (Основные).
version (integer): номер версии конфигурации.
tagsCollection (array): набор тегов, массив.
className (enum): тип сервиса.
classNameStr (enum): наименование типа сервиса.
Настройка триггеров
Триггеры используются при массовой загрузке данных в базу.
Управление осуществляется путем редактирования конфигурации банка данных:
"databankParams": {
"$type": "DT.DatabankParams, DT_Core",
"search_TableBulkAfter": 300,
"search_TableInsertAfter": 30,
"insert_BatchSize": 30,
"delete_BatchSize": 100,
"insert_BulkAfter": 2,
"bulkCopyTimeout": 600,
"checkBatchSize": 300,
"commandTimeout": 0,
"useMemoryOptimizedTable": true,
"createDataViews": false,
"fireTriggers": false
}
Основные параметры:
search_TableInsertAfter: количество строк для разделения записей.
insert_BulkAfter: предельное количество записей, при превышении которого будет применен метод массовой загрузки BulkInsert.
bulkCopyTimeout: таймаут для операции массового копирования.
commandTimeout: таймаут для всех операций.
useMemoryOptimizedTable: использование таблиц, оптимизированных в MSSQL.
fireTriggers: включение / выключение триггеров, значение по умолчанию - false.
Важно
Определение необходимости вставки данных через bulk или нет осуществляется по формуле:
"***количество записей (количество заполняемых полей(колонок) в таблице + 5)***".
Мониторинг работы конвейера
Логи выполнения конвейера в банке данных записываются с логгером ConveyorDataWatchService и отображаются в журнале банка.
Логгер ConveyorDataWatchService относится к группе отладочных логов. Для его включения необходимо включить дополнительный раздел журнала DebugConveyor в настройках логирования банка данных или кластера.
Устранение ошибок
При понижении версии Платформы может возникнуть ошибка работы банка Версия структуры базы не соответствует ожидаемой.
Для устранения этой ошибки необходимо выполнить конвертацию базы данных вручную с помощью скрипта.
СУБД MSSQL
BEGIN TRY BEGIN TRAN IF EXISTS(SELECT TOP 1 1 FROM [dbo].[masterhash] WHERE LEN([guidpath]) > 300) BEGIN RAISERROR('Найдены значения поля guidpath, превышающие максимальное ограничение. Откат на предыдущую версию невозможен.', 16, 1) END ALTER TABLE [dbo].[masterhash] ALTER COLUMN [guidpath] [nvarchar](300) UPDATE [dbo].[__MdmMigrations] SET [Version] = 1 WHERE [Name] = 'MasterHash' COMMIT END TRY BEGIN CATCH ROLLBACK END CATCH
СУБД PostgreSQL
DO $$ BEGIN IF EXISTS(SELECT FROM "public"."masterhash" WHERE LENGTH("guidpath") > 300) THEN RAISE EXCEPTION 'Найдены значения поля guidpath, превышающие максимальное ограничение. Откат на предыдущую версию невозможен.'; END IF; ALTER TABLE "public"."masterhash" ALTER COLUMN "guidpath" TYPE varchar(300); UPDATE "public"."__mdmmigrations" SET "version" = 1 WHERE "name" = 'MasterHash'; COMMIT; END $$;