Автономный сервер. Часть 2 - утилита управления

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

Администрирование - Администрирование СУБД

Утилита управления "Автономным сервером" может не только управлять. Какие возможности можно использовать уже сегодня? Разбираем с примерами и ищем отличия от привычных методов.

В первой части статьи был рассмотрен собственно Автономный сервер – приложение ibsrv, его преимущества, ограничения, показания к использованию.

Перейдем ко второй части, представляющей для кого-то, возможно, даже больший интерес. В первую очередь, думаю, это должно заинтересовать адептов CI-CD.

Утилита администрирования – ibcmd

Утилита администрирования на текущий момент предоставляет два режима работы

  • Server – в этом режиме создаются или изменяются конфигурационные файлы для Автономного сервера.
     
  • Infobase – предназначен для выполнения различных действий с информационными базами: создание, загрузка/выгрузка, импорт/экспорт и т.д.
     

Режим "server"

Режим работы server тесно связан с самим «Автономным сервером»

Главным его назначением является формирование корректного файла настроек для Автономного сервера, в формате YML.

Например, приведенная ниже команда, на основании переданных параметров и значений по умолчанию, сформирует файл sb_demo.yml, который далее можно указывать как самому серверу ibsrv, так и утилите управления ibcmd вместо длинной цепочки параметров.

>ibcmd server config init --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 "%tmp%\sb_demo.yml"

 Содержимое созданного файла sb_demo.yml:

server:
  address: localhost
  port: 8314
database:
  dbms: MSSQLServer
  server: localhost
  name: sb_demo
  user: test_db_user
  password: test_pwd_123
infobase:
  id: 9f28e93a-85a7-4c5c-9860-78e461a83815
  name: 9f28e93a-85a7-4c5c-9860-78e461a83815
  distribute-licenses: yes
  schedule-jobs: allow
http:
  base: /

На этом, пожалуй, описание режима server можно считать исчерпанным.
 

Режим "infobase"

Второй режим работы, infobase, совершенно не зависим от Автономного сервера и может применяться самостоятельно, с любыми базами – файловыми или расположенными в СУБД. Для СУБД-баз при этом совершенно не важно, зарегистрирована ли база на сервере 1С или нет. Взаимодействие идет напрямую с СУБД. 

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

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

>ibcmd infobase dump --config="%tmp%\sb_demo.yml" "%tmp%\sb_demo_2.dt"

Создание базы

Начнем, как обычно, с самого простого примера. Создадим файловую базу.

>ibcmd infobase create --db-path="d:\test\demo_db"
C:\Program Files (x86)\1cv8\8.3.14.1630\bin>ibcmd infobase create --db-path="d:\test\demo_db"
[ INFO] Создание информационной базы...
[ INFO] Создание информационной базы успешно завершено

В результате выполнения команды, создан каталог "d:\test\demo_db" и в нём размещена пустая база 1С – файл 1Cv8.1CD (и пара служебных файлов .cfl)

Одновременно с созданием, одной командой можно выполнить дополнительные действия:

  • Загрузить базу из dt-файла
  • Загрузить конфигурацию из cf-файла
  • Загрузить конфигурацию из XML-файлов
     
Создать и загрузить выгрузку из dt-файла. 
>ibcmd infobase create --db-path="d:\test\demo_db" --restore="E:\1C_templates\1c\smallbusiness\1_6_18_156\ОпцииВкл.dt"
C:\Program Files (x86)\1cv8\8.3.14.1630\bin>ibcmd infobase create --db-path="d:\test\demo_db" --restore="E:\1C_templates\1c\smallbusiness\1_6_18_156\ОпцииВкл.dt"
[ INFO] Создание информационной базы...
[ INFO] Создание информационной базы успешно завершено
[ INFO] Загрузка информационной базы...
[ INFO] Загрузка информационной базы успешно завершена

 

Создать и загрузить Конфигурацию из cf-файла.

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

>ibcmd infobase create --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 --create-database --load="%tmp%\sb_demo.cf"
C:\Program Files\1cv8\8.3.14.1630\bin>ibcmd infobase create --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 --create-database --load="%tmp%\sb_demo.cf"
[ INFO] Создание информационной базы...
[ INFO] Создание информационной базы успешно завершено
[ INFO] Загрузка конфигурации...
[ INFO] Загрузка конфигурации успешно завершена

Замечание. При создании базы в СУБД, смысл команды create правильнее было бы назвать «инициализацией», т.к. выполняется создание структуры таблиц и индексов в существующей базе данных. Если же базы данных не существует, будет выдана ошибка. Чтобы при отсутствии базы данных она была создана, требуется указать ключ --create-database, аналогично установке флажка «Создать базу данных в случае её отсутствия» в консоли кластера. 

Создать и загрузить Конфигурацию из XML-файлов.

Меняем ключ загрузки на --import и указываем каталог с исходниками.

>ibcmd infobase create --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 --create-database --import="%tmp%\sb_demo_export"
C:\Program Files\1cv8\8.3.14.1630\bin>ibcmd infobase create --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 --create-database --import="%tmp%\sb_demo_export"
[ INFO] Создание информационной базы...
[ INFO] Создание информационной базы успешно завершено
[ INFO] Импорт конфигурации из XML...
[ INFO] Импорт конфигурации из XML успешно завершен  

Замечание. Загрузка конфигурации из cf-файла или XML-файлов выполняется в «основную» Конфигурацию информационной базы. Конфигурация базы данных после такой операции остается прежней. Чтобы сразу после загрузки произвести обновление конфигурации базы данных, можно добавить ключ --apply.

Загрузка и выгрузка сf, cfe, dt, xml

Разумеется, загрузку dt, cf, cfe, xml-файлов можно выполнить и отдельными командами, без создания информационной базы. Выгрузка во всех поддерживаемых форматах также присутствует.

Загрузка dt-файла:

>ibcmd infobase restore --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 "E:\1C_templates\1c\smallbusiness\1_6_18_156\ОпцииВкл.dt"

Выгрузка dt-файла:

>ibcmd infobase dump --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 "%tmp%\sb_demo.dt"

Загрузка конфигурации из cf-файла:

>ibcmd infobase config load --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 "%tmp%\sb_demo.cf"

Выгрузка конфигурации в cf-файл:

>ibcmd infobase config save --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 "%tmp%\sb_demo.cf"

Замечание. Для команды выгрузки конфигурации save по умолчанию выгружается конфигурация базы данных, а не основная. Для того, чтобы сохранить основную конфигурацию, необходимо указать ключ --staging

Загрузка конфигурации из XML-файлов:

>ibcmd infobase config import --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 "%tmp%\sb_demo_export"

Выгрузка конфигурации в XML-файлы:

>ibcmd infobase config export --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123 "%tmp%\sb_demo_export"

Замечание. Для команд загрузки и выгрузки конфигурации доступно указание ключа --extension и имени расширения, которое нужно загрузить или выгрузить.

Обновление конфигурации базы данных

После загрузки Конфигурации или расширения, конечно же, требуется обновить конфигурацию базы данных.

>ibcmd infobase config apply --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123
C:\Program Files\1cv8\8.3.14.1630\bin>ibcmd infobase config apply --db-server=localhost --dbms=MSSQLServer --db-name=sb_demo --db-user=test_db_user --db-pwd=test_pwd_123
[ INFO] Обновление конфигурации базы данных...
[ INFO] Проверка корректности метаданных...
[ INFO] Обработка структуры базы данных...
[ INFO] Обработка данных: Реструктуризация Перечисление.РезультатыОбработкиЗапросовНаИспользованиеВнешнихРесурсовВМоделиСервиса
..............................................
[ INFO] Новый объект: РегламентноеЗадание.ЧтениеНовостейСлужбыПоддержки
[ INFO] Новый объект: РегламентноеЗадание.ЭкспортОценкиПроизводительности
[ INFO] Изменена структура таблиц базы данных
[ INFO] Принятие изменений...
[ INFO] Обновление конфигурации базы данных успешно завершено  

Прочие команды

Без примеров оставлю последние три команды, что есть в текущей версии утилиты.

  • config check - проверка конфигурации 
  • config reset - восстановление конфигурации базы данных.
  • clear - очистка информационной базы
     

Для чего всё это нужно?

Предполагаю, что у Вас уже возник вопрос: «И чем это отличается от пакетного режима Конфигуратора, который делает всё то же самое, и даже больше, давным-давно?». Признаюсь, я ждал этого вопроса.

Отличия от пакетного режима Конфигуратора:

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

а) выполнять операции Конфигуратором по сети. Это может занимать очень продолжительное время ввиду особенностей сетевого обмена между компонентами Платформы.

б) устанавливать клиентскую часть Платформы на сервер. Исключительно с целью ускорения выгрузок-загрузок.
А если Ваш сервер – на Linux и без графического интерфейса? Конечно, можно установить пакет Xvfb, эмулирующий вывод на дисплей, но ведь это «костыли», как Вы считаете?

Выполнение действий утилитой ibcmd возможно непосредственно на сервере, без установленного Клиентского приложения. Специально ничего устанавливать не требуется. Утилита присутствует в дистрибутиве сервера приложений 1С.
 

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

Пример: лицензии выдаются Сервером 1С, локальных лицензий нет. При этом требуется загрузка/выгрузка для файловой базы.

Для выполнения действий утилитой ibcmd лицензия не требуется. Ни клиентская, ни серверная.
 

В-третьих, все операции с базой, выполняемые Конфигуратором, требуют авторизации в этой базе.

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

Традиционный способ – создать временную информационную базу в клиент-серверном варианте, чтобы иметь возможность очистки таблицы пользователей. Загрузить в неё dt-файл. Очистить таблицу пользователей базы в СУБД. Перезапустить Конфигуратор. Выгрузить конфигурацию в файл. Удалить временную базу из СУБД.

Для операций, выполняемых ibcmd не требуется авторизация информационной базы.

Выполнение той же задачи посредством ibcmd, будет выглядеть следующим образом:

>ibcmd infobase create --db-path="%tmp%\db" --restore="%tmp%\some_infobase.dt"
>ibcmd infobase config save --db-path="%tmp%\db" "%tmp%\some_infobase.cf"

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

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

Более того, я пока не знаю, расценивать ли это как баг или как фичу, но для выгрузки dt-файла не требуется монопольный режим! Конечно же, пользоваться этим стоит с осторожностью. Не думаю что попытка сделать dt-шник в момент активной работы с базой пройдет без негативных эффектов.

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

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

Чего не хватает для полного счастья

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

  • Инкрементальная выгрузка в XML только тех файлов, версии которых изменены. 
    Сейчас доступна только полная выгрузка в XML.
     
  • Работа с Хранилищем конфигураций: выгрузка версий, получение отчета по версиям.
     
  • Экспорт непосредственно в формат EDT.
    Об этом отдельно ниже.
     
  • Логирование в Технологическом Журнале в полном объеме.
    Сейчас привычных событий SDBL, DBMSSQL, DBPOSTGRS, DBV8DBENG в ТЖ нет. Пишется только служебное SYSTEM.


Мне представляется, что утилита ibcmd получилась очень функциональным и универсальным инструментом. Возможно, даже более универсальным, чем изначально предполагалось. И сейчас, пока инструмент в статусе беты, у нас есть возможность повлиять на его дальнейшее развитие. Одним из применений и векторов развития мне видится использование в контурах CI-CD. Как для "традиционной" разработки с использованием Хранилищ, так и для работы в новом формате EDT.

Чтобы заменить пакетный режим Конфигуратора в процессе синхронизации "традиционной" разработки с репозиторием Git, не хватает только возможности работы с Хранилищем.

В своей переписке на партнерском форуме с разработчиками я обозначил такой вектор возможного развития инструмента и получил обещание проанализировать и подумать. Ниже привожу цитату своего описания возможного сценария использования. Здесь я защищал предложения включить возможность работы с Хранилищем и выгрузки в формате EDT.

Полагаю, утилита ibcmd могла бы стать отличной заменой громоздкой связке из 1С:ГитКонвертера + EDT (не требующей к тому же java и клиентских лицензий) для целей:

  • перевода существующих разработок в формат EDT
  • совместной работы над общим Проектом, команд, ведущих разработку "традиционным методом" в Хранилище и "новаторских" с EDT. Пример такой работы приведен в статье "Постепенный переход на разработку в EDT". 
  • синхронизации Хранилища с репозиторием Git для целей CI-CD.

К недостаткам выполнения этих операций посредством 1С:ГитКонвертера я бы отнёс:

  • необходимость установки Клиента и использование клиентских лицензий
  • необходимость установки java
  • необходимость установки самой EDT для конвертации XML-EDT

Использование ibcmd позволило бы избавиться от всех этих недостатков, а также гибко управлять процессом скриптами или из сервера сборок.

Также, одним из преимуществ перехода на использование репозитория Git вместо Хранилища, декларируется возможность работы с исходными кодами без использования какой-либо IDE, посредством "любимого текстового редактора". Однако сейчас получается, что для того, чтобы сначала получить из Конфигурации исходные коды, а после доработок собрать из них Конфигурацию, требуется установленная EDT, очень ресурсоемкая, надо сказать. Лишь для того, чтобы один формат XML-файлов привести к другому. Осмелюсь предположить, что выполнение этой задачи посредством ibcmd было бы гораздо более эффективным.

Заключение

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

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

Комментарии
Избранное Подписка Сортировка: Древо
1. Evil Beaver 6595 21.12.19 19:23 Сейчас в теме
Отлично, спасибо! Пишите еще!
Free1CforAll; +1 Ответить
2. ASDF2 282 22.12.19 12:20 Сейчас в теме
Замечательная статья и очень интересный инструмент! Даже странно, что никакой публичной информации о нем.
Free1CforAll; +1 Ответить
3. dumsik 23 22.12.19 13:44 Сейчас в теме
Отличная статья!
Free1CforAll; +1 Ответить
4. baykovsky 22.12.19 18:47 Сейчас в теме
Отличная статья!
Это получается, что разработчики огромную дыру в безопасности сотворили, позволяя выгружать базу данных без авторизации.
Интересно, какие библиотеки требуются для работы инструмента, возможно ли создать portable-версию?
5. -vito- 403 22.12.19 19:24 Сейчас в теме
(4) Станислав,
Это получается, что разработчики огромную дыру в безопасности сотворили, позволяя выгружать базу данных без авторизации

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

Интересно, какие библиотеки требуются для работы инструмента, возможно ли создать portable-версию?

Используются те же dll, что и "обычным" кластером. Если собрать в папку все используемые библиотеки, должно работать. Я пробовал, но не довёл эксперимент до конца. Некоторые функции у меня работали. А некоторые - нет. Причем уже без явной ругани что не хватает такой-то библиотеки.
6. artbear 1174 23.12.19 14:20 Сейчас в теме
Хороший инструмент ibcmd получается у 1С.
По описанию АПИ (ком.строка, файл настройки) очень похож на наш, уже давно существующий, vanessa-runner, использующий штатные средства Конфигуратора/Предприятия.

Хорошо бы, чтобы утилита ibcmd научилась работать не только с Автономным сервером )
Тогда будет счастье.

ЗЫ Апдейт - я неверно понял, оказывается, эта утилита уже работает не только с автономным сервером. Это радует!
7. -vito- 403 23.12.19 14:26 Сейчас в теме
(6)
Хорошо бы, чтобы утилита ibcmd научилась работать не только с Автономным сервером )

Артур, так я об этом и пишу. Она как раз и работает не только с автономным сервером, но и независимо.
Как раз для ваших инструментов и отличная замена пакетному режиму.
По крайней мере, я думаю что работа с Храном будет. И Gitsync, deployk-у можно будет педелать на использование ibcmd.
Остается конечно проблема с запуском обработчиков обновления. Это без клиента никак сейчас не сделать.
Хотя, вот есть ведь у Платформы сейчас служебное фоновое задание UpdateConfigurationLicense, запускаемое после обновления БД.
Думаю, что нет технических препятствий (для разработчиков Платформы) к реализации выполнения обработчиков обновления полностью фоново, без запуска клиента. Но это, как говорится, уже отдельный разговор.
8. artbear 1174 23.12.19 14:26 Сейчас в теме
(7) да, после написания своего комментария я пересмотрел статью и увидел, что не только с АС, и обновил свое сообщение.
9. the1 409 25.12.19 08:56 Сейчас в теме
Осталось запустить эту утилиту, чтобы она работала в фоне, и можно в продакшен
Прикрепленные файлы:
10. the1 409 25.12.19 10:13 Сейчас в теме
11. -vito- 403 25.12.19 10:19 Сейчас в теме
(10) Максим,
я вероятно не понял Вашего вопроса. А для чего фоном и службой?
12. the1 409 25.12.19 10:25 Сейчас в теме
(11) Написал не в ту ветку)) это было по поводу ibsrv.
У нас просто как раз 3 пользователя, попробовали по сети - скорость отличная. Осталось запустить ibsrv как службу и пользоваться.
13. -vito- 403 25.12.19 10:29 Сейчас в теме
(12) Так в ветке про ibsrv я даже пример регистрации службы приводил.

А насчет запуска как службы произвольного консольного приложения или даже скрипта PowerShell, со временем будет заметка. Лежит у меня в черновиках, про отслеживание изменений каталога Хранилища с целью запуска синхронизации по событию, а не по расписанию.
15. the1 409 25.12.19 11:01 Сейчас в теме
(13) Да, спасибо, невнимательно прочёл.
14. -vito- 403 25.12.19 10:33 Сейчас в теме
(12)
У нас просто как раз 3 пользователя, попробовали по сети - скорость отличная. Осталось запустить ibsrv как службу и пользоваться

Максим, Вы в ветке про ibsrv этот комментарий продублируйте, пожалуйста, чтобы он был в контексте. Думаю, кому-то Ваш опыт поможет.
16. user949348 30.12.19 10:51 Сейчас в теме
(12)подскажите пожалуйста, оборудование подключаемое работает в таком режиме?
17. -vito- 403 30.12.19 11:30 Сейчас в теме
(16) Михаил, хотя вопрос адресован вероятно не мне, я попробую ответить.
Подключаемое оборудование работает на клиенте и, я думаю, вариант взаимодействия клиента с сервером на нем никаким образом не может сказываться. На практике еще не проверял, нет под рукой сейчас ничего из подключаемого.
18. user949348 30.12.19 12:00 Сейчас в теме
(17) видимо не туда нажал ответить, хотел к этому сообщению "У нас просто как раз 3 пользователя, попробовали по сети - скорость отличная", в любом случае спасибо за информацию, возможно для нас станет спасением
Оставьте свое сообщение

См. также

Контроль места на дисках

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Администрирование СУБД

Один из последних случаев на работе. Диск, на котором хранились файлы базы, "развалился", база потеряна. Начали искать копию базы. Копии базы делались на другой диск, но оказалось, что на том диске нет места и копии не делались несколько дней. Так было потеряно несколько дней работы фирмы, кому-то выговор, кого-то уволили((.

20.02.2020    894    wowik    17       

Сдача регламентированной отчетности из программ 1С Промо

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

от 1500 руб.

Нюансы лицензирования 1С

Статья Системный администратор Нет файла v8 1cv8.cf Россия Бесплатно (free) Администрирование СУБД

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

19.02.2020    3907    fixin    106       

Как мы научились автоматически отслеживать ошибки в 1С

Статья Системный администратор Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Администрирование СУБД

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

04.02.2020    8926    slozhenikin_com    27       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Автономный сервер. Часть 1 - новый вариант сервера

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Администрирование СУБД

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

21.12.2019    6679    -vito-    14