PostgreSQL – invalid page in block 2196 of relation base/349583/364737
Дата: 17.04.2018
Комментариев: 0
Буквально вчера один наш клиент пожаловался, что у него делаются бэкапы в базе 1С живущая на PostgreSQL. В связи с тем что мы предоставляем им только VPS и не более того, мы не ведали что у них там творится внутри собственно. А как оказалось уже достаточно давно бэкапы не пишутся ибо у них своего админа тоже нет и никто за этим не следит. Отправили нам обращение, посмотрели что у них там происходит и видим следующее при попытке снять резервную копию: ERROR: invalid page in block 2196 of relation base/349583/364737 Потратив целых 15 минут выяснилось что так просто взять и нажать кнопочку “Хорошо” уже не получится и какого то штатного решения нет от слова “Совсем”. Готовых скриптов тоже нет. В итоге решив что надо бы опубликовать найденное решение для тех кто использует PostgreSQL на Windows.
1. Запускаем pgAdmin.
2. Запускаем Query Tool и:
• Путь к базе думаю ни у кого не будет вызывать сомнения с какой базой возникла проблема, по этому опустим метод поиска имени базы зная только base/349583
• Далее что бы надо вставить текст: SELECT pg_filenode_relation(0, 364737); – в результате получаем имя таблицы. У нас это была таблица “_document143_vt2652”
• Теперь нам надо запустить её восстановление: SET zero_damaged_pages = on; VACUUM FULL _document144;
3. По окончании выполнения надо выполнить переиндексацию всей базы!
Надо учесть, что часть данных может быть утеряно из таблицы!
Кстати в своем Telegram-канале я делюсь IT-советами для руководителей бизнеса, которые помогают узнать, где теряются деньги и как проверить системных администраторов.