IE2017

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

Администрирование - Архивирование (backup)

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

Этот способ работает только в клиент-серверном варианте. Тип СУБД при этом не важен. Используется только настройки сервера 1С.

В приведенном примере используется  платформа  1С:Предприятие 8.2.17.169 и СУБД PostgreSQL  9.2-1.1C.

На сервере 1С есть база с именем «fin». В PostgreSQL  она называется точно так же.

Создаем новую информационную базу на сервере 1С и называем её «fin2». В настройках прописываем имя базы на сервере баз данных:  «fin».

В итоге получаем 2 разные базы 1С, но физически это одна база на сервере баз данных.

В базе «fin» работают пользователи.

В базе «fin2» активных пользователей нет и можно выполнять любые действия в монопольном режиме. Например, выгрузить базу в формате DT или запустить второй Конфигуратор.

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

Если есть желание поэкспериментировать и поделится опытом, то пишите в комментариях к этой статье. Будет интересно узнать, что об этом думают пользователи «Инфостарта» и как ещё можно использовать эту возможность.   

См. также

Комментарии
1. Владислав Чинючин (vcv) 83 16.09.13 21:55 Сейчас в теме
Гарантировать снятие копии базы неповрежденной в процессе работы может только сервер баз данных. В вашем случае, вы просто обманываете клиентское приложение. И если за время снятия архива пользователь вводили в базу документы, "копия" с большой вероятностью будет поврежденной.
Если у вас SQL-сервер, что мешает сделать гарантированно целостный бэкап базы средствами Sql?
NN2P; Raduga; farhod54; elephant_x; FlagmanGK; u_n_k_n_o_w_n; berezdetsky; bulpi; msvd; andrewks; +10 Ответить
2. Александр Капустин (kapustinag) 17.09.13 01:07 Сейчас в теме
Тем более что, если база клиент-серверная, значит, размер ее не очень маленький, а в этом случае SQL-бэкап сделается однозначно быстрее, чем выгрузка в DT. И последующая загрузка из SQL-бэкапа будет быстрее, чем из DT.
msvd; randa; +2 Ответить
3. Вова Вишин (Tahallus) 421 17.09.13 02:53 Сейчас в теме
Следующая статья "Как обновить конфигурацию, не выгоняя пользователей" ))
u_n_k_n_o_w_n; +1 Ответить
4. Юрий Юрьев (yurega) 68 17.09.13 03:42 Сейчас в теме
При сохранении базы таким способом, часть информации, измененной в процессе выгрузки, может выгрузиться не корректно. С этим согласен. Поэтому для бэкапа базы этот способ лучше не использовать.

Цель статьи не в том, что бы рассказать как делать бэкапы базы 1С. Для этого есть стандартные способы. Цель в том, что бы поделиться приемом работы с базами на сервере 1С. Может быть, для кого-то это будет полезная информация.
В моем случае была необходимость развертывания тестовой файловой базы и нужен был DT-шник. Для этой задачи такой способ подходит.

Если обновлять конфигурацию таким способом, то, скорее всего, база данных не выживет после этого. Лучше даже не пробовать :-)
5. Юрий Осипов (yuraos) 895 17.09.13 06:19 Сейчас в теме
забавно,
но описанный фокус с выгрузкой клона базы канает.
---
(4)
а вот обновить конфигурацию просто так на халяву не удастся.
(см. вложение)
Прикрепленные файлы:
6. Юрий Осипов (yuraos) 895 17.09.13 06:29 Сейчас в теме
(5)
pardon...проканало!!!
--
не в том конфигураторе нажал "обновить конфигурацию базы"
--
пожалуй плусану
:) - за хакерский склад ума...
shtv; u_n_k_n_o_w_n; +2 Ответить
7. Дмитрий Кишкин (DmitryKishkin) 17.09.13 07:17 Сейчас в теме
На предыдущей работе делал так, тоже для получения файловой. Ставил Postgres к себе на локальную машину. Кста, применял для обновления (было очень много мелких типовых баз, при "нормальном" обновлении память на серваке быстро фрагментировалась - юзера жаловались на замедление работы). Стал обновлять "через себя" - жалобы прошли. Только надо аккуратно выгнать юзеров из "основной" базы перед обновлением конфигурации.

Была еще одна мысль - не успел опробовать (работу сменил ;-) ). Что если "сервер" на своей машинке запускать с ключом -debug . Не позволит ли это нормально отлаживать серверные модули в рабочих базах без получения копий ? Может, кто пробовал ?
8. Дмитрий Кишкин (DmitryKishkin) 17.09.13 07:23 Сейчас в теме
(7) Чуть-чуть описАлся ;-) Ставил на локальную машину не Postgres, конечно, а сервер 1С, и прописывал соединение с Postgres-базой на серваке ;-)
u_n_k_n_o_w_n; +1 Ответить
9. Дмитрий Лебедев (mr.Samuelson) 17.09.13 08:07 Сейчас в теме
Сомнительный способ какой-то )
msvd; Den_D; EdmundoAlvares; Evgen.Ponomarenko; +4 Ответить
10. Иван Иванов (Famza) 80 17.09.13 09:17 Сейчас в теме
Пусть способ и стремный, но знать его просто обязательно - хотя бы для того чтобы избежать непредвиденных ситуёвин потом. +1
11. Евгений Пономаренко (Evgen.Ponomarenko) 510 17.09.13 09:44 Сейчас в теме
(10) Famza,
Способ, не только хакерский, но и очень стремный! (Хотя за идею +).
Во первых, выгруженный таким образом DT, может содержать не согласованные данные.
Во вторых, можно легко нарваться на непредсказуемое поведения SQL серверов разных производителей, под разные OS. Эффект, на фоне огромных объемов данных, может превзойти любые Ваши ожидания.
В третьих, можно банально промахнуться и накосячить вместо тестовой базы в боевой, в виду отсутствия контроля той самой пресловутой "монопольности".

Надежнее пользоваться стандартными механизмами SQL для архивации на лету. Либо разворачивать ночную копию базу в тестовый экземпляр и в ручную переносить оперативные данные.
12. Иван Иванов (Famza) 80 17.09.13 10:09 Сейчас в теме
(11) Evgen.Ponomarenko, я не тот же смысл в (10) высказал? Тогда спасибо за расшифровку
13. Евгений Пономаренко (Evgen.Ponomarenko) 510 17.09.13 10:31 Сейчас в теме
(12) Famza,
Его нужно знать, но вот его применение как раз и может привести к непредвиденным ситуевинам.

Я расшифровал в виду, того, что в вашем сообщении, первая и вторая части имеют противоречивую следственную связь. Может Вы опечатались, не верно выразились, думали одно - написали другое...

В результате получилось то, что получилось... не хотел обидеть, если чего ам сорри.
14. DERL (DERL) 17.09.13 10:44 Сейчас в теме
Способ конечно очень интересный, но "Славик, чот я очкуюсь..." :):):)
wbazil; gkstrade; Pete; elephant_x; jack_kkm; bashirov.rs; FlagmanGK; AlX0id; u_n_k_n_o_w_n; Valet; bulpi; Den_D; Kosstikk; draf; Famza; Evgen.Ponomarenko; DJDUH; +17 Ответить
15. Иван Титов (Ibrogim) 622 17.09.13 10:49 Сейчас в теме
Поэтому экспериментировать с этой возможностью я не стал

Это ли не эксперимент:
только несколько раз успешно использовал её
для снятия архива больших баз, где ведется круглосуточная работа.


Плюс за отчаянность автору.



16. q_i 317 17.09.13 11:10 Сейчас в теме
imho1: описанная возможность - ошибка (ну в крайнем случае не очень хорошая фича) платформы, т.к. при создании новой ИБ должна быть проверка не зарегистрирована ли уже база с такой же БД.
imho2: более надёжный способ - создать "нормальную" базу fin2, из fin средствами sql выгрузить бэкап, загрузить его в fin2, а потом из fin2 выгрузить так сильно желаемый dt-шник.
zelevova; +1 Ответить
17. Антон Стеклов (asved.ru) 33 17.09.13 11:23 Сейчас в теме
В случае клиент-серверной БД не вижу смысла использовать нестандартный функционал при наличии стандартного.

BACKUP DATABASE [ut-glass] TO  [userbases-E] WITH  COPY_ONLY, NOFORMAT, NOINIT,  NAME = N'ut-glass-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
USE [master]
RESTORE DATABASE [ut-glass1] FROM  [userbases-E] WITH  FILE = 1,  MOVE N'ut-glass' TO N'D:\sqldb\SQL1C\ut-glass1.mdf',  MOVE N'ut-glass_log' TO N'D:\sqldb\SQL1C\ut-glass1_log.ldf',  NOUNLOAD,  REPLACE,  STATS = 10
GO
...Показать Скрыть
FlagmanGK; u_n_k_n_o_w_n; x_rust; Den_D; EdmundoAlvares; maxopik2; Irwin; KEV8383; AlX0id; mr.Samuelson; +10 Ответить
18. Gr0ck (gr0ck) 17.09.13 11:25 Сейчас в теме
Админы как-то создали базы для разработки, при этом в 2-х ИБ указали одну и ту же базу. Заметили случайно, когда мой код "волшебным образом" появлялся у коллеги)) Немного поигрались и грохнули вторую базу, ибо рискованно это, пользоваться такой "особенностью" платформы
nurik727; u_n_k_n_o_w_n; cleaner_it; +3 Ответить
19. Александр Медведев (anig99) 2533 17.09.13 11:25 Сейчас в теме
Опасно и глупо при наличии более удачных альтернативных способов.
cleaner_it; +1 Ответить 1
20. Михаил Ражиков (tango) 474 17.09.13 12:01 Сейчас в теме
Однозначно плюс за раскрытие темы "трехзвенки" в терминах понятиях 1с
21. Алексей 1 (AlX0id) 17.09.13 12:04 Сейчас в теме
Да уж. А просто бэкапнуть средствами SQL никак? )
22. Леонид Фомин (xxxxxxpupkinxxxxxx) 17.09.13 13:19 Сейчас в теме
Как всегда, все гениальное просто. =) Плюс без сомнений.
23. Роман Осадченко (cleaner_it) 211 17.09.13 13:36 Сейчас в теме
Я как-то раз на заре рабочей карьеры (в запарке) таким образом заменил рабочую базу на копию... При работающих пользователях. Благо, бэкап SQL был полный, и бэкап логов. Урок на всю жизнь.
u_n_k_n_o_w_n; CHELLL; Den_D; dnkon; +4 Ответить
24. Дмитрий Кишкин (DmitryKishkin) 17.09.13 15:02 Сейчас в теме
Ну, вот небольшая база. И хочется получить с нее файловую, НЕ для бэкапа, а чтобы поиграться - поотлаживать и т.д. И плевать, что какие-то данные в ней будут не согласованы. На файловой это может быть гораздо удобнее, чем на серверной...
25. Алексей Полубенский (PolAlex2) 119 17.09.13 15:15 Сейчас в теме
на партнерском форуме уже вовсю обсуждают :))

"Мой сотрудник нашел способ работать с базрй в серверном варианте нежелательным способом. Считаю, что это дыра в платформе. Статья

"Как выгрузить базу средствами 1С, не выгоняя пользователей. Делаем невозможное." на инфостарте от 16.09.2013."
26. Алексей Полубенский (PolAlex2) 119 17.09.13 15:17 Сейчас в теме
а вот это - http://infostart.ru/public/22419/ ?
Ну не считая что нужна обязательно Enterprise Edition
27. Сергей Концеропятов (skyp) 34 17.09.13 16:00 Сейчас в теме
Очень ценная подсказка! Хотя, конечно нуждается в проверке, но однозначно спасет кому-то много нервов!
28. Юрий Осипов (yuraos) 895 17.09.13 18:16 Сейчас в теме
(19) anig99,
вообще-то это явная ДЫРА в платформе.

накладываются какие-то блокировки на что-то важное
...
а хранятся и проверяются эти блокировки не в БАЗЕ ДАННЫХ,
а где-то там ... в ИНФОРМАЦИОННОЙ БАЗЕ.
:)))
29. Андрей Акулов (DrAku1a) 1204 18.09.13 02:38 Сейчас в теме
Пользоваться можно. Но крайне осторожно и только для слива рабочей базы в файловый бекап.
Вариант "Сделать копию средствами SQL и выгрузить её в файловый бекап" - несколько дольше по времене, но всё-же безопаснее.
Решать вам. Лично я выбираю второй вариант...
Senpasi; Den_D; +2 Ответить
30. Just (Just) 2 18.09.13 04:36 Сейчас в теме
Мне тоже кажется, что "Сделать копию средствами SQL и выгрузить её в файловый бекап", намного проще и безопаснее, учитывая кучу порой неясных вылетом, типо "Ошибка формата потока". Из-за сомнительной экономии времени, можно потом неделю пытаться восстановить рабочую базу. За информацию, конечно плюс, я этого не знал.
31. Вадим Сайфутдинов (svad1) 12 18.09.13 06:43 Сейчас в теме
Интересно))). Думаю это дыра в 1с. Я всегда делаю средствами sql, безопаснее.. Автору + за находчивость)
32. Алексей (LineykaSBK) 1 18.09.13 07:27 Сейчас в теме
(30) Just, А если один сервак скуля, подскажите как вы востанавливаете скулевскую копию на этом серваке средствами скуля, мне выдает что имя базы не совпадает с копией и восстановление не возможно, и понятное дело что две базы с одним именем не возможно держать на серваке, в запросах может нужно где указать чтобы не учитывало имя базы в копии и имя в восстанавливаемой базе ?
33. Александр Дмитриев (МимохожийОднако) 116 18.09.13 07:48 Сейчас в теме
А если создать на SQL вторую базу и в неё средствами SQL скопировать рабочую базу? Потом прописать к ней путь и .. в путь? Фишка в том, чтобы отказаться от использования SQL? Вот такие вопросы возникли.
По большому счету для кодирования достаточно выгрузить конфигурацию и заполнить её своими данными.
34. Just (Just) 2 18.09.13 08:05 Сейчас в теме
(32) LineykaSBK, вот как бы человек уже написал или это была шутка
А если создать на SQL вторую базу и в неё средствами SQL скопировать рабочую базу? Потом прописать к ней путь и .. в путь?
Есть на скуле 2 база, типо "Тест", делаете копию рабочей базы в скуле, потом в тестовой указываете из какой базы или файла восстановить архив, в параметрах указываете путь восстановления фалов тестовой кнопка ОК. Вроде бы всё, проблем не должно быть, можно создать "план обслуживания", который будет делать копию рабочей и разворачивать в тестовую. одним нажатием. На больших базах это гораздо быстрее выгрузки/загрузки в ДТ. Как-то так ... или я чего не понял в вопросе...
35. Алексей (alsoftik) 6 18.09.13 09:14 Сейчас в теме
Автору плюс конечно, но блин я бы за копию не был бы уверен, что она будет нормальной?, хотя надо попробовать.
36. Денис (Den_D) 48 18.09.13 09:32 Сейчас в теме
(32)LineykaSBK,
(34)Just,
возможно еще надо поставить галочку overwrite the existing database на второй закладке options она на самом верху, а также в табличном поле указать файлы тестовой базы <имя тестовой базы>.mdf <имя тестовой базы>.ldf
37. Игорь Юндин (kereo) 53 18.09.13 10:16 Сейчас в теме
Ага, а еще с таким же успехом, можно скопировать файлы базы данных, может повезет.
mr.Samuelson; +1 Ответить
38. Алексей Опарихин (Al-X) 18.09.13 11:09 Сейчас в теме
Автору + !! Копии буду делать по старому ))))))))))) !!!
39. Oleksii Fomin (f0min) 18.09.13 11:31 Сейчас в теме
Каждый метод хорош для своих задач)
Автору благодарность за идею
40. Ivan Kovtun (i.kovtun) 119 18.09.13 15:53 Сейчас в теме
Странно, вроде известная особенность (еще с 8.0), с известной рекомендацией так не делать:).
41. Михаил Ражиков (tango) 474 18.09.13 16:37 Сейчас в теме
(40) i.kovtun, ссылочку не кинете на известную инфу?
42. Ivan Kovtun (i.kovtun) 119 18.09.13 16:51 Сейчас в теме
tango, ну на вскидку нашел презентацию Гилева по серверу 1С:

https://docs.google.com/presentation/d/15qz55PbOaDeQ2BYexEMqY2lbx2XN0NSNuG3w6dbW­C84/edit#slide=id.i191

14 слайд
P.S. Правда тут про два кластера, которые могут друг о друге не знать. Пожалуй, проконтролировать наличие двух ИБ в кластере, которые ссылаются на одну БД для вендора было бы не сложно и полезно:).
u_n_k_n_o_w_n; +1 Ответить 1
43. Алексей Роза (DoctorRoza) 18.09.13 17:40 Сейчас в теме
Вот уж что ни говори, а опасно все это! Если СУБД еще куда ни шло, а 1С может упасть на ровном месте. ИМХО, лучше тупо копировать файлы базы, пусть хоть и весят они под 200 гигов, без всяких архивов и бэкапов! А если работа ведется круглосуточно, то организовывать РИБ и настраивать обмен по ситуации.
44. Александр Ярошенко (teller) 19.09.13 06:52 Сейчас в теме
чего распереживались?
за целостность транзакций отвечает субд, за полученную копию отвечает сам админ,
если ему для тестовой конфигурации - то пусть пользуется с учетом возможной несогласованности на уровне логики 1с.
45. zaoallat zaoallat (zaoallat) 19.09.13 08:26 Сейчас в теме
Я бы не стал так рисковать так как если база больше 100 гигов и работают одновременно больше 100 пользователей когда база навернется медным тазам на востанновление работоспособности уйдет некоторое время. Я создал копию на уровне SQL и прописал в 1с сервере копия и работаю без проблем.
46. Серж Иванов (adminfo2002) 98 19.09.13 12:19 Сейчас в теме
Найден очередной баг 1с :-)
47. Михаил Ражиков (tango) 474 19.09.13 12:24 Сейчас в теме
(42) i.kovtun,
Правда тут про два кластер
да, и это, не умаля новизны сабжа, придает 1с-трехзвенке еще больше очарования :)
**
возвращаясь на десяток лет назад: 7.8 предпочтительнее 8.0 с точки зрения пользователей. но не разработчика вендора
i.kovtun; +1 Ответить
48. vicmos victor (vicmos) 40 19.09.13 12:43 Сейчас в теме
а backup средствами SQL? я бы не пользовался - стремно как-то
49. Роман Ложкин (webester) 22 01.10.13 14:58 Сейчас в теме
Не дотягивается рука до курка если ствол ружья, вставлен в рот? Нажимайте ногой! Прекрасный рецепт, нечего сказать :)
50. Ivan Kuznietsov (Ivon) 612 11.10.13 13:06 Сейчас в теме
Я уже давно бекапирую только средствами SQL. И юзеров не надо выбрасывать и бекапы занимают не так много места. У меня раз в неделю создается полный бекап, в остальные дни дифференциальный.
51. Андрей Усов (AndrewUs) 12 11.10.13 13:20 Сейчас в теме
Существуют некоторые программы, которые сами архивируют базы, главное настроить правильно, и ничего придумывать не придётся, хотя yurega молодец. И потом никто не заставляет этим методом пользоваться. Каждый делает как умеет.
52. Сергей Иванов (u_n_k_n_o_w_n) 31 08.10.14 14:34 Сейчас в теме
Я думаю это больше похоже на глюк ПО - который естественно разработчики должны устранять.
53. Дмитрий Дмитрий (dmitry1c1991) 06.07.16 10:51 Сейчас в теме
средствами SQL backup сделать сложно ?? Очередная статья для тех кто хочет похерить себе базу .
Оставьте свое сообщение