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