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

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

Как выгрузить базу не выгоняя пользователей

70
В  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С может непредсказуемо повести себя с базой данных на сервере СУБД.  Поэтому экспериментировать с этой возможностью я не стал, только несколько раз успешно использовал её для снятия архива больших баз, где ведется круглосуточная работа.

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

70

См. также

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

Комментарии
Избранное Подписка Сортировка: Древо
1. vcv 84 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 70 17.09.13 03:42 Сейчас в теме
При сохранении базы таким способом, часть информации, измененной в процессе выгрузки, может выгрузиться не корректно. С этим согласен. Поэтому для бэкапа базы этот способ лучше не использовать.

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

Если обновлять конфигурацию таким способом, то, скорее всего, база данных не выживет после этого. Лучше даже не пробовать :-)
5. yuraos 952 17.09.13 06:19 Сейчас в теме
забавно,
но описанный фокус с выгрузкой клона базы канает.
---
(4)
а вот обновить конфигурацию просто так на халяву не удастся.
(см. вложение)
Прикрепленные файлы:
6. yuraos 952 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 539 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 539 17.09.13 10:31 Сейчас в теме
(12) Famza,
Его нужно знать, но вот его применение как раз и может привести к непредвиденным ситуевинам.

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

В результате получилось то, что получилось... не хотел обидеть, если чего ам сорри.
14. 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 1021 17.09.13 10:49 Сейчас в теме
Поэтому экспериментировать с этой возможностью я не стал

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


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



16. q_i 373 17.09.13 11:10 Сейчас в теме
imho1: описанная возможность - ошибка (ну в крайнем случае не очень хорошая фича) платформы, т.к. при создании новой ИБ должна быть проверка не зарегистрирована ли уже база с такой же БД.
imho2: более надёжный способ - создать "нормальную" базу fin2, из fin средствами sql выгрузить бэкап, загрузить его в fin2, а потом из fin2 выгрузить так сильно желаемый dt-шник.
zelevova; +1 Ответить
17. asved.ru 36 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 17.09.13 11:25 Сейчас в теме
Админы как-то создали базы для разработки, при этом в 2-х ИБ указали одну и ту же базу. Заметили случайно, когда мой код "волшебным образом" появлялся у коллеги)) Немного поигрались и грохнули вторую базу, ибо рискованно это, пользоваться такой "особенностью" платформы
nurik727; u_n_k_n_o_w_n; cleaner_it; +3 Ответить
19. anig99 2649 17.09.13 11:25 Сейчас в теме
Опасно и глупо при наличии более удачных альтернативных способов.
cleaner_it; +1 Ответить
28. yuraos 952 17.09.13 18:16 Сейчас в теме
(19) anig99,
вообще-то это явная ДЫРА в платформе.

накладываются какие-то блокировки на что-то важное
...
а хранятся и проверяются эти блокировки не в БАЗЕ ДАННЫХ,
а где-то там ... в ИНФОРМАЦИОННОЙ БАЗЕ.
:)))
20. tango 485 17.09.13 12:01 Сейчас в теме
Однозначно плюс за раскрытие темы "трехзвенки" в терминах понятиях 1с
21. AlX0id 17.09.13 12:04 Сейчас в теме
Да уж. А просто бэкапнуть средствами SQL никак? )
22. xxxxxxpupkinxxxxxx 17.09.13 13:19 Сейчас в теме
Как всегда, все гениальное просто. =) Плюс без сомнений.
23. cleaner_it 233 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 35 17.09.13 16:00 Сейчас в теме
Очень ценная подсказка! Хотя, конечно нуждается в проверке, но однозначно спасет кому-то много нервов!
29. DrAku1a 1293 18.09.13 02:38 Сейчас в теме
Пользоваться можно. Но крайне осторожно и только для слива рабочей базы в файловый бекап.
Вариант "Сделать копию средствами SQL и выгрузить её в файловый бекап" - несколько дольше по времене, но всё-же безопаснее.
Решать вам. Лично я выбираю второй вариант...
Senpasi; Den_D; +2 Ответить
30. Just 2 18.09.13 04:36 Сейчас в теме
Мне тоже кажется, что "Сделать копию средствами SQL и выгрузить её в файловый бекап", намного проще и безопаснее, учитывая кучу порой неясных вылетом, типо "Ошибка формата потока". Из-за сомнительной экономии времени, можно потом неделю пытаться восстановить рабочую базу. За информацию, конечно плюс, я этого не знал.
32. LineykaSBK 1 18.09.13 07:27 Сейчас в теме
(30) Just, А если один сервак скуля, подскажите как вы востанавливаете скулевскую копию на этом серваке средствами скуля, мне выдает что имя базы не совпадает с копией и восстановление не возможно, и понятное дело что две базы с одним именем не возможно держать на серваке, в запросах может нужно где указать чтобы не учитывало имя базы в копии и имя в восстанавливаемой базе ?
34. Just 2 18.09.13 08:05 Сейчас в теме
(32) LineykaSBK, вот как бы человек уже написал или это была шутка
А если создать на SQL вторую базу и в неё средствами SQL скопировать рабочую базу? Потом прописать к ней путь и .. в путь?
Есть на скуле 2 база, типо "Тест", делаете копию рабочей базы в скуле, потом в тестовой указываете из какой базы или файла восстановить архив, в параметрах указываете путь восстановления фалов тестовой кнопка ОК. Вроде бы всё, проблем не должно быть, можно создать "план обслуживания", который будет делать копию рабочей и разворачивать в тестовую. одним нажатием. На больших базах это гораздо быстрее выгрузки/загрузки в ДТ. Как-то так ... или я чего не понял в вопросе...
36. Den_D 51 18.09.13 09:32 Сейчас в теме
(32)LineykaSBK,
(34)Just,
возможно еще надо поставить галочку overwrite the existing database на второй закладке options она на самом верху, а также в табличном поле указать файлы тестовой базы <имя тестовой базы>.mdf <имя тестовой базы>.ldf
31. svad1 10 18.09.13 06:43 Сейчас в теме
Интересно))). Думаю это дыра в 1с. Я всегда делаю средствами sql, безопаснее.. Автору + за находчивость)
33. МимохожийОднако 120 18.09.13 07:48 Сейчас в теме
А если создать на SQL вторую базу и в неё средствами SQL скопировать рабочую базу? Потом прописать к ней путь и .. в путь? Фишка в том, чтобы отказаться от использования SQL? Вот такие вопросы возникли.
По большому счету для кодирования достаточно выгрузить конфигурацию и заполнить её своими данными.
35. alsoftik 6 18.09.13 09:14 Сейчас в теме
Автору плюс конечно, но блин я бы за копию не был бы уверен, что она будет нормальной?, хотя надо попробовать.
37. kereo 54 18.09.13 10:16 Сейчас в теме
Ага, а еще с таким же успехом, можно скопировать файлы базы данных, может повезет.
mr.Samuelson; +1 Ответить
38. Al-X 18.09.13 11:09 Сейчас в теме
Автору + !! Копии буду делать по старому ))))))))))) !!!
39. f0min 18.09.13 11:31 Сейчас в теме
Каждый метод хорош для своих задач)
Автору благодарность за идею
40. i.kovtun 140 18.09.13 15:53 Сейчас в теме
Странно, вроде известная особенность (еще с 8.0), с известной рекомендацией так не делать:).
41. tango 485 18.09.13 16:37 Сейчас в теме
(40) i.kovtun, ссылочку не кинете на известную инфу?
42. i.kovtun 140 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 Ответить
47. tango 485 19.09.13 12:24 Сейчас в теме
(42) i.kovtun,
Правда тут про два кластер
да, и это, не умаля новизны сабжа, придает 1с-трехзвенке еще больше очарования :)
**
возвращаясь на десяток лет назад: 7.8 предпочтительнее 8.0 с точки зрения пользователей. но не разработчика вендора
i.kovtun; +1 Ответить
43. DoctorRoza 18.09.13 17:40 Сейчас в теме
Вот уж что ни говори, а опасно все это! Если СУБД еще куда ни шло, а 1С может упасть на ровном месте. ИМХО, лучше тупо копировать файлы базы, пусть хоть и весят они под 200 гигов, без всяких архивов и бэкапов! А если работа ведется круглосуточно, то организовывать РИБ и настраивать обмен по ситуации.
44. teller 19.09.13 06:52 Сейчас в теме
чего распереживались?
за целостность транзакций отвечает субд, за полученную копию отвечает сам админ,
если ему для тестовой конфигурации - то пусть пользуется с учетом возможной несогласованности на уровне логики 1с.
45. zaoallat 19.09.13 08:26 Сейчас в теме
Я бы не стал так рисковать так как если база больше 100 гигов и работают одновременно больше 100 пользователей когда база навернется медным тазам на востанновление работоспособности уйдет некоторое время. Я создал копию на уровне SQL и прописал в 1с сервере копия и работаю без проблем.
46. free-lancer-2018 19.09.13 12:19 Сейчас в теме
Найден очередной баг 1с :-)
48. vicmos 41 19.09.13 12:43 Сейчас в теме
а backup средствами SQL? я бы не пользовался - стремно как-то
49. webester 28 01.10.13 14:58 Сейчас в теме
Не дотягивается рука до курка если ствол ружья, вставлен в рот? Нажимайте ногой! Прекрасный рецепт, нечего сказать :)
50. Ivon 634 11.10.13 13:06 Сейчас в теме
Я уже давно бекапирую только средствами SQL. И юзеров не надо выбрасывать и бекапы занимают не так много места. У меня раз в неделю создается полный бекап, в остальные дни дифференциальный.
51. AndrewUs 10 11.10.13 13:20 Сейчас в теме
Существуют некоторые программы, которые сами архивируют базы, главное настроить правильно, и ничего придумывать не придётся, хотя yurega молодец. И потом никто не заставляет этим методом пользоваться. Каждый делает как умеет.
52. u_n_k_n_o_w_n 28 08.10.14 14:34 Сейчас в теме
Я думаю это больше похоже на глюк ПО - который естественно разработчики должны устранять.
53. dmitry1c1991 06.07.16 10:51 Сейчас в теме
средствами SQL backup сделать сложно ?? Очередная статья для тех кто хочет похерить себе базу .
Оставьте свое сообщение