gifts2017

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

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

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

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

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

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

Если обновлять конфигурацию таким способом, то, скорее всего, база данных не выживет после этого. Лучше даже не пробовать :-)
5. Юрий Осипов (yuraos) 17.09.13 06:19
забавно,
но описанный фокус с выгрузкой клона базы канает.
---
(4)
а вот обновить конфигурацию просто так на халяву не удастся.
(см. вложение)
Прикрепленные файлы:
6. Юрий Осипов (yuraos) 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) 17.09.13 09:17
Пусть способ и стремный, но знать его просто обязательно - хотя бы для того чтобы избежать непредвиденных ситуёвин потом. +1
11. Евгений Пономаренко (Evgen.Ponomarenko) 17.09.13 09:44
(10) Famza,
Способ, не только хакерский, но и очень стремный! (Хотя за идею +).
Во первых, выгруженный таким образом DT, может содержать не согласованные данные.
Во вторых, можно легко нарваться на непредсказуемое поведения SQL серверов разных производителей, под разные OS. Эффект, на фоне огромных объемов данных, может превзойти любые Ваши ожидания.
В третьих, можно банально промахнуться и накосячить вместо тестовой базы в боевой, в виду отсутствия контроля той самой пресловутой "монопольности".

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

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

В результате получилось то, что получилось... не хотел обидеть, если чего ам сорри.
14. DERL (DERL) 17.09.13 10:44
Способ конечно очень интересный, но "Славик, чот я очкуюсь..." :):):)
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; +16 Ответить
15. Иван Титов (Ibrogim) 17.09.13 10:49
Поэтому экспериментировать с этой возможностью я не стал

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


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



16. q_i 17.09.13 11:10
imho1: описанная возможность - ошибка (ну в крайнем случае не очень хорошая фича) платформы, т.к. при создании новой ИБ должна быть проверка не зарегистрирована ли уже база с такой же БД.
imho2: более надёжный способ - создать "нормальную" базу fin2, из fin средствами sql выгрузить бэкап, загрузить его в fin2, а потом из fin2 выгрузить так сильно желаемый dt-шник.
zelevova; +1 Ответить
17. Антон Стеклов (asved.ru) 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) 17.09.13 11:25
Опасно и глупо при наличии более удачных альтернативных способов.
cleaner_it; +1 Ответить 1
20. Михаил Ражиков (tango) 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) 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) 17.09.13 15:15
на партнерском форуме уже вовсю обсуждают :))

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

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

накладываются какие-то блокировки на что-то важное
...
а хранятся и проверяются эти блокировки не в БАЗЕ ДАННЫХ,
а где-то там ... в ИНФОРМАЦИОННОЙ БАЗЕ.
:)))
29. Андрей Акулов (DrAku1a) 18.09.13 02:38
Пользоваться можно. Но крайне осторожно и только для слива рабочей базы в файловый бекап.
Вариант "Сделать копию средствами SQL и выгрузить её в файловый бекап" - несколько дольше по времене, но всё-же безопаснее.
Решать вам. Лично я выбираю второй вариант...
Senpasi; Den_D; +2 Ответить
30. Just (Just) 18.09.13 04:36
Мне тоже кажется, что "Сделать копию средствами SQL и выгрузить её в файловый бекап", намного проще и безопаснее, учитывая кучу порой неясных вылетом, типо "Ошибка формата потока". Из-за сомнительной экономии времени, можно потом неделю пытаться восстановить рабочую базу. За информацию, конечно плюс, я этого не знал.
31. Вадим Сайфутдинов (svad1) 18.09.13 06:43
Интересно))). Думаю это дыра в 1с. Я всегда делаю средствами sql, безопаснее.. Автору + за находчивость)
32. Алексей (LineykaSBK) 18.09.13 07:27
(30) Just, А если один сервак скуля, подскажите как вы востанавливаете скулевскую копию на этом серваке средствами скуля, мне выдает что имя базы не совпадает с копией и восстановление не возможно, и понятное дело что две базы с одним именем не возможно держать на серваке, в запросах может нужно где указать чтобы не учитывало имя базы в копии и имя в восстанавливаемой базе ?
33. Александр (МимохожийОднако) 18.09.13 07:48
А если создать на SQL вторую базу и в неё средствами SQL скопировать рабочую базу? Потом прописать к ней путь и .. в путь? Фишка в том, чтобы отказаться от использования SQL? Вот такие вопросы возникли.
По большому счету для кодирования достаточно выгрузить конфигурацию и заполнить её своими данными.
34. Just (Just) 18.09.13 08:05
(32) LineykaSBK, вот как бы человек уже написал или это была шутка
А если создать на SQL вторую базу и в неё средствами SQL скопировать рабочую базу? Потом прописать к ней путь и .. в путь?
Есть на скуле 2 база, типо "Тест", делаете копию рабочей базы в скуле, потом в тестовой указываете из какой базы или файла восстановить архив, в параметрах указываете путь восстановления фалов тестовой кнопка ОК. Вроде бы всё, проблем не должно быть, можно создать "план обслуживания", который будет делать копию рабочей и разворачивать в тестовую. одним нажатием. На больших базах это гораздо быстрее выгрузки/загрузки в ДТ. Как-то так ... или я чего не понял в вопросе...
35. Алексей (alsoftik) 18.09.13 09:14
Автору плюс конечно, но блин я бы за копию не был бы уверен, что она будет нормальной?, хотя надо попробовать.
36. Денис (Den_D) 18.09.13 09:32
(32)LineykaSBK,
(34)Just,
возможно еще надо поставить галочку overwrite the existing database на второй закладке options она на самом верху, а также в табличном поле указать файлы тестовой базы <имя тестовой базы>.mdf <имя тестовой базы>.ldf
37. Игорь Юндин (kereo) 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) 18.09.13 15:53
Странно, вроде известная особенность (еще с 8.0), с известной рекомендацией так не делать:).
41. Михаил Ражиков (tango) 18.09.13 16:37
(40) i.kovtun, ссылочку не кинете на известную инфу?
42. Ivan Kovtun (i.kovtun) 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) 19.09.13 12:19
Найден очередной баг 1с :-)
47. Михаил Ражиков (tango) 19.09.13 12:24
(42) i.kovtun,
Правда тут про два кластер
да, и это, не умаля новизны сабжа, придает 1с-трехзвенке еще больше очарования :)
**
возвращаясь на десяток лет назад: 7.8 предпочтительнее 8.0 с точки зрения пользователей. но не разработчика вендора
i.kovtun; +1 Ответить
48. vicmos victor (vicmos) 19.09.13 12:43
а backup средствами SQL? я бы не пользовался - стремно как-то
49. Роман Ложкин (webester) 01.10.13 14:58
Не дотягивается рука до курка если ствол ружья, вставлен в рот? Нажимайте ногой! Прекрасный рецепт, нечего сказать :)
50. Ivon (Ivon) 11.10.13 13:06
Я уже давно бекапирую только средствами SQL. И юзеров не надо выбрасывать и бекапы занимают не так много места. У меня раз в неделю создается полный бекап, в остальные дни дифференциальный.
51. Андрей Усов (AndrewUs) 11.10.13 13:20
Существуют некоторые программы, которые сами архивируют базы, главное настроить правильно, и ничего придумывать не придётся, хотя yurega молодец. И потом никто не заставляет этим методом пользоваться. Каждый делает как умеет.
52. Сергей Иванов (u_n_k_n_o_w_n) 08.10.14 14:34
Я думаю это больше похоже на глюк ПО - который естественно разработчики должны устранять.
53. Дмитрий Дмитрий (dmitry1c1991) 06.07.16 10:51
средствами SQL backup сделать сложно ?? Очередная статья для тех кто хочет похерить себе базу .
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа