Создание распределенной информационной базы (РИБ) — это стандартная задача при масштабировании бизнеса, организации работы удаленных филиалов или торговых точек. Однако на практике администраторы часто сталкиваются с крайне неприятной проблемой: при попытке выполнить команду "Создать начальный образ" система 1С:Предприятие зависает «наглухо». Процесс может длиться часами, диспетчер задач показывает статус «Не отвечает», а оперативная память и ресурсы процессора утилизируются неравномерно.
В этой статье мы подробно разберем, почему стандартный механизм создания РИБ дает сбои на базах среднего и крупного размера (начиная от 2–5 Гб), как правильно диагностировать это состояние и какие существуют альтернативные, гораздо более быстрые методы создания подчиненных узлов, включая метод создания узла из резервной копии.
Для того чтобы эффективно бороться с зависанием, давайте сначала проанализируем внутренние технические процессы, которые запускает платформа 1С при формировании начального образа:
TEMP. Если этот каталог расположен на медленном HDD-диске или на системном разделе банально не хватает свободного места (которого для успешной выгрузки базы в 10 Гб может потребоваться до 30–40 Гб), процесс останавливается или аварийно прерывается.rphost). Если лимиты превышены, сервер аварийно перезапускает рабочий процесс, прерывая генерацию образа.Давайте рассмотрим основные способы преодоления этой проблемы — от простых оптимизаций до кардинального изменения подхода.
Как показывает практика практикующих администраторов, клиент-серверный вариант работы 1С при выгрузке начального образа на базах среднего объема часто ведет себя нестабильно из-за системных ограничений транзакций SQL и серверных процессов. Если база имеет объем до 5–10 Гб, самым простым (хотя и требующим времени) решением будет временный перенос базы в файловый режим.
Разберем этот процесс по шагам:
.dt).1cv8.exe. Если показатели использования процессора (CPU) и оперативной памяти динамически меняются (плавают вверх-вниз), это означает, что платформа работает и производит сериализацию данных. Просто наберитесь терпения. На базах объемом 2.5 Гб этот процесс в файловом режиме может занимать от 3 до 8 часов.Если вы все же решили использовать стандартный механизм создания образа непосредственно на сервере, выполните комплекс обязательных подготовительных мероприятий:
TEMP и TMP для пользователя, под которым запускается служба сервера 1С или локальный сеанс, на самый быстрый доступный SSD-диск с большим запасом свободного дискового пространства.В условиях работы на 32-битных версиях платформы 1С:Предприятие часто возникает критическая нехватка адресного пространства памяти (процесс не может утилизировать более 2–4 Гб оперативной памяти). В этом случае стандартная выгрузка падает с ошибкой нехватки памяти.
Для обхода этой проблемы мы можем применить метод "пустого обмена":
Этот метод кропотлив, но он позволяет гарантированно передать данные на периферию без риска переполнения оперативной памяти на слабом оборудовании.
Когда перед системным администратором встает задача развернуть узел РИБ для базы размером 10 Гб и более (например, для крупной базы "1С:Бухгалтерия"), стандартный метод выгрузки становится практически нежизнеспособным. Процесс может длиться сутками и прерываться из-за малейшего сетевого сбоя.
В этой ситуации профессионалы используют метод создания периферийного узла из полной копии центральной базы. Физическое копирование базы средствами СУБД или операционной системы происходит в десятки раз быстрее, чем сериализация объектов силами платформы 1С. Разобьем этот процесс на подробные шаги.
Шаг 1. Создание узла в центре. В центральной базе перейдите в нужный план обмена и создайте новый подчиненный узел. Задайте ему уникальный код (например, "УЗ1") и наименование. Запишите узел.
Шаг 2. Создание физической копии. Сделайте полную копию центральной базы данных. Если база файловая — скопируйте файл 1Cv8.1CD. Если база работает на MS SQL Server или PostgreSQL — сделайте резервную копию средствами СУБД и разверните её на сервере под новым именем. Эта копия и станет нашей будущей подчиненной базой.
Шаг 3. Отключение признака главного узла в копии. Наша созданная копия базы всё еще «считает» себя центральной базой. Нам необходимо принудительно отключить этот статус, чтобы превратить её в подчиненный узел. Для этого запустите Конфигуратор созданной копии базы через командную строку со специальным параметром:
1cv8.exe DESIGNER /F "ПутьКВашейКопииБазы" /ResetMasterNode
Если база клиент-серверная, используйте параметр /S вместо /F с указанием имени сервера и базы данных. После успешного выполнения этой команды база перестанет считать себя главной.
Также этот шаг можно выполнить программно. Для этого запустите копию базы в режиме "Предприятие" и выполните следующий код во внешней обработке:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Шаг 4. Перенастройка узлов внутри подчиненной базы (копии). Запустите копию базы в режиме «Предприятие». Перейдите в настройки соответствующего плана обмена. Нам необходимо поменять узлы местами:
"УЗ1")."ЦБ").Шаг 5. Очистка лишней регистрации изменений. В скопированной базе данных осталась старая информация о регистрации изменений для других узлов, а также ненужные настройки обменов. Ее необходимо полностью удалить. Вы можете воспользоваться типовой обработкой "Регистрация изменений для обмена данными" или запустить программную очистку следующим кодом:
ВыборкаУзлов = ПланыОбмена.Выбрать();
Пока ВыборкаУзлов.Следующий() Цикл
// Пропускаем текущий предопределенный узел
Если ВыборкаУзлов.Ссылка = ПланыОбмена.ЭтотУзел() Тогда
Продолжить;
КонецЕсли;
// Очищаем регистрацию всех объектов для данного узла
ПланыОбмена.УдалитьРегистрациюИзменений(ВыборкаУзлов.Ссылка);
КонецЦикла;
Шаг 6. Установка связи с главным узлом. Теперь нам осталось явно указать нашей новой периферийной базе, кто является для нее главным узлом. Для этого выполните в копии базы следующий программный код:
// Находим ссылку на узел, соответствующий центральной базе
УзелЦентра = ПланыОбмена.ОбменВРаспределеннойИнформационнойБазе.НайтиПоКоду("ЦБ");
Если Не УзелЦентра.Пустая() Тогда
ПланыОбмена.УстановитьГлавныйУзел(УзелЦентра);
Сообщить("Связь с главным узлом успешно установлена!");
Иначе
Сообщить("Не удалось найти узел с кодом ЦБ!");
КонецЕсли;
После выполнения этого кода закройте базу. При следующем запуске система определит себя как полноценный подчиненный узел РИБ.
Шаг 7. Первый запуск и синхронизация. Настройте транспортные параметры обмена (каталог обмена, FTP или подключение по электронной почте) как в центральной базе, так и в созданном подчиненном узле. Произведите первый запуск обмена. Поскольку базы идентичны по структуре и составу данных, первая синхронизация пройдет мгновенно и без ошибок.
Если база данных 1С зависает при попытке создания начального образа РИБ, не нужно тратить дни на ожидание завершения работы нестабильного штатного механизма. Для небольших баз эффективным решением будет временный переход в файловый режим работы с очисткой кэша конфигурации. Для баз объемом свыше 5–10 Гб единственным по-настоящему надежным и быстрым решением является альтернативное создание РИБ из резервной копии базы с последующим программным переназначением главных узлов. Этот метод экономит время администратора и гарантирует 100% результат.