Быстрый бэкап изменяемых данных

19.01.17

База данных - Архивирование (backup)

Хочу поделиться способом восстановления большого массива измененных данных, который мне удалось применить. Решение простое но не очень очевидное для меня.

Допустим, вам необходимо изменить элементы справочника Характеристика номенклатуры. Их очень много, вы их отбираете каким-нибудь запросом в консоли:

ВЫБРАТЬ
                ЦеныНоменклатурыСрезПоследних.Характеристика,
                ЦеныНоменклатурыСрезПоследних.Цена,
                ХарактеристикиНоменклатурыДополнительныеРеквизиты.Значение КАК ЦенаКакСвойство
ИЗ
                РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Видцены) КАК ЦеныНоменклатурыСрезПоследних
                               ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиНоменклатурыДополнительныеРеквизиты
                               ПО ЦеныНоменклатурыСрезПоследних.Характеристика = ХарактеристикиНоменклатурыДополнительныеРеквизиты.Ссылка
                                               И (ХарактеристикиНоменклатурыДополнительныеРеквизиты.Свойство = &Свойство)
ГДЕ
                ЦеныНоменклатурыСрезПоследних.Цена = (ВЫРАЗИТЬ(ХарактеристикиНоменклатурыДополнительныеРеквизиты.Значение КАК ЧИСЛО(15, 2)))

И пишете обработку, которая по этому запросу поменяет значения реквизитов в этих элементах. Как обеспечить откат в случае ошибки обработки?

Очень просто. В консоли запросов вы (предварительно!) сохраняете таблицу результата в формате mxl:

И спокойно выполняете свою обработку изменив и перезаписав 100500 характеристик номенклатуры.

Внезапно вы выясняете что изменили неправильно. Что делать?

Дело в том, что в mxl вы сохранили не только строковые значения, но и ссылки на объекты, которые хранятся в расшифровке. Поэтому пишем простой код получающий из mxl непосредственно объекты, сохраненные в расшировках полей mxl. В моем случае это выглядело так:

ТоСамоеСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Старая цена (хар.)",ложь);
                ТабДок = Новый ТабличныйДокумент;
                ТабДок.Прочитать("C:\ бакуп.mxl");
                Для  ш = 2 по 2354 цикл
                               Область = табдок.Область(ш,1,ш,1);
                               сообщить(область.Расшифровка);
                               сообщить(ТипЗнч(область.Расшифровка));//убеждаемся, что там действительно ссылки
                               Цена = Число(стрзаменить(табдок.Область(ш,2,ш,2).Текст," ",""));
                               Сообщить(Цена);
                               Об = Область.Расшифровка.ПолучитьОбъект();
                               Для каждого о из об.ДополнительныеРеквизиты Цикл
                                               Если о.Свойство = ТоСамоеСвойство Тогда
                                                               о.Значение = Число(Цена);
                                                               Прервать;
                                               КонецЕсли;
                               КонецЦикла;
                               Об.записать();
                Конеццикла;

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

Да хранит вас Нуралиев!

Вступайте в нашу телеграмм-группу Инфостарт

бэкап расшифровка mxl

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Архивирование (backup) Инструменты администратора БД Системный администратор Программист 1С 8.3 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Абонемент ($m)

Полностью автоматизированная внешняя обработка для администрирования 1С: блокировка/разблокировка ИБ, массовое завершение сеансов, резервное копирование и восстановление из .dt, выгрузка/загрузка конфигурации (.cf), пакетная работа с расширениями (.cfe) и дополнительными обработками – всё через удобную форму без ручных запусков конфигуратора и консоли кластера

1 стартмани

21.01.2026    4774    48    war41k    0    

17

Архивирование (backup) Групповая разработка (Git, хранилище) Системный администратор Программист Бесплатно (free)

Как дать возможность каждому разработчику 1С вести разработку, тестирование и оптимизацию на собственной полноразмерной копии базы и при этом не тратить миллиарды рублей и тысячи часов на развертывание тестового окружения, а так же экономить дисковое пространство? Расскажем о том, как с помощью инструмента Database Lab получать полноразмерные копии базы 1C на СУБД PostgreSQL за считанные секунды (даже в случае использования многотерабайтных баз).

15.12.2025    9597    nasonkin    18    

30

Архивирование (backup) Системный администратор 1С 8.3 Бесплатно (free)

Предлагаю Вашему вниманию 3 скрипта на bash (sh) для архивирования (backup) типовых конфигураций на Linux средствами 1С и Postgres. Перед запуском корректно заполните раздел "Параметры" в соответствии с Вашими настройками.

20.01.2025    4345    Prelude    5    

12

Архивирование (backup) 1С:Предприятие 8 1С:Управление нашей фирмой 3.0 Платные (руб)

Расширение поможет настроить резервное копирование баз SQL в стандартный файл выгрузки баз 1С (*.dt).

3 стартмани

27.08.2024    3600    1    a_kudaev    6    

2

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист 1С:Предприятие 8 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    9169    1CUnlimited    11    

6

Инструменты администратора БД Архивирование (backup) Системный администратор Программист 1С:Предприятие 8 Абонемент ($m)

Обработка для "обновления" своей тестовой базы из резервной копии рабочей базы без помощи админов.

1 стартмани

21.05.2024    4372    15    DenDev01    4    

9

Архивирование (backup) Администрирование СУБД Системный администратор Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    17871    n_mezentsev    15    

27
Отзывы
17. speshuric 1343 23.01.17 10:33 Сейчас в теме
(6) Что-то мне кажется, что это слишком оптимистично:
Проще по журналу транзакций откатить базу на 4 минуты назад.

Для восстановления на точку во времени по журналу транзакций нужно:
1. Чтобы БД была на SQL сервере и модель полная. Ситуация частая, но не 100%
2. Права на восставноление БД на SQL сервере (их может и не быть)
3. Нужно много времени. Для восстановления нужно: отрубить всех, восстановить предыдущий полный, восстановить предыдущий разностный (если есть), восстановить цепочку ЖТ.
4. Быть уверенным, что при этом не потеряются другие критичные данные, введенные/измененные за эти 4 минуты.

Понятно, что этой обработке не место на продакшене, но в качестве инструмента разработчика/тестировщика на своей среде - отличный пример.
alest; thevist; dark_wolf; JohnyDeath; pbazeliuk; ogroup; +6 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. oleshko_alexey 2 20.01.17 14:15 Сейчас в теме
а скорость работы какая?
10000 позиций - транзакция нажна
8. ogroup 320 23.01.17 05:55 Сейчас в теме
(1) Алексей, не мерил, но для 2-5 тысяч позиций вполне приемлемая, секунд 12-15.
2. sokol_6630 3 21.01.17 17:33 Сейчас в теме
Лучше в excel сохранить и потом при загрузке при помощи метода Range сохранить все нужные данные в Таблицу значений и потом уже из нее восстанавливать нужные данные. А таким методом каждый раз приходится получать область с данными, это не слишком быстро.
3. Lem0n 443 22.01.17 01:09 Сейчас в теме
ВыгрузкаЗагрузка между идентичными конфигурациями на ИТС
ИНТЕГРА; SuhoffGV; mmch; baracuda; +4 Ответить
4. davdykin 25 22.01.17 23:55 Сейчас в теме
С выгрузкой/загрузкой все хорошо пока вы конфигурацию не поменяли, опять же фильтр писать надо, а это способ. По производительности думаю не особо, но так и делается он на всякие пожарный, а не как средство переноса.
alest; olbu; ogroup; +3 Ответить
5. PrinzOfMunchen 84 23.01.17 05:17 Сейчас в теме
Денис, а если просто таблицу значений сохранить в файл через "ЗначениеВСтрокуВнутр"? При восстановлении через "ЗначениеИзСтрокиВнутр" ссылки остаются.
А есть ещё и сериализация стандартных объектов...
Но да, можно и так, конечно ))
9. ogroup 320 23.01.17 05:59 Сейчас в теме
(5) Вся фишка этой штуки в том, что не нужно ничего писать предварительно. в 99% случаев вы пишите запрос в консоли, прежде чем запустить его в работу.
10. PrinzOfMunchen 84 23.01.17 06:04 Сейчас в теме
(9) Просто добавь в консольку кнопки сохранения/восстановления результатов запроса (таблицы значений). И всё будет работать намного быстрее, чем обход mxl в цикле.
6. collider 23.01.17 05:18 Сейчас в теме
Способ интересный, но мне кажется, что сложноват. Много надо держать в голове. Проще по журналу транзакций откатить базу на 4 минуты назад.
7. ogroup 320 23.01.17 05:54 Сейчас в теме
(6) В большинстве случаев, его нет (
11. webester 26 23.01.17 06:59 Сейчас в теме
(6)Вместе с со своими изменениями, откатить продажи, уже пробитые в ККМ чеки и созданные кем нибудь элементы справочников. Мои юзеры сразу убивают за такое .
CyberCerber; PrinzOfMunchen; ogroup; +3 Ответить
12. collider 23.01.17 07:45 Сейчас в теме
(11) Наверное полагается что то, что автор предложил, будет происходить в
1. Тестовой базе
2. Рабочей базе без пользователей (на случай необходимости отката)

А в рабочей базе и при этом с людьми в ней, я в любом случае не рискнул бы делать подобное. Выгружать в mxl и загружать обратно - это не такая уж и надёжная операция. Однажды что-то упустишь и будешь откатывать к ночному бэкапу продажи, уже пробитые в ККМ, чеки и созданные кем нибудь элементы справочников.
13. webester 26 23.01.17 08:50 Сейчас в теме
(12)Ну... как то упустил. У меня тестовая база в режиме восстановления "простая". В таком случае да, лог проще откатить.
17. speshuric 1343 23.01.17 10:33 Сейчас в теме
(6) Что-то мне кажется, что это слишком оптимистично:
Проще по журналу транзакций откатить базу на 4 минуты назад.

Для восстановления на точку во времени по журналу транзакций нужно:
1. Чтобы БД была на SQL сервере и модель полная. Ситуация частая, но не 100%
2. Права на восставноление БД на SQL сервере (их может и не быть)
3. Нужно много времени. Для восстановления нужно: отрубить всех, восстановить предыдущий полный, восстановить предыдущий разностный (если есть), восстановить цепочку ЖТ.
4. Быть уверенным, что при этом не потеряются другие критичные данные, введенные/измененные за эти 4 минуты.

Понятно, что этой обработке не место на продакшене, но в качестве инструмента разработчика/тестировщика на своей среде - отличный пример.
alest; thevist; dark_wolf; JohnyDeath; pbazeliuk; ogroup; +6 Ответить
19. ture 617 24.01.17 12:42 Сейчас в теме
(17)
Что-то мне кажется, что это слишком оптимистично:
Проще по журналу транзакций откатить базу на 4 минуты назад.


На заре юности и желторотости, я, к примеру, реально верил в это. Потом разок попробовал... получилось одного журнала почему-то мало. Долго не мог унять негодования. Но звучит то как красиво! - "на 4 минуты назад"

Жаль, что бакуп так "странно" устроен.
14. baracuda 2 23.01.17 08:56 Сейчас в теме
Один вопрос, а что если в запросе была допущена неочевидная ошибка, как часто бывает. Все данные в итоге коту под хвост.
Очень вредный совет. Как минимум я все равно перед операцией сделал бы бэкап данных.
alest; collider; +2 Ответить
15. ogroup 320 23.01.17 09:21 Сейчас в теме
(14) я здесь предполагаю, что запрос, выполняемый в запроснике, и запрос, выполняемый при изменении данных - один и тот же. Пусть даже и с ошибкой, но отработает он одинаково
16. Zhilyakovdr 148 23.01.17 10:29 Сейчас в теме
Превое. Изменение каких то больших массивов данных чаще всего делают ночью когда база свободна от пользователей.
Второе. В большинстве фирм которые дорожат своими данными кроме ночных бекапов делаются бекапы логов (у нас в организации каждые 5 минут)
Предположим вы сделали ошибку, сразу ее не заметили, прошло несколько дней.
Поднимается бекап на точку с корректными данными и как уже писали выше используется ВыгрузкаЗагрузка между идентичными конфигурациями.
Если структура изменилась то в том чтобы привести тестовую базу(из бекапа) в соответствие с боевой нет ничего сложного, особенно если вы используете хранилище.
Но самый лучший способ это не косячить на боевых серверах)))))
18. NN2P 422 24.01.17 11:59 Сейчас в теме
Бакуп сделал мой день!
Прикрепленные файлы:
ogroup; Светлый ум; DrAku1a; WellMaster; alevnev; JohnyDeath; +6 Ответить
20. МимохожийОднако 142 25.01.17 07:52 Сейчас в теме
Перед массовым изменениями в боевой базе. 1. Сделать архив. 2. Проверить на копии. 3. Внести изменения.
Хотя сама по себе идея интересная при тестировании.
SuhoffGV; +1 Ответить
21. didkovskij 44 25.01.17 10:08 Сейчас в теме
как вариант, с помощью обработки "Выгрузка и загрузка данных XML"
можно универсальной выгрузкой выгрузить данные в xml. Затем откатить простой загрузкой.
25. prog-1s 63 11.02.17 14:54 Сейчас в теме
(21) Самое простое решение, поддерживаю! Но вообще это актуально только при тестировании обработки. На рабочей базе лучше такие изменения делать в монопольном режиме.
22. Angealtor 25 25.01.17 10:17 Сейчас в теме
Автор скорее всего свое решение предлагает использовать в случаях, когда один из менеджеров компании меняет несколько реквизитов (100-10000) у определенной группы товаров,например, и допускает ошибку. Т.е. способ предназначен преимущественно для справочников.
23. DrAku1a 1796 26.01.17 02:31 Сейчас в теме
Примерно так:
1. ЗначениеВФайл / ЗначениеИзФайла
2. ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр
3. XML-сериализация (обработка "Выгрузка-загрузка данных в формате XML", вроде есть на ИТС и для 8.2, и для 8.3)
Прикрепленные файлы:
24. Probot1c 04.02.17 06:00 Сейчас в теме
Способ интересный, но я пользуюсь утилитой ежедневного (недельного) копирования БД ..effector saver (если кому понадобится)
Для отправки сообщения требуется регистрация/авторизация