Мой сервер Ubuntu 14.04 LTS, на котором запущен postgresql 8.4.11, разбился, и после перезагрузки сервер приложений, выполняющий запрос к postgresql, сообщил о следующей ошибке
ERROR: invalid page header in block 40 of relation base/18038/22194
Я googledd, попытался создать дамп и использовал полученное сообщение об ошибке, чтобы идентифицировать сломанную таблицу. Затем я казнил
SET zero_damaged_pages = on;
VACUUM FULL damaged_table;
-- vacuum didn't report any errors here
REINDEX TABLE damaged_table;
другие упомянули reindexdb
, поэтому я побежал
$ reindexdb -s mydb
тоже, но проблема осталась прежней.
Наконец - у меня есть рабочая резервная копия из базы данных - я удалил и воссоздал всю базу данных
DROP DATABASE mydb;
CREATE DATABASE mydb;
и восстановил резервную копию:
cat mydump| sudo -u postgres pgsql mydb
Но даже сейчас проблема остается прежней. Я мало что знаю о postgresql, но как такая ошибка может пережить воссоздание базы данных? К сожалению, мне нужно снова заставить базу данных работать на том же компьютере.
Есть ли что-нибудь еще, что я могу попытаться восстановить базу данных?
Если у вас есть раб, установите hot_standby_feedback
к 'on'
на нем, если еще не. Сделайте pg_dump и запишите его в / dev / null, чтобы не занимать места.
nohup pg_dump db_name -v -Fc -f /dev/null &
Если дамп удастся, значит с вашим рабом все в порядке. Выполните аварийное переключение. Потери данных не будет.
Другой способ проверить ваше ведомое устройство - это сделать:
explain select count(*) from table_name;
Если это удалось и если он использует сканирование последовательности, то ваш ведомый в порядке. Возможно, вам не придется рассматривать этот вариант, если он использует сканирование индекса.
Примечание: это работает только в том случае, если ваш мастер подвержен повреждению уровня хранения.
Только сегодня я столкнулся с той же проблемой, и я смог ее исправить.
Похоже, у вас есть какие-то повреждения в вашей файловой системе или на диске.
Рекомендую посмотреть здесь: повреждение postgresql
После этого я заглянул в dmesg
или /var/log/messages
для любых аппаратных ошибок, которые вы можете увидеть.
Если у вас есть рабочий дамп, я бы скопировал текущий каталог данных из /var/lib/postgresql/8.4/main
, бегать pg_createcluster 8.4 main
в новом каталоге и попробуйте восстановить его и посмотрите, поможет ли это решить какие-либо проблемы.
Если после этого у вас все еще есть проблемы, продолжайте #postgresql
на Freenode IRC или pgsql-general@postgresql.org
был бы моим следующим шагом, если бы мне нужно было запустить его как можно быстрее.
Надеюсь, это поможет. Удачи. знак равно