Сегодня после отключения света, отказался запускаться PosygreSQL сервер, Сразу скажу что машина где это произошло тестовая, поэтому ни чего сложного не случилось. Однако симптомы были такие:
При попытке запустить службу "Postgres"выдавалось сообщение что служба остановлена. В журнале событий было написано "Служба "PostgreSQL Database Server 9.1.9-1.1C" перешла в состояние Остановлена." - что собственно ни о чем не говорит.
А вот в логах самого сервера выдало следующее сообщение:
При попытке запустить службу "Postgres"выдавалось сообщение что служба остановлена. В журнале событий было написано "Служба "PostgreSQL Database Server 9.1.9-1.1C" перешла в состояние Остановлена." - что собственно ни о чем не говорит.
А вот в логах самого сервера выдало следующее сообщение:
2016-01-12 14:50:04 MSK LOG: database system was interrupted while in recovery at 2016-01-12 13:23:40 MSK2016-01-12 14:50:04 MSK HINT: This probably means that some data is corrupted and you will have to use the last backup for recovery.2016-01-12 14:50:04 MSK FATAL: the database system is starting up2016-01-12 14:50:05 MSK LOG: database system was not properly shut down; automatic recovery in progress2016-01-12 14:50:05 MSK LOG: redo starts at 26/63EE72082016-01-12 14:50:06 MSK FATAL: the database system is starting up2016-01-12 14:50:06 MSK LOG: record with zero length at 26/641837282016-01-12 14:50:06 MSK LOG: redo done at 26/641836E82016-01-12 14:50:06 MSK LOG: last completed transaction was at log time 2016-01-12 12:58:29.099+042016-01-12 14:50:06 MSK WARNING: page 22 of relation base/16400/30220 did not exist2016-01-12 14:50:06 MSK PANIC: WAL contains references to invalid pagesThis application has requested the Runtime to terminate it in an unusual way.Please contact the application's support team for more information.2016-01-12 14:50:06 MSK LOG: startup process (PID 3080) exited with exit code 32016-01-12 14:50:06 MSK LOG: aborting startup due to startup process failure
Теперь на всякий случай делаем физическую копию базы. После этого запускаем командную строку "cmd" от имени администратора:Стало понятно что сервер не может запуститься т.к. какие-то данные были порушены. и из за этого Postgres не может завершить начатые транзакции.
pg_controldata "c:\Program Files (x86)\PostgreSQL\9.1.9-1.1C\data"
далее в выводе ищем строки
Latest checkpoint's NextXID: 0/863432 Latest checkpoint's NextOID: 7939103Эта информация нам понадобиться что бы удалить лог транзакций:
pg_resetxlog.exe -o 7939103 -x 863432 -f "c:\Program Files (x86)\PostgreSQL\9.1.9-1.1C\data"
Будет выдано сообщение:
Transaction log reset
После данных действий желательно выполнить "тестирование и исправление" с режимом логической целостности системы.
Комментариев нет:
Отправить комментарий