Создание выгрузок файлов .dt с помощью PowerShell и RASRAC для клиент-серверных баз

У платформы 1С 8.3 есть кроссплатформенная утилита RASRAC(Remote Administration ServerRemote Administration Client), которая позволяет удаленно управлять кластером серверов 1C.
Ниже выложен шаблон скрипта PowerShell для выгрузки базы 1C в файл dt с помощью этой утилиты.

После очередного обновления платформы 1С 8.3 перестал работать скрипт, закрывающий открытые сеансы через ComConnector перед выгрузкой ИБ. Предположили, что это косяк платформы COM-соединения, но решили не откатываться на предыдущие релизы, а сделать выгонялку с использованием утилиты RASRAC.

!!! ДАННЫЙ СКРИПТ ИСПОЛЬЗУЕТСЯ ТОЛЬКО ДЛЯ КЛИЕНТ-СЕРВЕРНЫХ БАЗ !!!

как устанавливать ras как службу на сервере 1С описывается здесь:

https://its.1c.ru/db/v8311doc#bookmark:cs:TI000000189

если у вас нет подписки ИТС, то можно посмотреть как это делается по этой ссылке:

//infostart.ru/public/810752/

с помощью команд утилиты rac скрипт выполняет следующие шаги:

1) устанавливает блокировку начала сеансов;
2) устанавливает блокировку регламентных заданий;
3) завершает сеансы пользователей указанной ИБ;
4) после выгрузки dt снимает блокировку сеансов и регламентных заданий

В шаблоне скрипта также указан параметр $UserNoExit, в котором указывается пользователь, которого нельзя выгонять из базы ни при каких условия. Например, если из-под него запущено перепроведение или в конфигураторе  делается тестирование и исправление базы. В этом случае выгрузка не происходит. Если у вас нет надобности в таком пользователе, то оставьте эту строку без изменения.

В той же папке, куда делаются выгрузки, записывается текстовый файл с логами.

Уфф… Господа и дамы, попрошу сильно меня пинать, т.к. это моя первая публикация на Инфостарте за последние несколько лет )))

26 Comments

  1. chg

    Старания конечно похвальны, но скажите мне, для чего вы пытаетесь делать резервные копии выгрузками, чем вас не устраивает SQL bak-и, всё делается штатными средствами и куда вам нужно, хоть на ленту, хоть на nas, при том что резервное копирование на уровне SQL более правильно для целостности данных и проходит в разы быстрее?

    Reply
  2. alexer

    (1) я этот, как его, ретроград )). А вообще, так сложилось исторически?

    Reply
  3. user618912_redgad

    На слова «Так всегда было», «Сложилось исторически» и т.п. люблю приводить пример:

    Опыт №1

    Клетка. В ней 5 обезьян. К потолку подвязана связка бананов. Под ними лестница. Проголодавшись, одна из обезьян подошла к лестнице с явными намерениями достать банан. Как только она дотронулась до лестницы, открывается кран и ВСЕХ обезьян обливают очень холодной водой. Проходит немного времени, и другая обезьяна пытается полакомиться бананом. Та же ледяная вода. Третья обезьяна, одурев от голода, пытается достать банан, но остальные хватают ее, не желая холодного душа. А теперь уберите одну обезьяну из клетки и замените ее новой обезьяной. Она сразу же, заметив бананы, пытается их достать. К своему ужасу, она видит злые морды остальных обезьян, атакующих ее. После третьей попытки она поняла, что достать банан ей не удастся. Теперь уберите из клетки еще одну из первоначальных пяти обезьян и запустите туда новенькую. Как только она попыталась достать банан, все обезьяны дружно атаковали ее, причем и та, которую заменили первой (да еще с энтузиазмом). И так, постепенно заменяя всех обезьян, вы придете к ситуации, когда в клетке окажутся 5 обезьян, которых водой вообще не поливали, но которые не позволят никому достать банан.

    Опыт №2

    В пустой комнате 5 шимпанзе. В центре комнаты лестница, сверху лежит банан. Когда первая обезьяна замечает банан, она лезет за ним по лестнице, чтобы схватить и съесть. Но как только она приближается к фрукту, с потолка на нее обрушивается струя ледяной воды и сбивает вниз. Другие обезьяны тоже пытаются забраться на лестницу. Всех сбивает вниз струя холодной воды, и они отказываются от попыток взять банан. Воду выключают, а одну вымокшую обезьяну заменяют новой, сухой. Не успевает она войти, старые пытаются не дать ей забраться на лестницу, чтобы ее тоже не окатило водой. Новая обезьяна не понимает, в чем дело. Она видит только группу собратьев, мешающих ей взять вкусный фрукт. Тогда она пытается прорваться силой и дерется с теми, кто не хочет ее пропускать. Но она одна, и четыре прежних обезьяны берут верх. Другую промокшую обезьяну заменяют новой сухой. Как только она появляется, предшественник, подумавший, что именно так нужно встречать новичков, набрасывается на нее и колотит. Новичок даже не успевает заметить лестницу и банан, он уже вне игры. Затем третью, четвертую и пятую вымокших обезьян заменяют по очереди сухими. Каждый раз, как только новички появляются, их колотят. Прием становится с каждым разом все более жестоким. Обезьяны все вместе бросаются на новичка, как будто стараясь улучшить ритуальный прием. В финале на лестнице по прежнему лежит банан, но пять сухих обезьян оглушены постоянной дракой и даже не думают приблизиться к фрукту. Их единственной заботой является следить за дверью, откуда появится новая обезьяна, чтобы скорее напасть на нее.

    Источник: Эксперимент с обезьянами: формирование общества — Фактрум

    Reply
  4. SlavaKron

    (1) Просто мимо проходил. Во-первых, намного меньше размер, во-вторых, удобно обновлять актуальными данными тестовую базу (базу разработки).

    Reply
  5. nomad_irk

    (4)ээээ…..вы всерьез считаете, что для актуализации тестовой базы данными рабочей в средине рабочего дня будет удобнее именно через выгрузку рабочей БД в *.dt?

    Бэкап средствами MS SQL может быть в сжатом виде, его размер мало чем отличается от размера *.dt при этом может быть развернут всегда в отличии от разворачивания БД из *.dt.

    Reply
  6. SlavaKron

    (5)

    при этом может быть развернут всегда в отличии от разворачивания БД из *.dt

    Ровно наоборот.

    Reply
  7. nomad_irk

    (6)При размере БД в 100Гб, скажем, какова вероятность разворачивания БД из *.dt? Время, затраченное на разворачивание из *.dt будет в разы больше.

    Reply
  8. nomad_irk

    На мой взгляд, выгрузка в *.dt оправдана ровно в 2-х случаях:

    1. миграция БД между разными СУБД

    2. передача кому-то БД. Что в общем случае будет п.1.

    Reply
  9. chg

    (6)Отличия DT от BAK, выгони пользователей, в зависимости от размера базы дождись выгрузки, с SQL таких костылей нет, так неправда ваша.

    Reply
  10. chg

    (8)Миграция да, передача, ну тут на усмотрение принимающей стороны и им иной раз проще bak получить.

    Reply
  11. nomad_irk

    (10)Согласен, поэтому и дополнил про общий случай.

    Reply
  12. chg

    (2)Технологии тоже не стоят на месте и выгонять пользователей для бэкапа уже давно не комильфо))))

    Reply
  13. ansh15

    (7)

    При размере БД в 100Гб, скажем, какова вероятность разворачивания БД из *.dt?

    Судя по этому фото, 100%, и там размер базы не 100 ГБ(гораздо больше).

    Если база размером в 100 ГБ не выгружается в dt, то с большой долей вероятности можно говорить о том, что имеется (значительная) нехватка вычислительных ресурсов. Проще говоря, сервер не соответствует выполняемой на нем задаче. И программное обеспечение тоже желательно все 64-х разрядное(включая клиента).

    Reply
  14. nomad_irk

    (13)Я уже сказал в (8) о по-сути единственном случае, когда выгрузка в *.dt оправдана и вы как раз привели именно этот случай.

    Много вы раз в день этой процедурой занимаетесь, чтобы скрипты на PS вам каким-то образом облегчили ваш труд? 🙂

    Reply
  15. alexer

    (12) я уже начинаю сильно жалеть, что подняли пенсионный возраст )

    Reply
  16. SlavaKron

    (7) Разработку я веду в файловой, как прикажите её актуализировать из БАКа?

    Reply
  17. nomad_irk

    (16)Тогда вам *.1CD (пожатый архиватором) нужно…

    Reply
  18. SlavaKron

    (17) Так рабочая же на скуле, откуда я актуальный 1СД возьму)

    Reply
  19. ansh15

    (14) Еще есть разнообразные случаи, когда «злобный» админ не дает бедному специалисту 1С даже на сервер снаружи взглянуть, а уж пустить во внутрь -так и подавно 🙂 А обновлять конфигурацию на 10 релизов вперед, все-таки, надо…

    При всех недостатках выгрузки в *.dt, она может быть единственным способом.

    PS-скриптами не пользуюсь, пользуюсь скриптами на bash(для ras/rac). Недавно(для себя) обнаружил, что в *.dt можно выгружать/загружать без толстого клиента в режиме конфигуратора, при помощи утилиты ibcmd(заметка), иногда может пригодиться.

    То, что бэкапы средствами СУБД являются наиболее приемлемыми, сомнению, конечно, не подвергается.

    Reply
  20. nomad_irk

    (18) См. (14) 🙂

    Reply
  21. chg

    (15)ну говорят, что мы стали жить лучше и дольше)))))

    Reply
  22. user1274438

    Автору уже сообщили о том, что даже фирма 1С официально сообщает о том, что файлы dt не рекомендуется использовать для создания резервных копий? Ибо воистину!

    «Администрирование» Глава 6

    6.7. Выгрузка информационной базы данных в файл



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



    Аминь!

    P.S.

    В зависимости от свежести документации разделы могут отличаться.

    Reply
  23. user1274438

    (13) На фото изображен человек, который, по моему мнению, очень мало сталкивался с битыми dt-шниками, а также, похоже, плохо разбирается в mssql и пиарит какое-то линуксовое поделие.

    Reply
  24. ansh15

    (23)На слайде(на фото) приводится информация о том, что выгрузка/загрузка в *.dt может проводиться для баз размеров, гораздо больших, чем 100 ГБ.

    Какой-либо иной информации я там не увидел.

    Reply
  25. Fox-trot

    документация надо читать, когда уже ничего не работает

    Reply
  26. user1274438

    (24) Спасибо, кэп.

    Reply

Leave a Comment

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