Резервное копирование и восстановление базы 1С средствами PostgreSQL

01.08.16

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

Алгоритм резервного копирования баз 1С: 8 средствами PostgreSQL.

В интернете куча статей, как установить PostgreSQL и залить в него базу из dt.

Но столкнулся с проблемой резервного копирования и восстановления базы средствами PostgreSQL.

т.е.  при восстановлении базы сыпались ошибки, и восстановленная копия базы не работала.

Ошибочный алгоритм.

1. Делаем резервную копию скриптом или с помощью pgAdmin III --- получаем файлик bkp...

2. Создаем пустую базу средствами 1С сервера.

3. Восстанавливаем резервную копию скриптом или с помощью pgAdmin III в базу, созданную на шаге 2.

и болт : во время восстановления уже видны ошибки и восстановленая копия получается не рабочая (в конфигуратор пускает, но в предприятие уже не войти, "ошибка аутентификации пользователя" и т.п.)

Правильный алгоритм.

1. Делаем резервную копию скриптом или с помощью pgAdmin III --- получаем файлик bkp...

Пример командного файла :

"C:\Program Files\PostgreSQL\9.4.2-1.1C\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --role "postgres" --no-password --format custom --blobs --section pre-data --section data --section post-data --encoding UTF8 --verbose --file "c:\1c_base.backup" "1c_base"

pause

где   "1c_base"  - имя базы

       "c:\1c_base.backup"  - имя файла резервной копии

2. Создаем пустую базу средствами Postgre - Я делал pgAdmin III -ом. (и пока не добавляем ее через "Администрирование сервера 1С" )

пустую базу можно создать командой CREATE DATABASE https://www.postgresql.org/docs/9.1/static/sql-createdatabase.html

3. Восстанавливаем резервную копию скриптом или с помощью pgAdmin III в базу созданную на шаге 2.

Пример командного файла :

"C:\Program Files\PostgreSQL\9.4.2-1.1C\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "1c_base_copy" --role "postgres" --no-password  --section pre-data --section data --section post-data --verbose "C:\ 1c_base.backup"

pause

где   "1c_base_copy"  - имя пустой базы, созданой в шаге 2 средствами PostgreSQL

       "c:\1c_base.backup"  - имя файла резервной копии

4. Добавляем базу созданную на шаге 2 с  восстановленной информацией в список баз на сервере 1С через остнастку "Администрирование сервера 1С".

Вот и все !!! Всем удачного дня !!!

Резервное копирование восстановление базы из архива PostgreSQL развернуть базу из архива PostgreSQL.

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

19200 руб.

15.05.2017    42521    10    24    

38

BackUPv8 - система резервного копирования баз 1С

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    14731    13    6    

18

Резервное копирование журнала транзакций, наконец-то!

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

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

04.12.2023    5867    n_mezentsev    15    

24

Резервное копирование и восстановление 1С баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

07.10.2022    19820    sapervodichka    36    

142

Архивирование базы в dt и дамп postgres

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Захотелось клиентам выгрузку архива баз, и выгрузку в дт, готовые скрипты с сети не заработали. Может, кому-то поможет. Релиз 8.3.18.1741.

1 стартмани

25.08.2022    4716    2    Gnom-Gluck    6    

6

Утилита копирования баз данных 1С

Архивирование (backup) Платформа 1С v8.3 Абонемент ($m)

Небольшая утилита для копирования файловых баз данных 1С.

1 стартмани

02.06.2022    4236    3    Giblarium    12    

5
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. dimisa 135 01.08.16 17:02 Сейчас в теме
(1) lustin,
Зачем так сложно ?
cmd - файл в задания под какой нибуть локальной админской записью.
3. cssprite 28 02.08.16 08:21 Сейчас в теме
http://postgresql.ru.net/manual/backup-dump.html

Текстовые файлы, созданные pg_dump предназначаются для последующего чтения программой psql. Общий вид команды для восстановления дампа:

psql имя_БД < файл_дампа

где файл_дампа — это файл, содержащий вывод команды pg_dump. База данных, заданная параметром имя_БД не будет создана данной командой, так что вы должны создать её сами из базы template0 перед запуском psql (например, с помощью команды createdb -T template0 имя_БД)
neyasytyf; cleaner_it; +2 Ответить
4. oldcopy 173 03.08.16 10:46 Сейчас в теме
Ещё следует уточнить что кодировка дампа должна совпадать с кодировкой сервера БД.
pr0t; cleaner_it; +2 Ответить
5. freeraider 24 05.08.16 06:38 Сейчас в теме
PostgreSQL не восстанавливает текущую базу из дампа.
Поэтому, я восстанавливаю базу так:
dropdb имя_базы
createdb имя_базы
psql имя_базы < файл_дампа

Мой скрипт восстановления для Linux (работает под пользователем postgres):

#!/bin/bash

if [ -z "$1" ] ; then
echo "Скрипт восстановления базы 1С. Параметры: 1 имя директории бэкапа, 2 имя базы 1С" 1>&2
exit
fi

base_name="$2"
dir_name="$1"

archive_name=$dir_name/$base_name.sql.gz

dropdb $base_name
createdb $base_name
gunzip -c $archive_name | psql $base_name
6. zazabadak 02.09.16 12:11 Сейчас в теме
У нас с восстановлением базы из дампа проблем вроде не вылезает, не ругается:
dropdb -U postgres [имя базы]
createdb -U postgres [имя базы]
pg_restore -U postgres -d [имя базы] [имя файла]
AllexSoft; +1 Ответить
7. Seltick 31.05.17 22:12 Сейчас в теме
Для разграничения архивов по дням: namebase_backup_%date:~6,4%-%date:~3,2%-%date:~0,2%.backup

Если у пользователя установлен пароль: SET PGPASSWORD=123

Готовый скрипт:

SET PGPASSWORD=123

"C:\Program Files\PostgreSQL\9.4.2-1.1C\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --role "postgres" --no-password --format custom --blobs --section pre-data --section data --section post-data --encoding UTF8 --verbose --file "D:\1cBackupNew\ut11_backup_%date:~6,4%-%date:~3,2%-%date:~0,2%.backup" "ut11"
Divedition; Daseraf; frkbvfnjh; dimisa; +4 Ответить
11. frkbvfnjh 785 10.01.18 06:48 Сейчас в теме
(7) Можно ли этим способом делать бэкап базы не выгоняя пользователей из базы?
12. der_mensch 10.01.18 10:47 Сейчас в теме
(11) Можно. В документашке прямо так и заявлено:
pg_dump — это программа для создания резервных копий базы данных Postgres Pro. Она создаёт целостные копии, даже если база параллельно используется. Программа pg_dump не препятствует доступу других пользователей к базе данных (ни для чтения, ни для записи).
pr0t; alexfps79; +2 Ответить
13. frkbvfnjh 785 10.01.18 12:11 Сейчас в теме
14. xmolex 12 19.06.18 17:52 Сейчас в теме
(11)
м делать бэкап базы не выг

Нет, нельзя. Одна операция в 1с меняет данные во многих sql таблицах. Бэкап базы существеннен по времени и у вас нет гарантии, что данные за это время не изменятся. Вы сделаете несколько бэкапов и они будут рабочие, но однажды попадете на восстановление данных.
15. t.v.s. 111 19.06.18 18:18 Сейчас в теме
(14) Не вводите людей в заблуждение.
Не только можно, но и в большинстве случаев это единственный вариант. Например если база весит пару терабайт, работает 24/7/365 и каждый час простоя стоит N килобаксов.
А по поводу длительности операции - там снэпшот создается, так что итоговый бэкап получается вполне себе консистентным.
16. xmolex 12 20.06.18 09:24 Сейчас в теме
(15)
там снэпшот создается, так что итоговый бэкап полу

Не знаю как насчет терабайт, а вот с базой 300Гб (select pg_database_size('base');), которая используется 24/7/365, я сначала был такого же мнения как и вы. Бэкап делался минут 40, в течении которых пользователи плевались и матерились, т.к. предприятие тормозило еще как. Так вот в один прекрасный день, когда неудачно прошло обновление конфигурации и база отказалась запускаться, пришлось воспользоваться самым свежим бэкапом, сделанным таким путем, и каково же было мое недоумение, когда он загрузился без проблем, но при открытии в 1с счет фактур предприятие вылетало. Вы можете возразить, что мол кеши надо было чистить, но все это конечно было сделано. Сейчас система переделана. Два сервера: один мастер, другой слейв. Когда нужно сделать бэкап, слейв теряет соединение с мастером, к нему подключается сервер 1с предприятия и средствами 1с делают бэкап. После этого слейв подключается к мастеру и синхронизируется.
Снепшот может и создается (хотя не уверен, а проверять ваши слова лень), но это снепшот sql базы. А вот 1с в этот момент может что-то активно писать и поменять данные в 1 таблице sql, и тут произойдет снепшот sql, а еще в 10 таблицах не успеет поменять, хотя должна, чтобы поддерживать свою логику. Вы же знаете, что одно добавление в регистр записи, может запускать множество других регистраций и каждая из них будет запускаться как одна транзакция в sql. Поэтому данные в базе у вас обязательно испортятся. Возможно база у вас и загрузится и даже работать будет, но данные будут неполными и это аукнется позже.
17. alexbur 28 30.07.18 21:02 Сейчас в теме
(16), А есть уверенность, что в момент потери связи между серверами 1С были записаны все необходимые движения? Вы считаете что все движения, связанные с проведением документа в 1С происходят в одной 1С транзакции?
18. xmolex 12 31.07.18 16:03 Сейчас в теме
(17)
А есть уверенность, что в момент потери связи между серверами 1С были записаны все необходимые движения?

Я говорил про сервера postgresql, а не 1с. Уверенности конечно нет, но т.к. бэкап делается средствами 1с, то 1с при обнаружении испорченных данных в документе его просто не выгрузит в бэкап. В результате структура базы будет цела, правда за минусом документа.
19. alexbur 28 02.08.18 06:15 Сейчас в теме
(18)
Я говорил про сервера postgresql, а не 1с.

Ага, не понял вас сразу. То есть фактически плюсом этого решения является то, что боевая база не тормозит в момент бэкапа? Но вот в плане надёжности такого решения я испытываю сильные сомнения. В момент обрыва связи между серверами postgre вероятность потерять данные не меньше чем при снепшоте. То что потом бэкап делается средствами 1С не панацея. Сталкивался я со случаями, когда бэкап из dt не разворачивался из-за сбойных данных внутри.
33. Logarifm_Andre 13 17.07.19 17:58 Сейчас в теме
(7)
SET PGPASSWORD=123

Добрый день,
Выполнял выше указанные скрипты. Дамп отрабатывает без ошибок, но при попытки сделать восстановление в пустую созданную БД отрабатывает не корректно с ошибками, база не запускается.
8. Vovan58 65 05.06.17 00:52 Сейчас в теме
Рекомендую вот это описание : https://postgrespro.ru/docs/postgrespro/9.5/app-pgdump и https://postgrespro.ru/docs/postgrespro/9.6/app-pgrestore.html - вроде все понятно описано :) и по-русски!
9. fedor_b 03.10.17 18:07 Сейчас в теме
Спасибо помогло. Наступал на те же грабли.
10. edgi 02.11.17 13:27 Сейчас в теме
Так же создаю резервные копии как писали в коментах.
Но есть один вопрос. Иногда требуется срочно восстановить какую нибудь копию базы за определенный день. с командной строки я ее восстанавливаю в новую базу созданную посредством psql, но в 1ске то она не появиться надо вручную ее создать или с помощью 1с или через консоль администрирования 1с. А как через командную строку создать базу в 1с?
20. MulderCelica 20.10.18 07:44 Сейчас в теме
Хотелось бы рассказать про еще один "чудесный" способ передачи файла с дампом базы от облачного хостера 1С сервера. Возможно это сможет кому-то съэкономить часов 5 драгоценного времени, особенно для таких как я, которые за 15 лет работы с 1С - за ненадобностью postgre в глаза не видели, да и с линуксообразными тоже не особо.

Речь пойдет про Windows платформу, а именно server 2012.
Съезжая с хостинга клиент попросил отдать ему выгрузку базы 1С. В итоге со словами "Вот, могу отдать только SQL дамп. Но без СУБД вы все равно ничего не сможете сделать" - прилетает архив размером 700 мег формата bla_bla_bla_UT11.sql.gz
SQL дамп это прекрасно, подумал я, запуская SQL management studio...
Распаковав это хозяйство получил 1,5 гиг файл формата .sql
Попытки подпихнуть это в MS SQL успехом не увенчались.
Пришлось первый раз разбираться с postgre. Последняя на текущий момент версия была 10, но так как ей нужна была платформа не ниже 8.3.14 - была отправлена в корзину.
Поставил 9.6.7 с сайта 1С.
Ставится запуском postgresql-9.6.7-1.1C(x64).msi все параметры по умолчанию, предлагает указать некий пароль (даже не показывая к какому юзеру/уч.записи он относится), не менее 4х знаков, и после инсталляции запускает Stack Builder который предлагает поставить кучу какого-то не нужного барохла. Закрыл ничего не инсталлируя. pgAdmin 4 это адовая программа, которая открылась всего два раза. Сначала я создал там базу, выбрал в меню "восстановить из бекапа". Меня отправили прописывать какие то пути к скриптам. Что за (...) - тебе же указали пути при установке! Но нет, надо что-то там в настройках указать. кое как нашел настройки. Попутно хочется добавить, что через 5 минут вглядывания в интерфейс этого ... у меня стали болеть глаза. Я почувствовал себя пользователем Windows 3.11 , ни больше ни меньше. Заодно поменял языковую опцию на русский. Это, видимо, было ошибкой - после этого надо было рестартовать сервис, и больше pgAdmin-4 не запустился ни разу. Ну ничего, рядом в папке \bin валялась 3я версия этой чудесной программы. Она всё же согласилась работать, но архив мой открывать и грузить никак не хотела. Кнопка "Загрузить" так активной и не стала.
перерыл кучу всевозможной информации, нашел массу примеров скриптов, которые то запускают pg_restore то psql , причем принципиально понять почему одни используют одно, а другие другое - я никак не мог. Но у всех в примерах дампы были формата *.backup и с моим файлом это никак не хотело работать.
В итоге оказалось, что этот дамп - по сути текстовый набор sql инструкций, который создает таблички и постит туда данные. Некий набор запросов. Очень большой набор запросов.
В итоге строка запука восстановления стала выглядеть так:
C:\Program Files\PostgreSQL\9.6.7-1.1C\bin>psql pg_db_name < backup.sql

система спрашивает пароль, и что бы я ей не указывал - не пускает. Пароль при инсталляции, пароль от системной учетной записи админа, пустой пароль - всё равно валит ошибку
fe_sendauth: no password supplied

Что надо сделать чтобы это победить:
Надо найти файл pg_hba.conf в корневой директории установки ЭТОЙ СУБэДы, и найдя среди кучи закоментированного мусора, значимые - подправить пару строчек, указав в колонке METHOD вместо способа идентификации md5, просто trust
host all all 0.0.0.0/0 trust

Снова запускаем команду... И опять ошибка
psql: FATAL: role "vasily_pupkin" does not exist

Оказывается он пытается от имени текущей учетной записи windows что то сделать, и наличие у вас хоть прав администратора всея вселенная - его ничуть не смущают, вы всё равно идете лесом.
В итоге команда принимает следующий вид:
C:\Program Files\PostgreSQL\9.6.7-1.1C\bin>psql -U postgres pg_db_name < backup.sql
, где postgres это по сути SA.
И по экрану радостно побежали заголовки sql запросов... Заняло это минут 30.
Далее прописываем базу в консоле администрирования 1С, пользователь БД - postgres , пароль как раз тот что был при инсталляции.
Добавляем базу в список баз 1С.
И вот, к концу написания данного опуса - у меня на руках уже родимый .dt с которым уже чувствуешь себя хорошо. Работоспособность проверена.
user755340; Gendalf; scanner1980; DFinteX; leks88; eaa; addinaq; defini; goodwill; dimisa; acanta; +11 Ответить
21. PbI4 2 02.11.18 14:48 Сейчас в теме
А ни у кого не случается иногда такая ошибка при ресторе?

pg_restore: обрабатываются данные таблицы "public._usersworkhistory"
pg_restore: обрабатываются данные таблицы "public._yearoffset"
pg_restore: обрабатываются данные таблицы "public.config"
pg_restore: [внешний архиватор] не удалось прочитать входной файл: конец файла


При чём всегда после конфига и иногда рестор отрабатывает без ошибки на том же самом дампе
22. vsasav 549 05.12.18 09:58 Сейчас в теме
(21) https://infostart.ru/public/956734/ - вот здесь все подробно описал, в том числе и вашу ситуацию, когда архив выгружается с помощью --format custom. Сам наткнулся на эти грабли при выполнении команды pg_restore. Это означает, что pg_dump прерывался с ошибкой на таблице public.config, однако, файл архива был создан, и следует уже использовать мой метод.
23. MnDb 04.07.19 11:38 Сейчас в теме
Добрый день, коллеги,
Не получается сделать копию и восстановление.
Делаю все как описано здесь, но при добавлении базы в консоли администирования 1С получаю ошибку: DATABASE не пригоден для использования
24. a.doroshkevich 1407 04.07.19 12:05 Сейчас в теме
(23) Копируете и восстанавливаете на один и тот же сервер PG или разные?
25. MnDb 04.07.19 12:13 Сейчас в теме
26. a.doroshkevich 1407 04.07.19 12:18 Сейчас в теме
1. на том на который восстанавливаете попробуйте с сервера 1С просто создать пустую базу, получится?
2. насколько разные сервера? Версии? ОС?
27. MnDb 04.07.19 12:21 Сейчас в теме
(26)
1. Пустая база создается, проблем нет.
2. Идентичны.
28. a.doroshkevich 1407 04.07.19 12:22 Сейчас в теме
Платформа 1с тоже одинаковая?
29. MnDb 04.07.19 12:24 Сейчас в теме
30. a.doroshkevich 1407 04.07.19 12:30 Сейчас в теме
Ну тогда показывайте скрипты создания и восстановления
31. MnDb 04.07.19 12:36 Сейчас в теме
(30) Кажется разобрался, бэкап криво восстановился. Позже отпишусь.
32. MnDb 04.07.19 12:57 Сейчас в теме
(31)
Я не говорил что ОС у меня Ubuntu.
Выполнял копирование командой: pg_dump -C -h ipОткуда -U пользовательОткуда имяБДоткуда | psql -h ipКуда -U пользовательКуда имяБДкуда.
По итогу система мне сказала что успешно выполнила все.
Затем попытался создать базу в консоли администирования 1С и получил ошибку:DATABASE не пригоден для использования.
В итоге получилась поломанная БД без таблиц.

Проделал все тоже самое через файл, проверил наличие таблиц. Все получилось.
34. es2000 74 19.11.20 21:15 Сейчас в теме
Спасибо за 4-й пункт !!!!!!!

Только в этой статье нашёл казалось бы очевидную вещь .
35. Alex_Bavtyuk 05.02.21 11:13 Сейчас в теме
добрый день, почитал комментарии и статью и хочу сказать, что по
Ошибочный алгоритм.
восстановление тоже возможно.
У меня была тестовая БД, решил восстановить прямо в нее копию базы, все это возможно через ключ "-c"

-c
--clean
Удалить (DROP) объекты базы данных, прежде чем пересоздавать их. (Без дополнительного указания --if-exists при этом могут выдаваться безвредные сообщения об ошибках, если таких объектов не окажется в целевой базе данных.)

источник: https://postgrespro.ru/docs/postgrespro/9.6/app-pgrestore.html

т.е. -с сначала удаляет данные БД, потом туда же их архива записывает, мой скрипт для бэкапа (.bat)

@echo off
set PGPASSWORD=ваш_пароль_от_СУБД
set h=%TIME:~0,2%
set m=%TIME:~3,2%
set s=%TIME:~6,2%
set dd=%DATE:~0,2%
set mm=%DATE:~3,2%
set yyyy=%DATE:~6,4%
"C:\Program Files\PostgreSQL\11.10-2.1C\bin\pg_dump.exe" -U postgres -F c -b unf_main > "E:\backup_base\day\%yyyy%.%mm%.%dd%_%h%.%m%.%s%_unf_main_.butts"
Показать

-b - имя вашей базы

Скрипт восстановления в уже готовую базу (тестовую или рабочую)
@echo off
"C:\Program Files\PostgreSQL\11.10-2.1C\bin\pg_restore.exe" -U postgres -d "unf_test" -c "E:\backup_base\day\2021.02.04_23.30.00_unf_main_.butts"
pause

-d - имя вашей базы, куда нужно восстановить. При запуске скрипта - попросит пароль от БД.

Так же, не используя ключ -c - можно тоже восстановить базу, но тогда сначала нужно создать новую через pgadmin, далее туда восстановить базу, далее - создать базу через 1с Администрирование серверов.

Надеюсь кому-то помог :)
rintik; vshish; +2 Ответить
Оставьте свое сообщение