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 могут быть указаны шестнадцатеричные значения.
-
-cxid, xid
--commit-timestamp-ids=xid, xidВручную установить самые старые и новейшие ID транзакций, для которых можно получить время фиксации.
Безопасное значение для самого старого ID транзакции, для которого можно получить время фиксации, можно определить найдя наименьшее в числовом виде имя файла в подкаталоге
pg_commit_tsкаталога данных. И наоборот, безопасное значение для новейшего ID транзакции, для которого можно получить время фиксации (вторая часть), можно определить найдя наибольшое в числовом виде имя файла. Числа в именах файлов представлены в шестнадцатеричном формате. -
-exid_epoch
--epoch=xid_epoch
Вручную установить эпоху идентификатора следующей транзакции.Эпоха идентификатора транзакции фактически не сохраняется нигде в базе данных, кроме поля, устанавленного параметром
qhb_resetwal, поэтому любое значение будет допустимым в отношении самой базы данных. Возможно, вам придется настроить это значение, чтобы обеспечить правильную работу систем репликации, таких как Slony-I и Skytools, - для такого случая соответствующее значение должно быть получено из состояния нижележащей реплицированной базы данных. -
-lwalfile
--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полностью утеряно. -
-mmxid, mxid
--multixact-ids=mxid, mxidВручную установить ID следующей и самой старой мультитранзакции.
Безопасное значение для следующего идентификатора мультитранзакции может быть определено путем поиска самого большого в числовом виде имени файла в подкаталоге
pg_multixact/offsetsв каталоге данных. К найденному числу надо прибавить один и умножить на 65536 (0x10000). И наоборот, безопасное значение идентификатора самой старой мультитранзакции (вторая часть-m) можно определить, найдя наименьшее в числовом виде имя файла в том же каталоге и его умножив на 65536. Имена файлов представлены в шестнадцатеричном формате, поэтому самый простой способ умножить это добавить четыре нуля к имени файлу. -
-ooid
--next-oid=oidВручную установить следующий OID.
Не существует сравнительно простого способа определить следующий за наибольшим из существующих значений OID, но, к счастью, это не критично.
-
-Omxoff
--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 вызывает проблемы для вашей стратегией архивирования. -
-xxid
--next-transaction-id=xidВручную установить идентификатор следующей транзакции.
Безопасное значение можно определить, найдя наибольшее в числовом виде имя файла в подкаталоге
pg_xactкаталога данных, прибавив один и умножив на 1048576 (0x100000). Обратите внимание, что имена файлов представлены в шестнадцатеричном формате. Обычно проще всего указать значение параметра в шестнадцатеричном формате. Например, если0011наибольшее значение вpg_xact, то подходящим значение будет-x 0x1200000(пять последних нулей обеспечивают правильный множитель).
Окружение
PG_COLOR
- Указывает, использовать ли цвета в диагностических сообщениях. Возможные значения always, auto, never.
Примечания
Эту команду нельзя использовать во время работы сервера. qhb_resetwal
не станет запускаться, при обнаруженном блокирующем файле в каталоге хранения данных. Если произошел сбой сервера, блокирующий файл может остаться в системе; в этом случае вы можете вручную удалить его, чтобы
запустить qhb_resetwal. Но прежде чем сделать это, дважды удостоверьтесь, что серверный процесс не запущен.
qhb_resetwal работает только с серверами той же основной версии.