132 документа
← К списку

Глава 26. Механизм копий базы данных

страница

Глава 26. Механизм копий базы данных

26.1. Общая информация

Примечание. Доступно только для лицензии КОРП. Подробнее о видах лицензий см. здесь.

Механизм копий базы данных позволяет настроить систему таким образом, что для требуемых данных будет создаваться и обновляться копия в других физических базах данных. Одновременно может существовать несколько копий базы данных. Система позволяет настроить, данные каких объектов конфигурации будут дублироваться в каждую копию базы данных. Переноситься в копию может как один объект конфигурации, так и все, поддерживаемые механизмом, объекты конфигурации, которые существовали на момент настройки копии. Система предоставляет возможность использовать данные копии при выполнении запроса или работы системы компоновки данных. Рассматривая собственно перенос и работу механизма, в основном будет использовать термин «таблица». При этом под термином «таблица» понимается таблица базы данных, а не объект конфигурации системы «1С:Предприятие». Так, например, регистр накопления состоит из нескольких таблиц базы данных. Для успешного использования механизма копий будут переноситься все таблицы базы данных, связанные с требуемым регистром.

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

Внимание! Механизм копий базы данных не поддерживает работу в файловом варианте информационной базы.

Механизм копий используется для работы службы Дата акселератора (как обязательный элемент Дата акселератора), а также может использоваться для вынесения данных, которые используются для построения аналитических отчетов, на внешний (по отношению к основной базе) сервер баз данных для снижения нагрузки на сервер баз данных, обслуживающий основную базу данных.

Для синхронизации баз данных может использоваться как встроенный механизм системы «1С:Предприятие», так и сторонние средства (определяется на этапе настройки каждой копии). Средства СУБД для создания внешней копии можно использовать только при совместном выполнении следующих условий:

1. Созданная копия будет использована только с помощью механизма копий базы данных.

2. В копию помещаются все таблицы основной базы данных (создается полная копия).

Во всех остальных случаях следует использовать встроенные механизмы репликации системы «1С:Предприятие».

Механизм копий базы данных поддерживает разделение данных. В состав копии базы данных могут входить таблицы объектов, входящих в состав разделителей.

В качестве СУБД, используемой для копии базы данных, могут использоваться следующие СУБД: Microsoft SQL Server, Oracle Database, PostgreSQL. СУБД кластера серверов и копии базы данных могут различаться. Отличаться может версия, разрядность и производитель СУБД.

Смотри также:

● Поддерживаемые СУБД (см. здесь).

26.2. Устройство механизма

Фактически, при создании копии базы данных, в базе данных копии создаются таблицы, которые являются копиями соответствующих таблиц объектов информационной базы. Состав таблиц копии определяется с помощью свойства Состав объекта, описывающего конкретную копию базы данных (объект МенеджерКопииБазыДанных). В процессе работы система отслеживает изменения переносимых данных, которые выполнены в основной базе данных, и по команде выполняет передачу этих изменений в каждую копию базы данных. Перенос данных в зарегистрированные копии базы данных выполняется с помощью специальных метода программного интерфейса:

● КопииБазыДанных.Обновить() ‑ выполняет обновление копий базы данных. Метод работает синхронно, т. е. прикладное решение получит управление только после завершения обновления (целиком или порции). Метод можно вызывать из регламентного задания (по аналогии с обновлением индекса полнотекстового поиска).

● КопииБазыДанных.ОбновитьВФоновомРежиме() ‑ выполняет обновление копии базы данных с помощью системного фонового задания. Метод выполняет без существенных задержек, а состояние обновления можно будет получить с помощью метода ПолучитьИнформациюОКопии() (см. здесь).

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

Выполнение обновления копии базы данных, которое начинается при вызове метода КопииБазыДанных.Обновить(), «внутри» платформы можно разделить на различные (по сути) операции:

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

Для этого используются одно или несколько системных фоновых задания. Этот перенос используется после любого изменения структуры данных в копии (добавление или удаление реквизита, добавление или удаление самого объекта).

2. Текущий перенос данных в существующую таблицу копии. Для разделенных данных перенос выполняется в ту область данных, которая определена значениями разделителей переносимой транзакции в основной базе данных.

Это действие выполняется без использования фоновых заданий. В этом случае в копию переносятся все успешно завершенные действия с данными из основной базы данных. Очевидно, что запоминаются и переносятся изменения только для объектов, которые отмечены как находящиеся в указанной копии. При большом объеме изменений или длительном интервале обновления ‑ такой перенос может занимать существенное время. В этом случае можно рассмотреть вызов обновления в фоновом режиме.

Процесс обновления, описанный выше, используется в том случае, если для конкретной копии базы данных выбран стандартный тип репликации данных (свойство МенеджерКопииБазыДанных.ТипРепликации). Если для копии базы данных выбран внешний тип репликации базы данных, то система «1С:Предприятие»:

● Не выполняет никаких действий по созданию таблиц в копии.

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

● Не несет ответственности за параметры копии и ее (копии) наполнение. Ответственность за создание таблиц с требуемой структурой, а также за механизм и регулярность репликации данных, целиком лежит на персонале, настраивающем параметры копии базы данных.

● Занимается только передачей запроса получения данных в копию базы данных вместо СУБД основной базы данных. Любое несоответствие структуры данных между копией и основной базой приведет к ошибке выполнения запроса.

● Считает, что данные в такой копии всегда актуальны.

Платформа поддерживает несколько версий стандартной репликации (описывается системным перечислением ВерсияСтандартнойРепликацииКопийБазыДанных). Отличие версий заключается в том, с помощью каких механизмов определяются данные, которые необходимо передать из основной базы данных в копию. Собственно передачу всегда выполняет кластер серверов «1С:Предприятие». Версии стандартной репликации:

● Версия1 ‑ в этом случае отслеживание изменений, которые необходимо передавать в копию, выполняется средствами кластера серверов системы «1С:Предприятие».

● Версия2 ‑ в этом случае отслеживание изменений, которые необходимо передавать в копию, выполняется средствами СУБД, в которой размещена основная база данных.

Получение и установка версии стандартной репликации копий базы данных выполняется с помощью методов ПолучитьВерсиюСтандартнойРепликации()/УстановитьВерсиюСтандартнойРепликации() менеджера копий базы данных. При смене версии стандартной репликации происходит сброс состояния всех копий со стандартным типом репликации. При следующем обновлении копии будет выполнено (по сути) первоначальное заполнение копии данными.

Платформа «1С:Предприятие» поддерживает отслеживание изменений средствами СУБД (Версия2) не для всех поддерживаемых систем управления базами данных. СУБД, для которых существует возможность использования собственных инструментов отслеживания изменений:

● Microsoft SQL Server версии 2008 и последующие. Используется механизм записи изменений (Change Data Capture). Механизм записи изменений будет включен автоматически, если пользователь, от имени которого кластер серверов обращается к Microsoft SQL Server, является членом серверной роли sysadmin.

Если этот пользователь не является членом этой серверной роли, то для включения механизма необходимо выполнить следующий набор команд в основной базе данных:

Копировать в буфер обмена

execute sys.sp_cdc_enable_db; execute sp_configure 'show advanced options', 1; RECONFIGURE; execute sp_configure 'max text repl size', -1; RECONFIGURE;

Команды должны быть выполнены от имени пользователя, который является членом серверной роли sysadmin.

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

Также для работы механизма должна работать служба SQL Server``Agent. Подробнее про механизм записи изменений можно получить информацию в документации к Microsoft SQL Server.

В Microsoft SQL Server 2019 CU 20, Microsoft SQL Server 2022 CU 2 и последующих версий, использование механизма записи изменений (Change Data Capture) невозможно, если включена поддержка отложенных транзакций (параметр DELAYED``_``DURABILITY). Попытка синхронизации с копией базы данных в этом случае будет завершаться ошибкой.

Для того чтобы можно было использовать версию 2 стандартной репликации данных, необходимо отключить использование отложенных транзакций в основной базе данных до начала процесса обновления копий базы данных. Описание того, как это сделать, доступно по ссылке: https://learn.microsoft.com/ru-ru/sql/relational-databases/logs/control-transaction-durability.

● PostgreSQL версии 10 и последующие. Используется механизм логического декодирования СУБД. Для включения механизма необходимо выполнить следующие действия:

● Установить или обновить СУБД PostgreSQL до версии 10 или любой последующей. Установка или обновление должно выполняться из дистрибутива, который поставляется фирмой «1С».

● В конфигурационном файле СУБД (postgresql.conf) указать для параметра wal_level значение logical: wal_level=logical.

● Перезапустить СУБД.

● В стандартной функции управления копиями базы данных включить Версия2 стандартного механизма репликации.

При использовании PostgreSQL следует помнить о следующих особенностях:

● Если используется PostgreSQL версии 9 или предшествующие, то вне зависимости от того, какая версия стандартного механизма репликации указана в настройках информационной базы, будет использоваться Версия1.

● Если используется PostgreSQL версии 10 или любой последующей, но СУБД устанавливалась не из дистрибутива, поставляемого фирмой «1С», то стандартный механизм репликации Версия2 не может быть использован.

● Если используется PostgreSQL версии 10 или последующая, а информационная база была настроена в предыдущих версиях системы «1С:Предприятие», то будет использоваться Версия1, хотя в настройках может быть указана Версия2. Для смены версии стандартного механизма репликации следует выполнить действия, указанные ранее, в этом разделе.

Если установлена Версия2 стандартного механизма репликации изменений, а СУБД основной базы не поддерживает этот режим, то будет использован режим Версия1.

Как уже было сказано, система использует копии базы данных при работе с объектом Запрос и при работе системы компоновки данных. Платформа «1С:Предприятие» позволяет управлять, где будет исполняться запрос (или компоновка данных). Для этого предназначены следующие свойства (для объектов Запрос и ЗначенияПараметровВыводаКомпоновкиДанных):

● ИспользованиеКопийБазыДанных ‑ позволяет указать возможность и приоритет использования копий базы данных:

● НеИспользоватьКопии ‑ указывает, что запрос будет исполняться на основной базе данных. В этом случае считается, что все данные всегда актуальны.

● ИспользоватьТолькоКопии ‑ указывает, что запрос будет выполняться только на какой-либо копии базы данных. Учитывается актуальность данных в копии. Если запрос выполнить на копии не представляется возможным ‑ будет сформировано исключение и запрос не будет выполнен.

● ИспользоватьПреимущественноКопии ‑ указывает, что запрос должен выполниться на копии базы данных. Учитывается актуальность данных в копии. Если подходящей копии в момент исполнения запроса не обнаружено ‑ запрос будет выполнен на основной базе данных.

● Авто ‑ трактуется как значение ИспользоватьПреимущественноКопии.

● ИспользуемыеКопииБазыДанных ‑ определяет список копий базы данных, где может выполниться запрос или компоновка данных.

Если при выполнении запроса допускается использование копий, то для использования копии базы данных используется следующий алгоритм:

1. Выбирается список копий, которые могут быть использованы для выполнения запроса. Для этого должны быть выполнены все следующие условия:

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

● Таблицы и реквизиты, фигурирующие в качестве источников запроса.

● Таблицы и реквизиты, из которых получаются какие-либо данные в запросе (например, при обращении «через точку»).

● Таблицы и реквизиты, которые задействованы в условиях ограничений доступа к данным (если таковые присутствуют).

2. Актуальность данных копии удовлетворяет требованиям разработчика (алгоритм определения актуальности приведен далее).

3. Если в запросе есть таблицы, на которые установлен отбор в копии, то необходимо, чтобы условие в запросе соответствовало отбору на копию. Если в запросе нет условия, а в копии есть отбор для этой таблицы, то такой запрос будет направлен в основную базу данных или копию, в которой отбор для этой таблицы не задан.

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

3. Из списка копий, выбранных на предыдущем шаге, случайным образом выбирается копия, на которой будет выполняться запрос.

Для упрощения выбора таблиц, которые необходимо разместить в копии базы данных, можно использовать внешнюю обработку Подбор таблиц для дата акселератора, которая размещена на диске ИТС, в разделе методической поддержки разработчиков (https://``its.1``c.``ru/``db/``metod8``dev#``content:5951:``hdoc).

Задание требуемой актуальности данных управляется с помощью свойств ТребуемаяАктуальностьДанных и ТребуемоеВремяАктуальностиДанных объекта Запрос (и одноименного свойства параметра вывода компоновки данных). Работа данных свойств зависит от значения свойства ИспользованиеКопийБазыДанных. Рассмотрим эту связку:

● СвойствоИспользованиеКопийБазыДанных установлено в значениеПреимущественноКопии. Свойство ТребуемаяАктуальностьДанных работает следующим образом:

● Актуальные ‑ в этом случае данные будут получаться только из основной базы данных.

● Любые ‑ в этом случае будут использоваться данные из копии, которая содержит все таблицы, необходимые для выполнения запроса и эти таблицы содержат данные с требуемой актуальностью (свойство ТребуемоеВремяАктуальностиДанных). Если нужной копии базы данных нет, то запрос будет исполнен в основной базе данных.

● СвойствоИспользованиеКопийБазыДанных установлено в значениеИспользоватьТолькоКопии. Свойство ТребуемаяАктуальностьДанных работает следующим образом:

● Актуальные ‑ в этом случае данные из копии буду считаться пригодными для использования в том случае, если данные в копии актуальны. Данные будут считаться актуальными в том случае, если для данной копии в основной базе нет изменений, которые еще не перенесены в копию.

● Любые ‑ в этом случае будут использоваться данные из копии, которая содержит данные с требуемой актуальностью (свойство ТребуемоеВремяАктуальностиДанных). Если нужной копии базы данных нет ‑ будет сформировано исключение.

Если свойствоТребуемаяАктуальностьДанных установлено в значение Авто (при любом значении свойства ИспользованиеКопийБазыДанных ), то решение о выборе треуемой актуальности данных в копии автоматически принимается платформой. Для объекта Запрос в этом случае будет использоваться значение Актуальные, а для системы компоновки данных ‑ значение Любые.

Рассмотрим, как работает механизм определения актуальности данных. Фактически, значение свойства ТребуемоеВремяАктуальностиДанных можно описать следующим образом: изменения данных за какой интервал времени мы готовы проигнорировать ради того, чтобы запрос всегда выполнялся на копии? Так, если у нас значение свойства ТребуемоеВремяАктуальностиДанных равно 30, то это означает, что если все таблицы копии, участвующие в запросе актуальны, а изменение не актуальных таблиц было не ранее, чем время выполнения запроса, уменьшенное на 30 секунд, то запрос будет выполняться на копии. Если время изменения не актуальной таблицы произошло более чем за 30 секунд от момента формирования запроса ‑ такая копия считается не подходящей. Указывать период актуальности можно тремя различными способами:

● Целым числом. Это значение описывает интервал времени в секундах. Если таблицы копии изменялись внутри этого интервала (относительно момента начала выполнения запроса), то эти таблицы считаются актуальными. Такой способ указания требуемого времени актуальности данных будет зависеть только от времени начала выполнения запроса.

● Датой и временем. Указывается конкретный момент времени. Все изменения, которые были выполнены после этой даты ‑ не окажут влияния на признак актуальности в данном запросе. Такой способ указания требуемого времени актуальности данных будет зависеть только от указанного значения.

● Стандартная дата начала. Позволяет указать начало «интервала актуальности» таким образом, что он будет автоматически изменяться без участия прикладного разработчика. Такой способ указания требуемого времени актуальности данных будет зависеть только от текущей даты.

После получения данных (а для системы компоновки данных ‑ во время компоновки данных), платформа предоставляет возможность получить информацию о том, откуда получались данные и насколько они актуальны:

● Объект РезультатЗапроса предоставляет свойства:

● ДанныеАктуальны ‑ позволяет определить, актуальны или нет данные, полученные запросом.

● ВремяАктуальности ‑ содержит дату и время последнего фактического обновления данных в копии. Для актуальных данных содержит время начала выполнения запроса.

● КопияБазыДанных ‑ содержит имя копии базы данных, которая использована для получения данных.

● Язык выражений системы компоновки данных содержит функции ДанныеАктуальны(), ВремяАктуальностиДанных() и КопияБазыДанных(). Назначение этих функций полностью соответствует одноименным свойствам результата запроса.

При использовании системы компоновки данных предоставляется возможность управлять выводом в отчет информации о том, откуда получена информация и какова актуальность полученных данных. Для этого предназначены параметры вывода ВыводитьАктуальностьДанных и ВыводитьКопиюБазыДанных. При этом следует помнить, что если в схеме компоновки данных используются вложенные схемы, то каждая схема компоновки данных может быть выполнена как на основной базе данных, так и на любой из копии, которая удовлетворяет требованиям исполняющегося запроса.

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

Смотри также:

● Использование требований назначения функциональности для управления сервером (см. здесь).

● Функции языка выражений системы компоновки данных (см. здесь).

26.3. Дата акселератор

Примечание. Использование более одного процесса Дата акселератора в кластере серверов доступно только для лицензии КОРП. Один процесс Дата акселератора в кластере серверов доступен с лицензией ПРОФ. Подробнее о видах лицензий см. здесь.

Дата акселератор ‑ это специальная система управления базой данных, в которой база данных целиком размещена в оперативной памяти рабочего сервера (in-memory DB) кластера серверов «1С:Предприятия». Дата акселератор работает только совместно с механизмом копий базы данных и только в том случае, когда кластер запущен под управлением 64-разрядной операционной системы. Дата акселератор не поддерживает работу под управлением 32-разрядной операционной системы.

То, что база Дата акселератора полностью расположена в оперативной памяти, является как достоинством Дата акселератора: быстрая работа отчетов, так и его недостатком: когда компьютер с Дата акселератором будет перезагружен, то для восстановления базы данных потребуется выполнить длительную процедуру синхронизации основной базы данных и базы Дата акселератора. Для того, чтобы минимизировать время восстановления после перезапуска, в настройках Дата акселератора можно указать, каким образом хранится база данных: а) только в оперативной памяти или б) в оперативной памяти и на дисковом накопителе. В первом случае перезапуск Дата акселератора потребует полной синхронизации с основной базой. Во втором случае данные будут загружены с дискового накопителя, а синхронизация потребуется только в том случае, если в основной базе появились данные в таблицах, которые передаются в Дата акселератор.

В рамках одного кластера серверов имеется возможность запускать несколько экземпляров Дата акселератора. Эта возможность требует серверной лицензии уровня КОРП. Для серверной лицензии уровня ПРОФ допускается работа одного экземпляра Дата акселератора в кластере серверов. Управление количеством экземпляров Дата акселератора происходит с помощью требований назначения функциональности.

Механизм Дата акселератора оптимизирован для выполнения аналитических запросов, обрабатывающих большие объемы данных в СУБД и возвращающих в качестве результата небольшое количество записей. Это является рекомендованным сценарием использования механизма. При использовании Дата акселератора в других сценариях, время исполнения запроса механизмом Дата акселератором может быть больше, чем при использовании основной базы данных.

Общая схема работы с Дата акселератором выглядит следующим образом:

1. Выполняется настройка рабочего сервера, на котором будет выполняться Дата акселератор.

2. Выполняется создание копии базы данных с установленным признаком Встроенный Дата акселератор. При использовании Дата акселератора всегда используется встроенная синхронизация системы «1С:Предприятие». При создании необходимо указать, как будет храниться база данных Дата акселератора: только в памяти или в памяти и на дисковом накопителе.

3. Настраивается список таблиц, которые должны быть размещены в копии.

Совет. Не рекомендуется размещать в копии базы данных, предназначенной для работы Дата акселератора, всю рабочую базу данных. В копию базы данных рекомендуется размещать ровно тот перечень таблиц, которые необходимы для ускорения одного или нескольких отчетов, критичных для работы.

4. Запускается начальное обновление копии базы данных.

5. После окончания обновления отчеты могут использовать Дата акселератор.

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

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

Механизм Дата акселератора, кроме ограничений механизма копий базы данных, имеет собственные ограничения. Не поддерживается:

● Использование реквизитов, хранящих данные размером более 4 Кбайт. При попытке получения таких реквизитов буду возвращаться пустые значения.

Смотри также:

● Системные требования Дата акселератора (см. здесь).

● Настройка рабочего сервера для работы Дата акселератора (см. здесь).

● Описание механизма копий базы данных (см. здесь).

● Требования назначения функциональности (см. здесь).

26.4. Особенности и ограничения

Запрос не может быть исполнен на копии базы данных, если в момент исполнения запроса выполняется любое из следующих условий:

● В текущем сеансе имеется открытая транзакция.

● В объект Запрос установлен менеджер временных таблиц.

Если во время выполнения запроса к данным копии произошла ошибка, связанная с используемой в запросе копией, то копия перестает использоваться (во всех существующих и новых сеансах) до обновления копии или до перезапуска кластера серверов.

Если ошибка от копии возникла в процессе выполнения отчета, созданного на системе компоновки данных, и в котором есть несколько наборов данных или иерархический набор данных, то пользователю выдается ошибка обращения к данным. В других случаях, а также если для отчета/запроса не требуется использование только копии базы данных, ошибка пользователю не выдается, а запрос автоматически повторно выполняется на основной базе данных или на одной из доступных копий базы данных (за исключением копии с ошибкой).

У данных, которые находятся в копии базы данных, свойство ВерсияДанных может не совпадать со значением этого свойства в основной базе данных. При необходимости получения корректного значения для данного свойства, необходимо использовать только актуальные данные (свойство ТребуемаяАктуальностьДанных установлено в значение Актуальные).

При настройке, с помощью встроенного языка, списка таблиц, которые будут размещены в копии, следует помнить о следующих особенностях:

● Новые таблицы будут добавлены в копию после записи объекта типа МенеджерКопииБазыДанных и выполнения метода КопииБазыДанных.Обновить().

● В то же время, удаление таблиц из копии будет выполнено сразу после записи объекта типа МенеджерКопииБазыДанных, не дожидаясь обновления информации в базе данных копии.

Для работы механизма копий базы данных необходимы следующие права доступа:

● В информационной базе, являющейся источником данных:

● Администрирование для управления списком копий базы данных, изменение состава копии и обновление данных копии.

● Для каждого объекта конфигурации, который синхронизируется с внешней базой данных, необходимы следующие права доступа: Чтение, Добавление, Изменение, Удаление. В силу этого рекомендуется создавать специального пользователя, от имени которого будет выполняться синхронизация данных и который будет обладать необходимыми правами доступа.

● Пользователь, от имени которого платформа подключается к СУБД, в которой хранятся данные копии, должен обладать следующими правами:

● Создавать, изменять и удалять таблицы в базе данных.

● Читать, создавать, изменять и удалять данные во всех таблицах базы данных, являющейся копией.

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

Смотри также:

● Права доступа (см. здесь).

26.5. Управление составом копии

Управление составом копии выполняется в несколько этапов:

1. Создается собственно копия базы данных с помощью метода КопииБазыДанных.Добавить(). Если создается копия для использования совместно с Дата акселератором, то параметра ВариантХраненияДанныхДатаАкселератора позволит указать вариант хранения базы данных Дата акселератора (значение типа системное перечисление ВариантХраненияДанныхДатаАкселератора):

● ВОперативнойПамяти ‑ база данных Дата акселератора хранится только в оперативной памяти.

● ВОперативнойПамятиИНаДиске ‑ база данных Дата акселератора хранится в оперативной памяти и на дисковом накопителе.

Для получения описания уже существующей копии базы данных следует использовать метод КопииБазыДанных.Найти().

2. Для выбранной копии выполняются настройки состава таблиц и полей с помощью объекта МенеджерКопииБазыДанных.

3. Затем выполняется сохранение новых настроек состава копии в основной базе данных с помощью метода МенеджерКопииБазыДанных.Записать().

4. Выполняется обновление данных в копии базы данных (включая структуру таблиц копии) с помощью метода КопииБазыДанных.Обновить(), указав в качестве параметра настраиваемую копию базы данных.

Таблицы, входящие в состав копии базы данных, управляются с помощью свойства МенеджерКопииБазыДанных.Состав. Но кроме указания таблиц, система «1С:Предприятие» позволяет управлять составом полей таблиц (структурой таблиц), которые попадают в копию. Для управления доступны следующие элементы объектов конфигурации:

● Для ссылочных объектов конфигурации:

● Реквизиты объекта.

● Табличные части и реквизиты табличных частей.

● Стандартные реквизиты и общие реквизиты, использующиеся для разделения данных, всегда включены в состав копии.

● Для регистров:

● Ресурсы и реквизиты регистров.

● Измерения регистров всегда включены в состав копии.

Управление структурой таблиц выполняется несколькими способами:

1. С помощью специальных свойств, описывающих поведение сразу для всех реквизитов некоторого вида. Этот способ рекомендуется для использования в качестве основного.

2. С помощью настройки отображения в копию конкретных реквизитов объекта.

К специальным свойствам относятся следующие свойства, которые доступны у объектов МенеджерКопииБазыДанных и ЭлементСоставаКопииБазыДанных:

● ИспользованиеХранилищЗначений. Данные свойство управляет использованием в копии реквизитов типа ХранилищеЗначения.

● ИспользованиеСтрокНеограниченнойДлины. Данные свойство управляет использованием в копии реквизитов типа строка неограниченной длины.

● ИспользованиеПрочихПолей. Данные свойство управляет использованием в копии реквизитов, не являющихся строками неограниченной длины и ХранилищеЗначений.

● ИспользованиеТабличныхЧастей. Данное свойство управляет наличием в копии базы данных табличных частей. Наличие в копии реквизитов табличных частей регулируется свойствами ИспользованиеХранилищЗначений, ИспользованиеСтрокНеограниченнойДлины и ИспользованиеПрочихПолей.

Элемент состава копии базы данных (объект типа ЭлементСоставаКопииБазыДанных) содержит свойство Поля. С помощью этого свойство можно по-реквизитно управлять наличием в копии конкретных реквизитов объекта конфигурации. Для этого предназначено свойство ПолеЭлементаСоставаКопииБазыДанных.Использование.

Для управления составом используется системное перечисление ИспользованиеПоляЭлементаСоставаКопииБазыДанных. Данное перечисление состоит из трех значений:

● Использовать ‑ реквизит (или табличная часть) используется в копии.

● НеИспользовать ‑ реквизит (или табличная часть) не используется в копии.

● Авто ‑ использование реквизита (или табличной части) в копии определяется родителем поля или глобальными настройками системы.

По умолчанию, каждый реквизит, который входит в состав объекта конфигурации, который отмечается как используемый в составе копии базы данных, получает свойство Использование, установленное в значение Авто (но это значение может быть изменено). Фактический вариант использования определяется по следующему алгоритму:

● Если свойство Использование конкретного реквизита в настройках имеет значение, отличное от значения Авто ‑ используется это значение. Если свойство Использование установлено в значение Авто ‑ для определения использования анализируется объект типа ЭлементСоставаКопииБазыДанных.

● В зависимости от того, для какого поля проверяется использование, анализируются следующие свойства объекта ЭлементСоставаКопииБазыДанных:

● Поле является табличной частью ‑ анализируется свойство ЭлементСоставаКопииБазыДанных.ИспользованиеТабличныхЧастей.

● Поле не является табличной частью, тогда анализируются следующие свойства (в зависимости от типа поля):

● Тип ХранилищеЗначения ‑ анализируется свойство ЭлементСоставаКопииБазыДанных. ИспользованиеХранилищЗначений.

● Тип строка неограниченной длины ‑ анализируется свойство ЭлементСоставаКопииБазыДанных.ИспользованиеСтрокНеограниченнойДлины.

● Остальные типы ‑ анализируется свойство ЭлементСоставаКопииБазыДанных.ИспользованиеПрочихПолей.

Если значение анализируемого свойства отличается от значения Авто ‑ используется оно. Если анализируемое свойство установлено в значение Авто, анализируется объект МенеджерКопииБазыДанных. Правила анализа описаны в данном пункте.

● Если в объекте МенеджерКопииБазыДанных значения свойств Использование… отличаются от значения Авто ‑ используются эти значения. Если эти свойства установлены в значение Авто, то используется следующий алгоритм:

● Если используется копия базы данных со стандартной репликацией, то правила следующие:

● Для табличных частей и реквизитов типа ХранилищеЗначений используется значение НеИспользовать.

● Для реквизитов остальных типов используется значение Использовать.

● Если используется копия базы данных с внешней синхронизацией ‑ для всех реквизитов используется значение Использовать.

Таким образом, для определения того, что реквизит должен находиться в копии базы данных, применяется следующая цепочка объектов (в порядке с первого к последнему):

1. ПолеЭлементаСоставаКопииБазыДанных.Использование;

2. затем ЭлементСоставаКопииБазыДанных;

3. затем МенеджерКопииБазыДанных;

4. затем умолчания платформы.

Как только на любом шаге определяется конкретное значение использования ‑ дальнейший поиск прекращается.

Рассмотрим простейший пример добавления в копию справочника, при этом добавляться должен весь справочник, кроме реквизитов типа ХранилищеЗначений. Подразумевается, что копия базы данных с именем TestCopy создана ранее и доступна для использования.

Копировать в буфер обмена

Копия = КопииБазыДанных.Найти("TestCopy"); ЭлементКопии = Копия.Состав.Добавить(Метаданные.Справочники.Товары); ЭлементКопии.ИспользованиеПрочихПолей = ИспользованиеПоляЭлементаСоставаКопииБазыДанных.Использовать; ЭлементКопии.ИспользованиеСтрокНеограниченнойДлины = ИспользованиеПоляЭлементаСоставаКопииБазыДанных.Использовать; ЭлементКопии.ИспользованиеТабличныхЧастей = ИспользованиеПоляЭлементаСоставаКопииБазыДанных.Использовать; ЭлементКопии.ИспользованиеХранилищЗначений = ИспользованиеПоляЭлементаСоставаКопииБазыДанных.НеИспользовать; Копия.Записать(); КопииБазыДанных.Обновить(Копия, Ложь);

Если требуется указывать наличие реквизитов в копии, то пример будет несколько другой. В следующем примере в копию будет добавлен справочник Товары. А для этого справочника будет включено размещение в копии реквизита Артикул. Подразумевается, что копия базы данных с именем TestCopy создана ранее и доступна для использования.

Копировать в буфер обмена

Копия = КопииБазыДанных.Найти("TestCopy"); ЭлементКопии = Копия.Состав.Добавить(Метаданные.Справочники.Товары); ПолеКопии = ЭлементКопии.Поля.Найти("Артикул"); ПолеКопии.Использование = ИспользованиеПоляЭлементаСоставаКопииБазыДанных.Использовать; Копия.Записать(); КопииБазыДанных.Обновить(Копия, Ложь);

Для определения фактического статуса использования реквизита объекта конфигурации в копии базы данных предназначен метод ПолеЭлементаСоставаКопииБазыДанных.ПолучитьТекущееИспользование(). Данный метод учитывает все особенности получения фактического значения использования.

26.6. Возможность создания копии в некоторой базе данных

Когда в прикладном решении используется механизм копий базы данных, то можно выделить следующие ключевые элементы взаимодействия:

● База данных ‑ это упорядоченный набор структурированных данных, расположенный в СУБД. Применяется как описание одноименного объекта в терминах используемой СУБД.

● Информационная база ‑ применяется в соответствии с определением (см. здесь).

● Копия базы данных ‑ это сущность, предназначенная для хранения и доступа к копии данных основной базы данных. Одновременно с этим имеется объект типа МенеджерКопииБазыДанных, который предоставляет методы для работы с копией.

Информационная база и копия базы данных хранят свои данные в базе данных. В базе данных информационной базы хранятся исходные данные, которые создаются (и изменяются) прикладным решением, а в базе данных копии хранятся данные, которые скопированы из информационной базы. В каждой информационной базе может быть создано несколько копий базы данных.

В этой схеме существует несколько проблем: одна и та же база данных может оказаться подключенной к разным копиям как одной, так и разных информационных баз; копия базы данных может оказаться подключенной к базе данных информационной базы. Во всех этих ситуациях данные, расположенные в «конфликтной» базе данных, могут оказаться разрушены. Для того, чтобы снизить вероятность возникновения подобного рода проблем, система «1С:Предприятие» предоставляет специальный интерфейс.

Метод УстановитьИспользованиеБазыДанныхКопииЭтойКопией() менеджера копии базы данных приведет к тому, что база данных копии будет «закреплена» за выбранным экземпляром копии базы данных. Для того, чтобы получить информацию о какой-либо базе данных, следует использовать метод менеджера копий базы данных ПолучитьИнформациюОбИспользованииБазыДанныхКопии(). Этот метод вернет информацию о том, что находится в базе данных (в терминах используемой СУБД), для которой вызывается метод. Другими словами, мы указываем в параметрах метода характеристики некоторой базы данных, про которую мы хотим понять, что находится в этой базе данных (в том числе, связанной с копией). Метод можно использовать с различным набором параметров: по параметрам базы данных, по имени копии (как она задана в информационной базе), по объекту типа МенеджерКопииБазыДанных. В результате работы метода возвращается значение типа ИнформацияОбИспользованииБазыДанныхКопии, в котором доступны свойства:

● ВариантИспользования ‑ описывает вариант использования проверяемой базы данных. Принимает значение системного перечисления ВариантИспользованияБазыДанныхКопии. Свойство может принимать одно из следующих значений:

● ИспользованиеНеизвестно ‑ невозможно определить назначение проверяемой базы данных. В такой базе данных допускается размещение данных копии.

● ИспользуетсяЭтойКопией ‑ в базе данных размещены данные этой копии текущей информационной базы.

● ИспользуетсяДругойКопией ‑ в базе данных размещены данные другой копии информационной базы. Копия может быть создана как в текущей, так и в другой информационной базе. В такой базе данных невозможно хранить данные копии текущей информационной базы. При необходимости использования базы данных с текущей информационной базой, необходимо вначале указать системе на то, что данная база данных теперь будет хранить данные копии текущей информационной базы с помощью метода УстановитьИспользованиеБазыДанныхКопииЭтойКопией().

● ИспользуетсяИнформационнойБазой ‑ в проверяемой базе данных располагается информационная база (любая). В такой базе данных нельзя располагать данные копии базы данных.

● Описание ‑ в этом свойстве расположена строка подключения к базе данных, информацию о которой мы получили в свойстве ВариантИспользования.

Метод Обновить() менеджера копий базы данных анализирует возможность работы каждой из обновляемых копий. Если работа невозможна ‑ будет сформировано исключение и данная копия перестанет обновляться. Из всего вышесказанного, в частности, следует, что одна база данных не может быть связан более чем с одной копией баз данных (неважно в одной или нескольких информационных базах). Из этого вытекает следствие: если при дублировании существующей информационной базы необходимо сохранить возможность работы с копией, то необходимо дублировать также и все, требуемые для работы копий, базы данных.

26.7. Информация о копии

Платформа «1С:Предприятие» позволяет получить информацию о состоянии копии базы данных. Для этого необходимо вызвать метод ПолучитьИнформациюОКопии() менеджера копеии базы данных. Метод вернет объект типа ИнформацияОКопииБазыДанных, который и содержит информацию о копии.

Рассмотрим, какую информацию предосталяет платформа:

Свойство

Описание

СерверБазыДанных

Тип: Строка.

Имя сервера СУБД или имя компьютера, на котором функционирует Дата акселератор. Для разных экземпляров копии может возвращать разное значение.

ВыполняетсяОбработкаДанныхДатаАкселератором

Тип: Булево.

Указывает на то, что Дата акселератор занят процессами обслуживания своей базы данных (значение Истина).

СостояниеКопии

Тип: СостояниеКопииБазыДанных.

Описывает текущее состояние копии базы данных. Свойство может принимать следующие значения:

● Включена ‑ может выполнять запросы.

● ВременноОтключена ‑ копия не может выполнять запросы из-за нехватки памяти Дата акселератору. По истечении таймаута платформа выполнит попытку снова использовать копию для выполнения запросов.

● Отключена ‑ не может выполнять запросы.

ПричинаОтключения

Тип: ПричинаОтключенияКопииБазыДанны.

Если копия базы данных может выполнять запросы, то данное свойство имеет значение Неопределено. В противном случае свойство может принимать одно из следующих значений:

● НедопустимыйВариантИспользованияБазыДанныхКопии ‑ копия не может быть использована для выполнения запроса из-за того, что база данных используется другой копией или информационной базой.

● НесответствиеДанных ‑ копия не может быть использована для выполнения запроса из-за того, что данные в копии не актуальны (не синхронизированы с основной базой).

● ОшибкаВыполненияЗапроса ‑ во время выполнения запроса произошла ошибка СУБД, в которой расположена копия.

● ОшибкаСоединенияСБазойДанных ‑ не удалось установить соединение с СУБД копии базы данных.

ОшибкаПричиныОтключения

Тип: ИнформацияОбОшибке.

При отсутствии ошибок свойство содержит значение Неопределено. При возникновении ошибки ‑ объект, описывающий ошибку, которая привела к недоступности копии для выполнения запросов.

КоличествоТаблицДляНачальногоОбновления

Тип: Число.

Количество таблиц базы данных, подлежащих переносу в копию.

КоличествоТранзакцийДляТекущегоОбновления

Тип: Число.

Количество транзакций, которые должны быть перенесены в копию (в момент вызова метода).

СостояниеОбновления

Тип: СостояниеОбгновленияКОпииБазыДанных.

Описывает состояние копии базы данных на момент вызова метода:

● ВыполняетсяНачальноеОбновление ‑ начальный перенос данных.

● ВыполняетсяТекущееОбновление ‑ текущий перенос данных в существующие таблицы копии.

● ЗавершеноОбновлениеПорцииУспешно ‑ процесс прерван по истечении таймаута при порционном обновлении.

● ЗавершеноСОшибкой ‑ процесс прерван по ошибке.

● ЗавершеноУспешно ‑ процесс успешно завершен.

● Неактивно ‑ обновление не выполняется, результат предыдущего процесса неизвестен.

ОбновляемыеДанные

Тип: ОбъектМетаданных.

Если начальный перенос данных не выполняется ‑ значение Неопределено. При выполнении начального обновления копии базы данных содержит ссылку на объект метаданных, чьи данные в момент вызова метода передавались в копию. Тип объекта принадлежит множеству типов, описанных в свойстве Состав менеджера копии базы данных.

ОшибкаОбновления

Тип: ИнформацияОбОшибке.

При отсутствии ошибок свойство содержит значение Неопределено. При возникновении ошибки ‑ объект, описывающий ошибку, которая послужила причиной преращения предыдущего процесса обновления.

ОжидаемоеВремяВыполнения

Тип: Число.

Прогнозируемое время (в секундах), через которое будет завершено обновление копии базы данных. Рассчитывается на соновании статистики предыдущих обгновлений. При отсутствии статистики содержит значение Неопределено.

Если, нарпимер, в диалоге управления копией базы данных, периодически вызывать метод ПолучитьИнформациюОКопии(), можно будет отображать текущую информацию о состоянии копии. Эта информация может быть востребована в различных административных инструментах системы.

26.8. Управление копиями

Для управления копиями базы данных в режиме 1С:Предприятия предназначена стандартная функция Управление копиями базы данных. Описание работы приводится в справке этой стандартной функции.