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