Быстрое создание периферийных баз больших размеров.

Ни для кого не секрет, что создание периферийных dbf-баз при большом количестве информации —  достаточно длительный процесс, т.к. 1С полностью пересчитывает все данные по регистрам. Но есть способ сделать это достаточно быстро. Нужно лишь немного обмануть 1С…
Если сравнить две базы – периферийную и центральную, то отличие будет только в файлах 1SDBSET.DBF (хранит для центральной базы список все баз, для периферийной – 2 записи, идентификаторы центральной и периферийной базы) и 1SSYSTEM.DBF (хранит идентификаторы текущей базы). Файл 1SUPDTS.DBF не учитываем. Таким образом, чтобы получить периферийную базу нам нужно просто создать копию центральной базы и модифицировать эти файлы. Но делать это руками, мягко говоря, не стоит.

Можно воспользоваться следующим порядком действий:

1. В центральной базе создать новую периферийную базу.
2. Выгрузить первоначальный образ периферийной базы.
3. Теперь необходимо из этого образа получить два файла, которые были указаны ранее. Проще всего это сделать так, в пустую папку загружаете первоначальный образ базы, но прерываете загрузку после появления в каталоге необходимых файлов. Как правило, 1С их создает первыми сразу после распаковки из архива первоначального образа.
4. Создаете копию центральной базы, удаляете из нее *.cdx и 1SUPDTS.DBF, а также заменяете файлы 1SDBSET.DBF и 1SSYSTEM.DBF полученными в п.3… и все. Осталось только провести переиндексацию.

Время необходимое для создания периферийной базы на примере 2-х годичной базы размером 4 Гб:
стандартным способом
1. Выгрузка данных 15 минут
2. Загрузка данных 14 часов.
этим методом
1. Выгрузка данных: 15 минут
2. Копирование базы, удаление файлов, замена файлов, переиндексация: 20 минут

Разница очень серьезная.

Но этот способ имеет главный недостаток: при загрузке данных стандартным способом 1С выполняет полную проверку данных, таким образом устраняя часть проблем имеющихся в базе. А для предложенного варианта необходимо будет выполнить тестирование и исправление (если установить все галки, то занимает около 10 часов).

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

4 Comments

  1. mihenius

    Все гениальное просто

    Reply
  2. ssp_

    Небольшая поправочка: это если для всех объектов стоит миграция «Все информационные базы». ИМХО у тех, кто всерьез использует УРИБ, это часто не так.

    Reply
  3. Shaman100M

    хороший метод, много времени сэкономил.

    Reply
  4. mongolv

    Плюсую, от себя добавлю: метод так же хорош при утере центральной базы. Был случай: слетел сервер с центральной базой, наглухо. С бэкапами протянул и по человечачи не сделал. Короче — атас, размер 10гб (SQL), ни о какой выгрузке стандартными средствами речи и быть не может, и дело не во времени, просто 1с77 этого не умеет при огромных размерах (файловая 8 кстати тоже). И так:

    1. копируем периферию (любую самую актуальную)

    2. в таблице 1SDBSET меняем М на С (указываем что периферия не является текущей базой)

    3. в таблице 1SDBSET меняем P на M (указываем текущая база будет центральной)

    4 Поле DBFNCP DBFNPC, меняем местами и переносим на строчку периферии.

    5 Сюда же накидываем остальные периферийные базы, не забывая про DBSIGN, DBUUID (лучше взять из самих баз)

    6. чистим 1SUPDTS — оно нам не надо, править охренеешь

    7 1SSYSTEM не трогаем

    Ну а дальше веселуха)) дальше надо путем манипуляций с 1SDWNLDS надо провести все обновления с того момента как слетела база..

    DWNLDID — Идентификатор сессии обмена тупо порядковый номер, с добавлением кода базы откуда обновление Но с малой поправкой, пересчет идет с 0 до 9 , а потому буковы (не 16 ричная система, больше, насколько? мозг не грел)

    DBSIGN — Код базы, с которой идет данный обмен.

    DIRECT — O — Пакет является исходящим для текущей базы, I — Входящим

    ACKNOWL — A — Признак подтвеждения обработки пакета

    примерная логика такова:

    в периферии находим последний входящий с подтверждением (DIRECТ — I, ACKNOWL — A)

    и переносим в центральную предварительно ее вычистив, меняем I на O, и удаляем А

    и так со всеми периферийными базами. Важно: не проводить обмен, пока все записи не будут готовы.

    Всем благ, может кому поможет)) я на этом сэкономил около 4 дней)

    7.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *