qhb_resetwal

qhb_resetwal - очищает журнал предзаписи (WAL) и другую управляющую информацию кластера базы данных QHB

Синтаксис

qhb_resetwal [ --force | -f ] [ --dry-run | -n ] [option...] [ --pgdata | -D ] datadir

Описание

qhb_resetwal очищает журнал предзаписи (WAL) и, при необходимости, сбрасывает некоторую другую управляющую информацию, хранящуюся в файле pg_control. Эта функция бывает необходима, когда эти файлы повреждены. Её следует использовать как крайнюю меру, когда сервер не может запуститься из-за таких повреждений.

После выполнения этой команды станет возможным запустить сервер, но имейте в виду, что база данных может содержать несогласованные данные из-за частично зафиксированных транзакций. Вы должны немедленно выгрузить ваши данные, запустить initdb и восстановить данные. После этого проверьте согласованность базы данных и при необходимости внесите коррективы.

Эта утилита может быть запущена только тем пользователем, который установил сервер, поскольку ей требуется доступ на чтение/запись к каталогу данных. По соображениям безопасности вы должны указать каталог данных в командной строке. qhb_resetwal не использует переменную окружения PGDATA.

Если qhb_resetwal выводит сообщение о том, что он не может определить действительные данные из pg_control, вы можете принудительно запустить его, указав параметр -f (--force). В этом случае, отсутствующие данные будут заменены наиболее вероятными значениями. Для большинства полей это нормально, но может потребоваться ручное вмешательство для: следующего значения OID, следующего ID транзакции и времени, следующего ID мультитранзакции и смещения и начальной позиции WAL. Эти поля могут быть указаны с помощью параметров, описанных ниже. Если вы не можете определить правильные значения для всех этих полей, можно использовать -f, однако, к восстановленной базе данных следует относиться с еще большим подозрением, чем обычно: нужно будет немедленно выгрузить и затем востанновить данные. Не выполняйте никакие операции по изменению данных до того, как вы создадите дамп, так как любое такое действие может усугубить повреждение.

Параметры

  • -f
    --force

    Принудительное выполнение qhb_resetwal даже если он не может получить приемлимые данные из pg_control, как объяснено выше.

  • -n
    --dry-run

    Вывести значения, восстановленные из pg_control и значения, которые должны быть изменены, и выйим ничего не изменяя. В основном используется как инструмент отладки, но он также может быть полезен для проверки корректности параметров, прежде чем позволить qhb_resetwal начать работу по-настоящему.

  • -V
    --version

    Показать версию и выйти.

  • -?
    --help

    Показать справку и выйти.

Следующие параметры нужны только тогда, когда qhb_resetwal не может определить подходящие значения, читая pg_control. Безопасные значения могут быть определены, как описано ниже. Для значений, которые принимают числовые аргументы, с помощью префикса 0x могут быть указаны шестнадцатеричные значения.

  • -c xid, xid
    --commit-timestamp-ids=xid, xid

    Вручную установить самые старые и новейшие ID транзакций, для которых можно получить время фиксации.

    Безопасное значение для самого старого ID транзакции, для которого можно получить время фиксации, можно определить найдя наименьшее в числовом виде имя файла в подкаталоге pg_commit_ts каталога данных. И наоборот, безопасное значение для новейшего ID транзакции, для которого можно получить время фиксации (вторая часть), можно определить найдя наибольшое в числовом виде имя файла. Числа в именах файлов представлены в шестнадцатеричном формате.

  • -e xid_epoch
    --epoch=xid_epoch
    Вручную установить эпоху идентификатора следующей транзакции.

    Эпоха идентификатора транзакции фактически не сохраняется нигде в базе данных, кроме поля, устанавленного параметром qhb_resetwal, поэтому любое значение будет допустимым в отношении самой базы данных. Возможно, вам придется настроить это значение, чтобы обеспечить правильную работу систем репликации, таких как Slony-I и Skytools, - для такого случая соответствующее значение должно быть получено из состояния нижележащей реплицированной базы данных.

  • -l walfile
    --next-wal-file=walfile

    Вручную установить начальную позицию WAL, указав имя файла следующего сегмента WAL.

    Имя файла следующего сегмента WAL должно быть больше, любых других имен файлов сегментов WAL, которые в настоящее время находятся в подкаталоге pg_wal каталога данных. Эти имена также в представлены шестнадцатеричном виде и состоят из трех частей. Первая часть является «ID линии времени» и обычно должна оставаться неизменной. Например, если 00000001000000320000004A является самой большой записью в pg_wal, используйте -l 00000001000000320000004B или большее число.

    Обратите внимание, что при использовании нестандартных размеров сегментов WAL числа в именах файлов WAL отличаются от номеров LSN, выдаваемых системными функциями и представлениями. Этот параметр принимает имя файла WAL, а не LSN.

    Заметка
    Сам qhb_resetwal просматривает файлы в pg_wal и по умолчанию выбирает для параметра -l значение идущее следующим после найденного. Поэтому задвать параметр -l вручную необходимо только в том случае, если вам известно о существовании сегментов WAL, которые в данный момент отсутствуют в pg_wal, например если лежат в отдельном архиве, либо если содержимое pg_wal полностью утеряно.

  • -m mxid, mxid
    --multixact-ids=mxid, mxid

    Вручную установить ID следующей и самой старой мультитранзакции.

    Безопасное значение для следующего идентификатора мультитранзакции может быть определено путем поиска самого большого в числовом виде имени файла в подкаталоге pg_multixact/offsets в каталоге данных. К найденному числу надо прибавить один и умножить на 65536 (0x10000). И наоборот, безопасное значение идентификатора самой старой мультитранзакции (вторая часть -m) можно определить, найдя наименьшее в числовом виде имя файла в том же каталоге и его умножив на 65536. Имена файлов представлены в шестнадцатеричном формате, поэтому самый простой способ умножить это добавить четыре нуля к имени файлу.

  • -o oid
    --next-oid=oid

    Вручную установить следующий OID.

    Не существует сравнительно простого способа определить следующий за наибольшим из существующих значений OID, но, к счастью, это не критично.

  • -O mxoff
    --multixact-offset=mxoff

    Вручную установить смещение следующей мультитранзакции.

    Безопасное значение может быть определено, найдя наибольшее в числовом виде имя файла в подкаталоге pg_multixact/members каталога данных, прибавив один и умножив на 52352 (0xCC80). Имена файлов представлены в шестнадцатеричном формате. Простого рецепта, как для других параметров с добавленией нулей, здесь нет.

  • --wal-segsize=wal_segment_size

    Установить новый размер сегмента WAL в мегабайтах. Значение должно быть степенью 2 от 1 до 1024 (мегабайт). Смотрите тот же параметр в initdb для получения дополнительной информации.

    Заметка
    В то время как qhb_resetwal устанавливает начальный адрес WAL, превышающий номер последнего существующего файла сегмента WAL, при некоторых изменениях размера предыдущие имена файлов WAL могут использоваться повторно. Вместе с этим параметром, рекомендуется использовать -l, чтобы вручную установить начальный адрес WAL, если наложение имен файлов WAL вызывает проблемы для вашей стратегией архивирования.

  • -x xid
    --next-transaction-id=xid

    Вручную установить идентификатор следующей транзакции.

    Безопасное значение можно определить, найдя наибольшее в числовом виде имя файла в подкаталоге pg_xact каталога данных, прибавив один и умножив на 1048576 (0x100000). Обратите внимание, что имена файлов представлены в шестнадцатеричном формате. Обычно проще всего указать значение параметра в шестнадцатеричном формате. Например, если 0011 наибольшее значение в pg_xact, то подходящим значение будет -x 0x1200000 (пять последних нулей обеспечивают правильный множитель).

Окружение

PG_COLOR

  • Указывает, использовать ли цвета в диагностических сообщениях. Возможные значения always, auto, never.

Примечания

Эту команду нельзя использовать во время работы сервера. qhb_resetwal не станет запускаться, при обнаруженном блокирующем файле в каталоге хранения данных. Если произошел сбой сервера, блокирующий файл может остаться в системе; в этом случае вы можете вручную удалить его, чтобы запустить qhb_resetwal. Но прежде чем сделать это, дважды удостоверьтесь, что серверный процесс не запущен.

qhb_resetwal работает только с серверами той же основной версии.

Смотрите также

qhb_controldata