Этот способ работает только в клиент-серверном варианте. Тип СУБД при этом не важен. Используется только настройки сервера 1С.
В приведенном примере используется платформа 1С:Предприятие 8.2.17.169 и СУБД PostgreSQL 9.2-1.1C.
На сервере 1С есть база с именем «fin». В PostgreSQL она называется точно так же.
Создаем новую информационную базу на сервере 1С и называем её «fin2». В настройках прописываем имя базы на сервере баз данных: «fin».
В итоге получаем 2 разные базы 1С, но физически это одна база на сервере баз данных.
В базе «fin» работают пользователи.
В базе «fin2» активных пользователей нет и можно выполнять любые действия в монопольном режиме. Например, выгрузить базу в формате DT или запустить второй Конфигуратор.
Этим приемом нужно пользоваться очень осторожно, потому что 1С может непредсказуемо повести себя с базой данных на сервере СУБД. Поэтому экспериментировать с этой возможностью я не стал, только несколько раз успешно использовал её для снятия архива больших баз, где ведется круглосуточная работа.
Если есть желание поэкспериментировать и поделится опытом, то пишите в комментариях к этой статье. Будет интересно узнать, что об этом думают пользователи «Инфостарта» и как ещё можно использовать эту возможность.
Гарантировать снятие копии базы неповрежденной в процессе работы может только сервер баз данных. В вашем случае, вы просто обманываете клиентское приложение. И если за время снятия архива пользователь вводили в базу документы, «копия» с большой вероятностью будет поврежденной.
Если у вас SQL-сервер, что мешает сделать гарантированно целостный бэкап базы средствами Sql?
Тем более что, если база клиент-серверная, значит, размер ее не очень маленький, а в этом случае SQL-бэкап сделается однозначно быстрее, чем выгрузка в DT. И последующая загрузка из SQL-бэкапа будет быстрее, чем из DT.
Следующая статья «Как обновить конфигурацию, не выгоняя пользователей» ))
При сохранении базы таким способом, часть информации, измененной в процессе выгрузки, может выгрузиться не корректно. С этим согласен. Поэтому для бэкапа базы этот способ лучше не использовать.
Цель статьи не в том, что бы рассказать как делать бэкапы базы 1С. Для этого есть стандартные способы. Цель в том, что бы поделиться приемом работы с базами на сервере 1С. Может быть, для кого-то это будет полезная информация.
В моем случае была необходимость развертывания тестовой файловой базы и нужен был DT-шник. Для этой задачи такой способ подходит.
Если обновлять конфигурацию таким способом, то, скорее всего, база данных не выживет после этого. Лучше даже не пробовать 🙂
забавно,
но описанный фокус с выгрузкой клона базы канает.
—
(4)
а вот обновить конфигурацию просто так на халяву не удастся.
(см. вложение)
(5)
pardon…проканало!!!
—
не в том конфигураторе нажал «обновить конфигурацию базы»
—
пожалуй плусану
🙂 — за хакерский склад ума…
На предыдущей работе делал так, тоже для получения файловой. Ставил Postgres к себе на локальную машину. Кста, применял для обновления (было очень много мелких типовых баз, при «нормальном» обновлении память на серваке быстро фрагментировалась — юзера жаловались на замедление работы). Стал обновлять «через себя» — жалобы прошли. Только надо аккуратно выгнать юзеров из «основной» базы перед обновлением конфигурации.
Была еще одна мысль — не успел опробовать (работу сменил 😉 ). Что если «сервер» на своей машинке запускать с ключом -debug . Не позволит ли это нормально отлаживать серверные модули в рабочих базах без получения копий ? Может, кто пробовал ?
(7) Чуть-чуть описАлся 😉 Ставил на локальную машину не Postgres, конечно, а сервер 1С, и прописывал соединение с Postgres-базой на серваке 😉
Сомнительный способ какой-то )
Пусть способ и стремный, но знать его просто обязательно — хотя бы для того чтобы избежать непредвиденных ситуёвин потом. +1
(10) Famza,
Способ, не только хакерский, но и очень стремный! (Хотя за идею +).
Во первых, выгруженный таким образом DT, может содержать не согласованные данные.
Во вторых, можно легко нарваться на непредсказуемое поведения SQL серверов разных производителей, под разные OS. Эффект, на фоне огромных объемов данных, может превзойти любые Ваши ожидания.
В третьих, можно банально промахнуться и накосячить вместо тестовой базы в боевой, в виду отсутствия контроля той самой пресловутой «монопольности».
Надежнее пользоваться стандартными механизмами SQL для архивации на лету. Либо разворачивать ночную копию базу в тестовый экземпляр и в ручную переносить оперативные данные.
(11) Evgen.Ponomarenko, я не тот же смысл в (10) высказал? Тогда спасибо за расшифровку
(12) Famza,
Его нужно знать, но вот его применение как раз и может привести к непредвиденным ситуевинам.
Я расшифровал в виду, того, что в вашем сообщении, первая и вторая части имеют противоречивую следственную связь. Может Вы опечатались, не верно выразились, думали одно — написали другое…
В результате получилось то, что получилось… не хотел обидеть, если чего ам сорри.
Способ конечно очень интересный, но «Славик, чот я очкуюсь…» :):):)
Это ли не эксперимент:
для снятия архива больших баз, где ведется круглосуточная работа.
Плюс за отчаянность автору.
imho1: описанная возможность — ошибка (ну в крайнем случае не очень хорошая фича) платформы, т.к. при создании новой ИБ должна быть проверка не зарегистрирована ли уже база с такой же БД.
imho2: более надёжный способ — создать «нормальную» базу fin2, из fin средствами sql выгрузить бэкап, загрузить его в fin2, а потом из fin2 выгрузить так сильно желаемый dt-шник.
В случае клиент-серверной БД не вижу смысла использовать нестандартный функционал при наличии стандартного.
Админы как-то создали базы для разработки, при этом в 2-х ИБ указали одну и ту же базу. Заметили случайно, когда мой код «волшебным образом» появлялся у коллеги)) Немного поигрались и грохнули вторую базу, ибо рискованно это, пользоваться такой «особенностью» платформы
Опасно и глупо при наличии более удачных альтернативных способов.
Однозначно плюс за раскрытие темы «трехзвенки» в
терминахпонятиях 1сДа уж. А просто бэкапнуть средствами SQL никак? )
Как всегда, все гениальное просто. =) Плюс без сомнений.
Я как-то раз на заре рабочей карьеры (в запарке) таким образом заменил рабочую базу на копию… При работающих пользователях. Благо, бэкап SQL был полный, и бэкап логов. Урок на всю жизнь.
Ну, вот небольшая база. И хочется получить с нее файловую, НЕ для бэкапа, а чтобы поиграться — поотлаживать и т.д. И плевать, что какие-то данные в ней будут не согласованы. На файловой это может быть гораздо удобнее, чем на серверной…
на партнерском форуме уже вовсю обсуждают :))
«Мой сотрудник нашел способ работать с базрй в серверном варианте нежелательным способом. Считаю, что это дыра в платформе. Статья
«Как выгрузить базу средствами 1С, не выгоняя пользователей. Делаем невозможное.» на инфостарте от 16.09.2013.»
а вот это —http://infostart.ru/public/22419/ ?
Ну не считая что нужна обязательно Enterprise Edition
Очень ценная подсказка! Хотя, конечно нуждается в проверке, но однозначно спасет кому-то много нервов!
(19) anig99,
вообще-то это явная ДЫРА в платформе.
накладываются какие-то блокировки на что-то важное
…
а хранятся и проверяются эти блокировки не в БАЗЕ ДАННЫХ,
а где-то там … в ИНФОРМАЦИОННОЙ БАЗЕ.
:)))
Пользоваться можно. Но крайне осторожно и только для слива рабочей базы в файловый бекап.
Вариант «Сделать копию средствами SQL и выгрузить её в файловый бекап» — несколько дольше по времене, но всё-же безопаснее.
Решать вам. Лично я выбираю второй вариант…
Мне тоже кажется, что «Сделать копию средствами SQL и выгрузить её в файловый бекап», намного проще и безопаснее, учитывая кучу порой неясных вылетом, типо «Ошибка формата потока». Из-за сомнительной экономии времени, можно потом неделю пытаться восстановить рабочую базу. За информацию, конечно плюс, я этого не знал.
Интересно))). Думаю это дыра в 1с. Я всегда делаю средствами sql, безопаснее.. Автору + за находчивость)
(30) Just, А если один сервак скуля, подскажите как вы востанавливаете скулевскую копию на этом серваке средствами скуля, мне выдает что имя базы не совпадает с копией и восстановление не возможно, и понятное дело что две базы с одним именем не возможно держать на серваке, в запросах может нужно где указать чтобы не учитывало имя базы в копии и имя в восстанавливаемой базе ?
А если создать на SQL вторую базу и в неё средствами SQL скопировать рабочую базу? Потом прописать к ней путь и .. в путь? Фишка в том, чтобы отказаться от использования SQL? Вот такие вопросы возникли.
По большому счету для кодирования достаточно выгрузить конфигурацию и заполнить её своими данными.
(32) LineykaSBK, вот как бы человек уже написал или это была шутка
А если создать на SQL вторую базу и в неё средствами SQL скопировать рабочую базу? Потом прописать к ней путь и .. в путь?
Есть на скуле 2 база, типо «Тест», делаете копию рабочей базы в скуле, потом в тестовой указываете из какой базы или файла восстановить архив, в параметрах указываете путь восстановления фалов тестовой кнопка ОК. Вроде бы всё, проблем не должно быть, можно создать «план обслуживания», который будет делать копию рабочей и разворачивать в тестовую. одним нажатием. На больших базах это гораздо быстрее выгрузки/загрузки в ДТ. Как-то так … или я чего не понял в вопросе…
Автору плюс конечно, но блин я бы за копию не был бы уверен, что она будет нормальной?, хотя надо попробовать.
(32)LineykaSBK,
(34)Just,
возможно еще надо поставить галочку overwrite the existing database на второй закладке options она на самом верху, а также в табличном поле указать файлы тестовой базы <имя тестовой базы>.mdf <имя тестовой базы>.ldf
Ага, а еще с таким же успехом, можно скопировать файлы базы данных, может повезет.
Автору + !! Копии буду делать по старому ))))))))))) !!!
Каждый метод хорош для своих задач)
Автору благодарность за идею
Странно, вроде известная особенность (еще с 8.0), с известной рекомендацией так не делать:).
(40) i.kovtun, ссылочку не кинете на известную инфу?
tango, ну на вскидку нашел презентацию Гилева по серверу 1С:
14 слайд
P.S. Правда тут про два кластера, которые могут друг о друге не знать. Пожалуй, проконтролировать наличие двух ИБ в кластере, которые ссылаются на одну БД для вендора было бы не сложно и полезно:).
Вот уж что ни говори, а опасно все это! Если СУБД еще куда ни шло, а 1С может упасть на ровном месте. ИМХО, лучше тупо копировать файлы базы, пусть хоть и весят они под 200 гигов, без всяких архивов и бэкапов! А если работа ведется круглосуточно, то организовывать РИБ и настраивать обмен по ситуации.
чего распереживались?
за целостность транзакций отвечает субд, за полученную копию отвечает сам админ,
если ему для тестовой конфигурации — то пусть пользуется с учетом возможной несогласованности на уровне логики 1с.
Я бы не стал так рисковать так как если база больше 100 гигов и работают одновременно больше 100 пользователей когда база навернется медным тазам на востанновление работоспособности уйдет некоторое время. Я создал копию на уровне SQL и прописал в 1с сервере копия и работаю без проблем.
Найден очередной баг 1с 🙂
(42) i.kovtun,
да, и это, не умаля новизны сабжа, придает 1с-трехзвенке еще больше очарования 🙂
**
возвращаясь на десяток лет назад: 7.8 предпочтительнее 8.0 с точки зрения пользователей. но не
разработчикавендораа backup средствами SQL? я бы не пользовался — стремно как-то
Не дотягивается рука до курка если ствол ружья, вставлен в рот? Нажимайте ногой! Прекрасный рецепт, нечего сказать 🙂
Я уже давно бекапирую только средствами SQL. И юзеров не надо выбрасывать и бекапы занимают не так много места. У меня раз в неделю создается полный бекап, в остальные дни дифференциальный.
Существуют некоторые программы, которые сами архивируют базы, главное настроить правильно, и ничего придумывать не придётся, хотя yurega молодец. И потом никто не заставляет этим методом пользоваться. Каждый делает как умеет.
Я думаю это больше похоже на глюк ПО — который естественно разработчики должны устранять.
средствами SQL backup сделать сложно ?? Очередная статья для тех кто хочет похерить себе базу .
«Как выгрузить базу средствами 1С, не выгоняя пользователей
Или мракобесие и его роль в генезисе, диагностике и клинической картине острого геморроя»