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 работает только с серверами той же основной версии.