gifts2017

Обновление большого количества типовых баз с помощью хранилища конфигураций

Опубликовал 0vrcr PesskoFF (0vrcr) в раздел Администрирование - Системное

Надоело обновлять 100 типовых баз БП и ЗиУП руками? Милости просим!

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

Итак:

Хранилище конфигураций 1С по своей сути является системой контроля версий. Главным удобством хранилища для обновления баз является возможность пакетного запуска 1С и обновления конфигурации из этого хранилища. Как это выглядит на деле: для каждой поддерживаемой конфигурации создается хранилище. Эти хранилища обновляются штатными методами по факту выхода новых релизов от поставщиков. Чтобы обновить "боевую" базу 1С из этого хранилища требуется последовательно запустить 1С в режиме конфигуратора с ключами

1) ConfigurationRepositoryF("Путь к хранилищу") /ConfigurationRepositoryN("Пользователь хранилища") /ConfigurationRepositoryP("Пароль пользователя хранилища") /ConfigurationRepositoryUpdateCfg

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

2) /UpdateDBCfg

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

1) /CЗавершитьРаботуПользователей - для того, чтобы отключить всех пользователей (тут присутствуют известные проблемы с модальными окнами и запросами на выход из системы)

2) /CРазрешитьРаботуПользователей /UCКодРазрешения - для разрешения работы.

ВАЖНО! Если используется запрет на работу пользователей, то при обновлении базы необходимо добавлять ключ /UCКодРазрешения.

 

Итого, для обновления мы получаем всего 4 последовательных операции:

ENTERPISE /F"Путь" /N"Юзер" /P"Пароль" /CЗавершитьРаботуПользователей

DESIGNER /F"Путь" /N"Юзер" /P"Пароль" /ConfigurationRepositoryF"Путь к хранилищу" /ConfigurationRepositoryN"Пользователь хранилища" /ConfigurationRepositoryP"Пароль пользователя хранилища" /ConfigurationRepositoryUpdateCfg /UCКодРазрешения

DESIGNER /F"Путь" /N"Юзер" /P"Пароль" /UpdateDBCfg /UCКодРазрешения

ENTERPISE /F"Путь" /N"Юзер" /P"Пароль" /CРазрешитьРаботуПользователей /UCКодРазрешения

Загоняем в цикл по своим базам и радуемся жизни.

Казалось бы все элементарно, но существует ряд ошибок, которые, судя по форумам, встречаются довольно часто.

  1. Пытаемся завершить/разрешить работу пользователей в режиме конфигуратора
  2. Пытаемся обновить конфигурацию, к которой запрещен доступ, не используя /UCКодРазрешения
  3. Забываем, что лучший штатный механизм для получения монопольного режима - телефон Laughing

 Конечно, статья не станет откровением для гуру, но новичкам вполне может пригодиться.

 

UPD: Типовая БП 2.0.12.2 обновляется до 2.0.42.6 за 6.5 минут (замер производился без данных в базе)

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Макас (makas) 06.12.12 10:23
Конечно, статья не станет откровением для гуру, но новичкам вполне может пригодиться


Ха-ха-ха! Пригодится и некоторым программерам, которые приходят и обновлять 1С и балду пинают пару часов, делавид что трудная работа = обновлять!
2. qweasd qweasdzc (serega3333) 06.12.12 11:52
а через инет я как к хранилищу буду подрубаться?
3. 0vrcr PesskoFF (0vrcr) 06.12.12 12:03
(2) VPN в руки, какие проблемы? в путях можно использовать ip-адреса. Или я не понимаю сути вопроса?
4. Никита Коротаев (bforce) 06.12.12 12:31
Почему для обновления обязательно использовать хранилище? Разве не будет достаточно написать такой же пакетный файл для обычного обновления конфигурации?
Указал файл обновления поставщика и с теми же ключами командной строки обновил все базы... Я так делаю пакетное обновление застарелых конфигураций, когда нужно избежать прыжков через несколько версий сразу.
5. Никита Коротаев (bforce) 06.12.12 12:34
(2) serega3333, а так не прокатит?
/ConfigurationRepositoryF "http://my.global.rep/accounting"
6. 0vrcr PesskoFF (0vrcr) 06.12.12 12:44
(4) в хранилище у нас всегда самая последняя версия. Для обновления из файла можно использовать /UpdateCfg"ИмяФайла". Но ведь при каждом последующем обновлении этот .cf-ник надо будет заменять
7. Никита Коротаев (bforce) 06.12.12 12:54
(6) 0vrcr, ну, на мой скромный взгляд, при работе с хранилищем действий больше.
С Хранилищем: устанавливаем обновление, захватываем все в хранилище, находим cfu, обновляем локальную базу, помещаем в хранилище, запускаем скрипт.
Без Хранилища: устанавливаем обновление, находим cfu, запускаем скрипт.

Ну, а функционирование хранилища та еще песня... Кто-то неграмотный зашел в конфигуратор и отключился от хранилища, а потом еще что-то подправил (конфа, ведь, с поддержки снята). А раз конфа снята с поддержки, то обновления будут проходить дольше, хотя если получаются только изменения из хранилища, то, возможно, даже быстрее...
8. qweasd qweasdzc (serega3333) 06.12.12 13:07
(3) 0vrcr, это я так понял помогает в локальной системе, на вашем предприятии...а пришел я к клиенту просто, у него обычный инет...щас я качаю файл с its сайта, а должен из хранилища?
9. 0vrcr PesskoFF (0vrcr) 06.12.12 14:11
(7) Не надо подключать рабочие базы к хранилищу, и тогда никто их не отключит, т.к. нечего отключать. Вся прелесть моего метода как раз в том, что есть только одна база, подключенная к хранилищу, не рабочая. Все остальные базы просто ползут в папку хранилища и берут оттуда обновление. Доступ к своей базе, которая хранилище и образует надо паролить, да и все. А в самой базе можно постоянно держать хранилище захваченным рекурсивно, чтобы не выполнять лишних телодвижений. Благо, никто не мешает помещать новые данные в хранилище без отпускания объектов метаданных. Да плюс история, которая позволит резво откатить все базы сразу, в том случае, если в обновлении был косяк разрабов

(8) Мы говорим об абсолютно разных вещах. Но если уж на то пошло - поясняю. Если у клиента 100500 баз и надо их резво обновить на один релиз, то быстрее использовать механизм из (4) + (6). Если надо проползти много релизов, то проще создать голую базу, накатить на нее обновления, создать из этой базы хранилище, а уже потом воспользоваться методом, описанным в статье.
10. Никита Коротаев (bforce) 06.12.12 14:25
(9) 0vrcr, суть вашего метода мне понятна. И методы работы с хранилищем всем известны. У меня остаются только вопросы по
  • Необходимости именно хранилища. Преимущество только в том, что вы что-то можете откатить, указав версию. Как часто такое будет необходимо? Я могу точно также хранить cf файлы всех релизов и выбрав нужный подсуну его в свой скрипт
  • Размер базы (конфигурации). Вы увеличиваете размеры баз из-за того, что снимаете их с поддержки
  • Вы замедляете обновление за счет того, что конфа не на поддержке и системе приходится анализировать все объекты.
  • Вы качаете полный cf из хранилища, что происходит катастрофически долго (проверено на практике на 16-й платформе), потому что в момент подключения к хранилищу оно еще "компонует" из себя нужный cf файл. И так каждый раз, и не важно, что версия одна и та же. Кэш в этом случае не помогает.
11. 0vrcr PesskoFF (0vrcr) 06.12.12 14:35
(10) bforce,
Размер базы (конфигурации). Вы увеличиваете размеры баз из-за того, что снимаете их с поддержки

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

Вы замедляете обновление за счет того, что конфа не на поддержке и системе приходится анализировать все объекты.

Опять же, о чем Вы? Вы используете хранилище только на снятых с поддержки конфигурациях? :)

Вы качаете полный cf из хранилища, что происходит катастрофически долго (проверено на практике на 16-й платформе), потому что в момент подключения к хранилищу оно еще "компонует" из себя нужный cf файл. И так каждый раз, и не важно, что версия одна и та же. Кэш в этом случае не помогает.

С этим я я согласен, но то же самое происходит, если сразу кушать cf-файл
12. 0vrcr PesskoFF (0vrcr) 06.12.12 14:45
(10) Вероятно, для ускорения процесса имеет смысл выгружать из хранилища cf, а уже его подпихивать для обновления. Но надо бы замерить. У меня сложилось четкое ощущение, что типовые конфигурации через хранилище обновляются со скоростью света
13. Никита Коротаев (bforce) 07.12.12 00:37
(11) 0vrcr,
Зачем что-либо снимать с поддержки, о чем Вы? В конфигурациях рабочих баз вообще никаких изменений производит не надо.

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

PS. Попробуйте еще использовать ключ /UpdateDBCfg после ключа /ConfigurationRepositoryUpdateCfg. Они вместе должны работать. Одной строчкой кода станет меньше.
14. 0vrcr PesskoFF (0vrcr) 07.12.12 09:12
(13) bforce, именно, что цепляется и прелестно обновляется "зазамоченная версия". Однако, сегодня устрою тестовые запуски в трех вариантах:
  • Именно из хранилища
  • Выгрузкой .cf-из хранилища и обновление через него (хотя не уверен, что имеет смысл)
  • Обновление именно из cf
Притом возьму заведомо большой промежуток между релизами. Потом посмотрим как пройдет ОбновлениеКонфигурации.
Результаты выложу в тему

Они вместе должны работать.
Вот почему-то у меня отложилось, что не отрабатывало так... При замере сегодня попробую
15. 0vrcr PesskoFF (0vrcr) 07.12.12 09:50
Они вместе должны работать.
Вот почему-то у меня отложилось, что не отрабатывало так... При замере сегодня попробую

Действительно работает, спасибо. Первый замер есть, через хранилище. Сейчас буду делать замер через .cf-ник, потом выложу результаты в шапку
16. Никита Коротаев (bforce) 07.12.12 10:27
(14) 0vrcr, в третьем пункте имеется ввиду файл обновления cfu или полный cf?
17. 0vrcr PesskoFF (0vrcr) 07.12.12 10:34
(16) bforce, полный .cf. Но почему-то у меня не обновляет пакетно с ключом запуска:
/UpdateCfg"C:\Хранилище\1Cv8.cf" /UpdateDBCfg /UCКодРазрешения

А вот из хранилища типовая БП 2.0.12.2 (чистая) обновилась до 2.0.42.6 за 6.5 минут. Имхо, очень даже неплохой результат!

-----------------------
Тест1: 07.12.2012 9:28:52
9:28:57: Завершена и запрещена работа пользователей
9:35:46: Конфигурация обновлена из хранилища
18. Никита Коротаев (bforce) 07.12.12 16:33
Но почему-то у меня не обновляет пакетно с ключом запуска:
/UpdateCfg"C:\Хранилище\1Cv8.cf" /UpdateDBCfg /UCКодРазрешения
(17) 0vrcr, У меня в скрипте работает с ключом /LoadCfg, а здесь написано, что может работать и со всеми остальными.
19. Владимир (oberon355) 10.12.12 09:05
Походу я чего то не понимаю.... Разве не нужно последовательно обновлять через cfu ? Помню пытался обновлять через cf, получил облом. C тех пор храню полный набор cfu для рабочих конфигураций. Я так понял что халяву как в 7 ке прикрыли. Или я не прав?
20. 0vrcr PesskoFF (0vrcr) 10.12.12 09:13
(19) вообще нежелательно делать полную загрузку из .cf. А обновление проходит нормально, выполняет нужные скрипты в режиме предприятия. Так что тебя обманули :)
21. Владимир (oberon355) 10.12.12 09:46
(20) Никто меня не обманывал, сам ошибся. Надо будет попробовать еще раз. Спасибо за подсказку!
22. Наталия Мастербатова (zzz_natali) 12.12.12 18:14
(про себя): --А еще он обозвал тебя земляным червяком! (с) Маугли
(вслух): добавьте хотя бы в свои батники процедуру бакапа базы перед обновлением
23. 0vrcr PesskoFF (0vrcr) 12.12.12 19:17
(22) zzz_natali, бекапить это святая обязанность каждого. В данной статье вопрос бекапа мы не рассматриваем. Но вообще /dumpIB путь
24. Данила Елистратов (CagoBHuK) 17.12.12 18:19
Все, конечно, хорошо. А что делать с http://i45.tinypic.com/347tquq.png ?
25. 0vrcr PesskoFF (0vrcr) 17.12.12 19:54
НЕ надо держать рабочие базы подключенными к хранилищу. Базы подключаются к хранилищу только на момент обновления, автоматически, скриптом. Вручную держать их подключенными не надо
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа