qhb_resetwal

qhb_resetwal — сбросить журнал упреждающей записи и другую управляющую информацию кластера баз данных QHB


Синтаксис

qhb_resetwal [ -f | --force ] [ -n | --dry-run ] [параметр...] [ -D | --pgdata ] каталог_данных

Описание

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

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

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

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


Параметры

-f
--force
Принудительно выполнить qhb_resetwal даже если она не может определить подходящие данные из pg_control, как рассказывается выше.

-n
--dry-run
Параметр -n/--dry-run предписывает qhb_resetwal вывести значения, восстановленные из pg_control, а также значения, которые должны быть изменены, а затем завершиться, ничего не изменяя. Это в основном инструмент отладки, но может быть полезен для проверки корректности параметров, прежде чем позволить qhb_resetwal действительно что-то сделать.

-V
--version
Отобразить информацию о версии и завершиться.

-?
--help
Показать справку и завершиться.

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

-c xid,xid
--commit-timestamp-ids=xid,xid
Вручную установить идентификаторы старейших и новейших транзакций, для которых можно получить время фиксации.
Безопасное значение для идентификатора старейшей транзакции, для которой можно получить время фиксации, можно определить, найдя наименьшее в числовом виде имя файла в подкаталоге pg_commit_ts каталога данных. И наоборот, безопасное значение для идентификатора новейшей транзакции, для которой можно получить время фиксации (вторая часть), можно определить, найдя наибольшее в числовом виде имя файла. Числа в именах файлов представлены в шестнадцатеричном формате.

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

-l файл_wal
--next-wal-file=файл_wal
Вручную установить начальную позицию WAL, указав имя файла следующего сегмента WAL.
Имя файла следующего сегмента WAL должно быть больше всех остальных имен файлов сегментов WAL, которые в настоящее время находятся в подкаталоге pg_wal каталога данных. Эти имена также представлены в шестнадцатеричном виде и состоят из трех частей. Первая часть является «идентификатором временной шкалы» и обычно должна оставаться неизменной. Например, если 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
Вручную установить идентификаторы следующей и самой старой мультитранзакции.
Безопасное значение для следующего идентификатора мультитранзакции (первая часть) можно определить, найдя самое большое в числовом виде имя файла в подкаталоге pg_multixact/offsets в каталоге данных, прибавив к нему единицу, а затем умножив на 65536 (0x10000). И наоборот, безопасное значение идентификатора самой старой мультитранзакции (вторая часть -m) можно определить, найдя наименьшее в числовом виде имя файла в том же каталоге и умножив его на 65536. Имена файлов представлены в шестнадцатеричном формате, поэтому самый простой способ умножить — это добавить к имени файла четыре нуля.

-o oid
--next-oid=oid
Вручную установить следующий OID.
Не существует сравнительно простого способа определить следующее за наибольшим из существующих в базе данных значений OID, но, к счастью, указание правильного значения некритично.

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

--wal-segsize=размер_сегмента_wal
Установить новый размер сегмента WAL, в мегабайтах. Значение должно быть степенью 2 от 1 до 1024 (мегабайт). Дополнительную информацию см. в описании того же параметра в qhb_bootstrap.

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

-u xid
--oldest-transaction-id=xid
Вручную установить идентификатор старейшей незамороженной транзакции.
Безопасное значение можно определить, найдя наибольшее в числовом виде имя файла в подкаталоге pg_xact каталога данных и умножив его на 1048576 (0x100000). Обратите внимание, что имена файлов представлены в шестнадцатеричном формате. Обычно проще всего указать значение этого параметра также в шестнадцатеричном формате. Например, если наибольшим значением в pg_xact является 0007, то подойдет запись -u 0x700000 (пять нулей в конце обеспечивают правильный множитель).

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


Переменные среды

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


Примечания

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

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


См. также

qhb_controldata