Создание *.dt файла из рабочей базы на сервере 1С без завершения работы пользователей

Публикация № 1181663

Администрирование - Администрирование данных 1С - Сервисные утилиты

Linux PostgreSQL CentOS Копирование Дамп

Предлагаемая обработка создает *.dt файл (выгрузку ИБ) из рабочей базы на сервере 1С:Предприятие 8.3 без завершения работы пользователей.

Часто, для сопровождения баз небольших организаций, программист 1С (или консультант) снимает копию рабочей базы для поиска ошибок или разработки дополнительного функционала. В случае файловой БД достаточно скопировать файл 1cv8.1CD, не "выгоняя" пользователей. В случае если используется SQL сервер, то копию базы можно получить средствами этого сервера и развернуть на другом SQL сервере. Однако бывает, что полученную копию просто негде развернуть - нет тестового sql сервера или NFR лицензии сервера 1C:Предприятие и базу нужно разворачивать как файловую.

Предлагаемая обработка сразу создает *.dt файл (выгрузку ИБ) из рабочей базы на сервере 1С:Предприятие 8.3 без завершения работы пользователей. Обработку можно запустить как в интерактивном режиме (Файл -> Открыть), так и загрузить в дополнительные обработки. Во втором случае формирование файла будет производится в фоне, не блокируя интерфейс. 

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

Проверено: Конфигурации на БСП 3 и выше, Платформа 8.3.14.1779, PostgreSQL 10, ОС CentOS 7

Не использовать для резервного копирования!!!

Скачать файлы

Наименование Файл Версия Размер
Обработка для создания *.dt файла без завершения работы пользователей:

.epf 11,03Kb
85
.epf 1.0.0.2 11,03Kb 85 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Indgo 20.01.20 00:55 Сейчас в теме
Умно придумал, а под виндой будет работать?
2. Sedaiko 393 20.01.20 01:29 Сейчас в теме
В теории должно. Сегодня проверю
3. Sedaiko 393 20.01.20 02:16 Сейчас в теме
(1) Работает и на винде, и на linux (CentOS). СУБД все четыре поддерживает (проверял на PG и MS)
4. tormozit 6224 20.01.20 07:02 Сейчас в теме
Если я правильно понял, суть подхода в запуске второго урезанного (автономного) сервера 1С параллельно с основным и выполнение выгрузки через утилиту ibcmd, подключенную к нему. Насколько это безопасно для корректности данных в основной базе?
milov.aleksey; +1 Ответить
5. Sedaiko 393 20.01.20 07:38 Сейчас в теме
(4)
через утилиту ibcmd
Используется только эта утилита. Запуск второго автономного сервера ibsrv не нужен. Это просто оболочка. Мне, например, удобно бывает "снять" базу через тонкий клиент (в т.ч. по http).
Насколько это безопасно для корректности данных в основной базе
Предостережений я не встречал.
6. Darklight 27 20.01.20 09:36 Сейчас в теме
Интересное решение. Надо будет опробовать
Вот тут есть статья про утилиту (там есть и первая часть про сам автономный сервер)
А вот тут небольшое дополнение о том, что сам автономный сервер для выгрузки в dt не нужен. Там же дана ссылка и на ИТС
7. hardcodder2020 20.01.20 11:25 Сейчас в теме
Работает только на БСП?
На типовой УТП или Бухгалтерия для Украины будет работать?
11. Darklight 27 20.01.20 14:40 Сейчас в теме
(7)По идет для ibcmd сама конфигурация должна быть без разницы. Тут только вопрос в том, что вот эта обработка какие-то функции из БСП дёргает - но уверен - это не проблема перенести эти функции из БСП в данную обработку при необходимости
8. VKislitsin 20.01.20 11:33 Сейчас в теме
Вставлю свои пять копеек.
В своей статье об утилите ibcmd, которая уже упомянута в (6) я написал фразу "пока не знаю, расценивать ли это как баг или как фичу, но для выгрузки dt-файла не требуется монопольный режим!"
Предполагаю что разработчики автономного сервера и этой утилиты всё же отнесут данное поведение к разряду ошибок. Но вот станут ли устранять, не могу предположить. По сути, это является параллельным подключением к СУБД. Точно также можно обойти требование монопольного режима параллельной "публикацией" базы в другом кластере. Это работает и на всех более ранних версиях платформы. Для устранения подобных эффектов и "жесткой" установки монопольного режима требуется, чтобы этот признак был в БД, а не в сервере. Не исключаю, что при выходе автономного сервера из бета-статуса такие изменения будут внесены в структуру БД.
user614213_vluminous; alextalov; +2 Ответить
9. Sedaiko 393 20.01.20 11:41 Сейчас в теме
(8) Вполне возможно что это и баг. Я изначально начал писать для PostgreSQL, где выполнялись pg_dump и pg_restote во временную БД. При таком раскладе уже можно и конфигуратором выгрузить хоть на 8.2. Потом понял, что для данной задачи достаточно и обычной выгрузки ibcmd
10. Darklight 27 20.01.20 14:37 Сейчас в теме
(9)Вы правильно указали, что для резервного копирования этот способ не годится - в силу того, что тут явно никак не гарантируется транзакционная целостность БД (так как данные действительно просто считываются из СУБД из завершённых транзакций - хотя тут ещё большой вопрос - а в каком режиме изоляции считаются данные - но в любом случае - блокировка сразу на все таблицы тут не накладывается - значит в процессе выгрузки одних таблиц последующие таблицы могут менять своё состояние и фиксировать его в транзакциях). Можно правда предположить наложение уровня изоляции SNAPSHOT (это для MS SQL Server, для других СУБД я не знаю как он называется; хотя у Oracle все транзакции по умолчанию в таком режиме), когда он разрешён в настройках (но обычно у всех кто уже работает с платформой 8.3 это должно быть разрешено) сразу на все таблицы - то это действительно не будет блокировать их работу и полученные выборки будут более менее консистентными (т.к. будут включать только версию данных на момент наложения уровня изоляции транзакции выборки сразу всех таблиц) - это будет почти соответствовать режиму снятия бэкапа "на лету" самой СУБД - где аналогичным образом будут получены только версии данных на момент начала бэкапа (хм... хотя честно не знаю - на какой момент - может там просто в бэкап будут включены транзакции от начала бэкапа каждой таблицы по отдельности и до конца всего бэкапа - и эти транзакции просто будут выполнены либо при его загрузке; но всё-таки первый вариант кажется более констистентным).

В любом случае - снятие бэкапа "на лету" средствами СУБД, загрузка его во временную БД (с последующим удалением) и потому же выгрузка из него средствами ibcmd в dt – будет куда надёжнее - хоть и потребует бОльших затрат ресурсов (в т.ч времени).

Мы делаем именно так - просто ранее не задействовали ibcmd - и просто использовали тот же кластер (или отдельный) 1С Предприятие, что и исходная база. Сейчас это можно оптимизировать через ibcmd - для нас в этом нет большой разницы - ведь основная нагрузка всё-равно ложится на СУБД (какой бы ни был сервер: продуктивный или девелоперский) а не на кластер 1С. Тем более, что у нас обычно не выгрузка в dt - а просто последующая загрузка SQL бэкапа в другую БД в т.ч. новую, в т.ч на другой СУБД (но у нас везде MS SQL Server - если нужно было бы переносить из одного вида СУБД в другой (например если бы тестовые СУБД были на PG) - то пришлось бы всегда делать через dt - для нас это редкость). И этот процесс у нас автоматизирован самописной конфигурацией 1С которая просто выполняет в фоне поток задач и запускает скрипты обслуживания (из шаблонов; с авто подстановкой параметров из задачи).
ansh15; Sedaiko; +2 Ответить
17. DNMit 1 29.01.21 22:31 Сейчас в теме
(10)
иц последующие таблицы могут менять своё состояние и фиксировать его в транзакциях). Можно правда предположить наложение уровня изоляции SNAPSHOT (это для MS SQL Server, для других СУБД я не знаю как он называется; хотя у
\
Поделитесь Вашим решением. Сами сейчас пытаемся всякими способами сделать бекап в dt не выгоняя пользователей. План действий очевиден
1 снимаем бекам средствами SQL
2 загружаем бекап (п.1) на другой 1С сервер , где тот же SQL и база..
3 выгружаем из п.2 бекап в dt

Как я понял Вы делаете ровно тоже самое, вопрос - чем и как? Поделитесь решением, т.к. мы ничего придумать не смогли. Сейчас колдуем с разными программами типа Handy Backup

Спасибо!
18. Darklight 27 01.02.21 09:44 Сейчас в теме
(17)Как уже написал - это самописная конфигурация. В неё много чего реализовано, помимо бэкапов. Разработка не моя, выложить не могу. Но в чём проблема сделать указанный функционал. Если без наворотов там всё просто:
- Элементарные скрипты выгрузки/загрузки базы средствами SQL Server (их полно в Интернет для разных СУБД) в backup (Или сразу приделать скрипты для использования ibcmd, хотя я остановился бы на сыквельных бэкапах)
- Отдельными документами 1С (у нас так, можно и справочниками) в сервисной ИБ регистрируются заявки на создание копии (откуда и куда - это всё ведётся в готовых справочниках - если скрипты, обновляющие их из кластеров 1С; вообще - ведение этих справочников это отдельная тема, не суть важная для данного вопроса, главное что там хранится информация об авторизации админа на серверах и в базах, и пути соединения)
- При записи управляющего документа - идёт проверка на наличие фонового процесса выполнения заданий - если его нет - он запускается
- При записи управляющего документов, если он не помечен как выполненный и по нему нет зданий - в регистре сведений формируется задание(я) на выполнение этого документа (в данном случае на выгрузку и загрузку бэкапа) со скриптами выполнения
- Фоновый процесс мониторит невыполненные задания - и выполняет их (в простейшем случае в один поток), в конец управлябщий документ помечается как выполненный
- По по выполненным документам идёт оповещение авторам
- По управляющим документам так же формируется задание-скрипт подчистки (отдельно помечается) - оно выполняется в любом случае, в конце выполнения заданий по документу (в т.ч если возникла ошибка выполнения)
- Об ошибках тоже идёт оповещение - автору документа и администратору системы

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

Сейчас конвеер выполнения задач модно оформлять через Jenkins - на Инфостарт есть публикации о взаимодействии Jenkins и 1С - 1С ИБ всё-равно удобно использовать как сервисную систему учета информационных баз и задач - у нас на такой конфигурации много внутренних сервисов навешано - но всё это уже индивидуально - для каждого предприятия своё!
Свою конфигурацию пока не продаём!
19. DNMit 1 01.02.21 11:00 Сейчас в теме
(18)
Спасибо за Ваш ответ.
По поводу "Элементарные скрипты выгрузки/загрузки базы средствами SQL Server (их полно в Интернет для разных СУБД)" , к сожалению не всё так просто, "Дьявол в деталях!" .
Услышал Вас. Будем думать, делать.
Вероятно где то знаний не хватает, оттуда и сложности.


Интересно конечно взглянуть на подобную конфигурацию. Судя по функционалу очень интересно.
20. Darklight 27 01.02.21 11:27 Сейчас в теме
(19)Дьявол всегда в деталях. У нас базы не выходят за рамки лиц. соглашений 1С - поэтому скрипты банальны. А так да - средствами СУБД можно много чего с базой сотворить (например секционировать и распределить по разным файлам), что немного усложняет ей сохранение/восстановление. Или если используются разные СУБД и разные виды ОС. Скриптами у нас администратор баз данных занимается (по сути админ, побывавший на нескольких специализированных курсах), а не программисты
12. user1274438 20.01.20 17:55 Сейчас в теме
Вот-вот.
Понаделают выгрузок в dt, а потом на мисте хоят и спрашивают, что с ними делать
https://forum.mista.ru/topic.php?id=849662

P.S.
Бэкап средствами СУБД - наше все!
Darklight; milov.aleksey; 7OH; Sedaiko; +4 Ответить
13. kotov2000 5 03.03.20 15:51 Сейчас в теме
Протестировал. Отлично выгружает.
14. ViktorG 27.05.20 10:08 Сейчас в теме
А для обычных форм такого нет?
15. Sedaiko 393 27.05.20 12:20 Сейчас в теме
(14) Нет. Поставьте на сервер демо-конфигурацию БСП и из нее запускайте
16. Darklight 27 20.11.20 16:59 Сейчас в теме
(14)Можете вставить обработку в свою конфигурацию - тогда её можно будет запускать из обычного приложения этой конфигурации. Ну или перепишите свою неуправляема. форму - тут нет сложных алгоритмов (а потом выложите для таких же страждущих)
Оставьте свое сообщение

См. также

Блин, мы забыли включить регламентные задания… Промо

Сервисные утилиты v8 Абонемент ($m)

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

1 стартмани

08.04.2019    19668    18    slozhenikin_com    37