Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > PostgreSQL

Ошибка при бэкапе: could not write to output file: Invalid argument : PostgreSQL

24.04.2024 10:41


25.11.2022 16:20
мотоИгорь
 
Спокойно жили и долго бэкап делался, а недавно вдруг перестал
создаю вот таким батником:

CLS
ECHO OFF
CHCP 866

REM УКАЗАНИЕ ПЕРЕМЕННЫХ СРЕДЫ POSTGRESQL
SET PGBIN=C:\Program Files\PostgreSQL\11.9-1.1C\bin
SET PGDATABASE=rios_arautomation2_2020
SET PGHOST=10.15.1.10
SET PGPORT=5432
SET PGUSER=postgres
SET PGPASSWORD=пароль

REM ПЕРЕХОД В КАТАЛОГ С bat-ФАЙЛОМ (ОТКУДА ЗАПУЩЕН ФАЙЛ)
%~d0
CD %~dp0

REM ФОРМИРОВАНИЕ ИМЕНИ ФАЙЛА ДЛЯ РЕЗЕРВНОЙ КОПИИ И LOG ФАЙЛА ОТЧЕТА
SET DAT=%date:~0,2%%date:~3,2%%date:~6,4%
SET DUMPFILE=E:\backups\PG\%DAT%-rios_arautomation2_2020.backup
SET LOGFILE=E:\backups\PG\%DAT%-rios_arautomation2_2020.log
SET DUMPPATH="%DUMPFILE%"
SET LOGPATH="%LOGFILE%"

REM ВЫПОЛНЕНИЕ КОМАНДЫ (ПРОГРАММЫ) ДЛЯ СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ БАЗЫ
::CALL "%PGBIN%\pg_dump.exe" --format=custom -U postgres --verbose --file=%DUMPPATH% 2>%LOGPATH%
CALL "%PGBIN%\pg_dump.exe" --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --section pre-data --section data --section post-data --encoding UTF8 --verbose --file %DUMPPATH% 2>%LOGPATH%
REM ВЫПОЛНЕНИЕ КОМАНДЫ (ПРОГРАММЫ) ЗАВЕРШЕНО, ЕСЛИ ОШИБОК НЕТ ТО КОНЕЦ
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM ПРИ ВОЗНИКНОВЕНИИ ОШИБОК УДАЛЯЕТСЯ ПОВРЕЖДЕННЫЙ ФАЙЛ КОПИИ И СООТВЕТСТВУЮЩАЯ ЗАПИСЬ В ЖУРНАЛЕ О ЕЕ СОЗДАНИИ
:Error
DEL %DUMPPATH%
MSG * "Ошибка при создании резервной копии базы данных. Смотрите backup_rios_arautomation2_2020.log."
ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> rios_arautomation2_2020.log
GOTO End

REM ЕСЛИ КОПИЯ СДЕЛАНА БЕЗ ОШИБОК ДЕЛАЕТСЯ ЗАПИСЬ В ЖУРНАЛЕ РЕГИСТРАЦИИ
:Successfull
ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup_rios_arautomation2_2020.log
GOTO End
:End

Все было хорошо, а теперь не создает, а в логе выдает такое:
pg_dump: dumping contents of table "public._inforg36608"
pg_dump: [custom archiver] could not write to output file: Invalid argument

места хватает, ничего по правам не менялось
хэлп, мудрецы, куда смотреть, как делать бэкап???очень срочно, пожалуйста помогите

также хотел добавить, что я пробовал альтернативно делать бэкап:

@ECHO OFF
CALL "C:\Program Files\PostgreSQL\11.9-1.1C\bin\pg_dump.exe" -h 10.15.1.10 -p 5432 -U "postgres" --role "postgres" --format custom --blobs --section pre-data --section data --section post-data --encoding UTF8 -v -d rios_arautomation2_2020 > "e:\backups\PG\%date%_rios_arautomation2_2020.backup"

Вот этот делает всегда, но я так понимаю он неполноценный делает так как размер бэкапа прыгает по 4-5 гб меньше, куча ерроров дает при восстановлении, когда первый вариант стабильно выдает одинаковый размер+небольшое добавление.
25.11.2022 16:42
OlegON
 
сдается мне, что где-то кто-то с региональными настройками попутал...
после SET LOGPATH="%LOGFILE%"
допиши
Код:
set | find "LOG" >bobo.log
set | find "DAT" >>bobo.log
set | find "DUMP" >>bobo.log
exit
и покажи, что там у тебя получилось с твоими переменными в bobo.log
только запускай так же, как запускаешь, если по расписанию - поправь расписание... путь к bobo.log тогда лучше указать полный
25.11.2022 17:18
vdm
 
Поставлю на что-то из:
- временный файл пишет в какой-нибудь TEMP и там места не хватает
- баг виндового pg_dump. Во времена версий 9.x в некоторых ситуациях он был кошмарен, в сравнении с линуксовым. Может и в 11.x что-то еще недоработано.
25.11.2022 17:57
мотоИгорь
 
Цитата:
OlegON сдается мне, что где-то кто-то с региональными настройками попутал...
после SET LOGPATH="%LOGFILE%"
допиши
Код:
set | find "LOG" >bobo.log
set | find "DAT" >>bobo.log
set | find "DUMP" >>bobo.log
exit
и покажи, что там у тебя получилось с твоими переменными в bobo.log
только запускай так же, как запускаешь, если по расписанию - поправь расписание... путь к bobo.log тогда лучше указать полный
добавил запустил, вот что в бобо
LOGFILE=E:\backups\PG\25112022-rios_arautomation2_2020.log
LOGONSERVER=\\DC1
LOGPATH="E:\backups\PG\25112022-rios_arautomation2_2020.log"
APPDATA=C:\Users\it\AppData\Roaming
DAT=25112022
LOCALAPPDATA=C:\Users\it\AppData\Local
PGDATA=C:\Program Files\PostgreSQL 1C\9.6\data
PGDATABASE=rios_arautomation2_2020
DUMPFILE=E:\backups\PG\25112022-rios_arautomation2_2020.backup
DUMPPATH="E:\backups\PG\25112022-rios_arautomation2_2020.backup"
25.11.2022 18:05
мотоИгорь
 
Цитата:
vdm Поставлю на что-то из:
- временный файл пишет в какой-нибудь TEMP и там места не хватает
- баг виндового pg_dump. Во времена версий 9.x в некоторых ситуациях он был кошмарен, в сравнении с линуксовым. Может и в 11.x что-то еще недоработано.
возможно с времянками проблема, но какие именно? виндовские пустые, места везде хватает. я думал мож права где-то изменились, но ничего не менял
дамп вообще отличный, год проработал без нареканий, а тут вдруг началось такое
25.11.2022 18:33
OlegON
 
для начала перед ::CALL напиши REM
а второй CALL убери, не нужен он
тест
Попробуй сделать какую-нибудь с коротким именем C:\TEMP, дать права всем на нее и переменные %TEMP% в нее настроить.
тест
Отключи UAC, вплоть до реестра https://olegon.ru/showthread.php?t=34752
тест
Попробуй исключить все же влияние переменных
то есть, перед exit пиши
Код:
"C:\Program Files\PostgreSQL\11.9-1.1C\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --section pre-data --section data --section post-data --encoding UTF8 --verbose --file "E:\backups\PG\25112022-rios_arautomation2_2020.backup" 2>"E:\backups\PG\25112022-rios_arautomation2_2020.log"
тест
и вспоминай, что же все же было в период с момента, когда еще работало и до момента, как перестало работать...
30.11.2022 15:00
мотоИгорь
 
Цитата:
OlegON для начала перед ::CALL напиши REM
а второй CALL убери, не нужен он
тест
Попробуй сделать какую-нибудь с коротким именем C:\TEMP, дать права всем на нее и переменные %TEMP% в нее настроить.
тест
Отключи UAC, вплоть до реестра https://olegon.ru/showthread.php?t=34752
тест
Попробуй исключить все же влияние переменных
то есть, перед exit пиши
Код:
"C:\Program Files\PostgreSQL\11.9-1.1C\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --section pre-data --section data --section post-data --encoding UTF8 --verbose --file "E:\backups\PG\25112022-rios_arautomation2_2020.backup" 2>"E:\backups\PG\25112022-rios_arautomation2_2020.log"
тест
и вспоминай, что же все же было в период с момента, когда еще работало и до момента, как перестало работать...
спасибо за идеи, но не помогло
вроде разобрался. нашел логи с ругательствам "ошибка отложенной записи" и надо было...очистить корзину) оказывается корзина не на системном диске, также включил файл подкачки на диске куда бэкап делается
но после перезагрузки сервера уже 3 бэкап норм создался и восстановился, мониторю дальше
07.12.2022 09:02
мотоИгорь
 
через неделю опять не сделался бэкап и появилась ошибка в логе:
pg_dump: dumping contents of table "public.config"
pg_dump: [custom archiver] could not write to output file: Invalid argument

пока не нашел в чем проблема
07.12.2022 10:03
OlegON
 
видимо, все же где-то диск кончается...
перенесите все это на Linux, сдается мне, что вопросов и сбоев будет сильно меньше...
07.12.2022 10:45
мотоИгорь
 
Цитата:
OlegON видимо, все же где-то диск кончается...
перенесите все это на Linux, сдается мне, что вопросов и сбоев будет сильно меньше...
ну вы даете)
может тогда диск просто поменять?
я попробую засечь использование памяти подкачки, ща стоит 800-8000, может мало и надо с размером базы?!
Часовой пояс GMT +3, время: 10:41.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.