pg_resetwal#
pg_resetwal
pg_resetwal — сбросить журнал предварительной записи и другую управляющую информацию кластера базы данных Tantor BE
Синтаксис
pg_resetwal
[ -f
| --force
] [ -n
| --dry-run
] [option
...] [ -D
| --pgdata
]datadir
Описание
pg_resetwal
очищает журнал предварительной записи (WAL) и
при необходимости сбрасывает некоторую другую управляющую информацию, хранящуюся в файле
pg_control
. Иногда эта функция требуется,
если эти файлы были повреждены. Она должна использоваться только как
крайний случай, когда сервер не запускается из-за такой коррупции.
После выполнения этой команды должно быть возможно запустить сервер, но имейте в виду, что база данных может содержать несогласованные данные из-за частично завершенных транзакций. Вы должны немедленно создать резервную копию данных, запустить команду initdb
и восстановить данные. После восстановления проверьте наличие несоответствий и внесите необходимые исправления.
Эта утилита можно запустить только пользователем, который установил сервер, потому что
она требует чтения/записи доступа к каталогу данных.
По соображениям безопасности вы должны указать каталог данных в командной строке.
pg_resetwal
не использует переменную среды
PGDATA
.
Если pg_resetwal
сообщает, что не может определить
допустимые данные для pg_control
, вы можете заставить его все равно продолжить,
указав опцию -f
(force). В этом случае для отсутствующих данных будут подставлены
вероятные значения. Ожидается, что большая часть полей будет совпадать,
но для следующих полей может потребоваться ручная помощь: следующий OID,
следующий идентификатор транзакции и эпоха, следующий идентификатор множественной транзакции и смещение,
а также поля начального местоположения WAL. Эти поля можно установить с помощью опций,
описанных ниже. Если вы не можете определить правильные значения для всех
этих полей, все равно можно использовать опцию -f
, но
восстановленную базу данных необходимо рассматривать с еще большим подозрением, чем
обычно: немедленное создание резервной копии и восстановление обязательны. Не
выполняйте никаких операций модификации данных в базе данных перед созданием резервной копии,
так как любое такое действие может ухудшить повреждение.
Опции
-f
--force
Принудительно
pg_resetwal
продолжить, даже если он не может определить действительные данные дляpg_control
, как объяснено выше.-n
--dry-run
Опция
-n
/--dry-run
указывает командеpg_resetwal
выводить значения, восстановленные из файлаpg_control
и значения, которые будут изменены, а затем завершить работу без внесения изменений. Это в основном инструмент отладки, но может быть полезным для проверки перед разрешениемpg_resetwal
продолжить работу на самом деле.-V
--version
Отобразить информацию о версии, а затем завершить работу.
-?
--help
Показать справку, а затем выйти.
Следующие параметры необходимы только в том случае, если pg_resetwal
не может определить соответствующие значения, считывая pg_control
. Безопасные значения могут быть определены следующим образом. Для значений, принимающих числовые аргументы, можно указать шестнадцатеричные значения, используя префикс 0x
.
-c
xid
,xid
--commit-timestamp-ids=
xid
,xid
Установите вручную самые старые и самые новые идентификаторы транзакций, для которых можно получить время коммита.
Значение для самого старого идентификатора транзакции, для которого можно получить время коммита (первая часть), можно определить, поискав наименьшее числовое имя файла в каталоге
pg_commit_ts
внутри каталога данных. Соответственно, значение для самого нового идентификатора транзакции, для которого можно получить время коммита (вторая часть), можно определить, поискав наибольшее числовое имя файла в том же каталоге. Имена файлов представлены в шестнадцатеричном формате.-e
xid_epoch
--epoch=
xid_epoch
Установите эпоху следующего идентификатора транзакции вручную.
Эпоха идентификатора транзакции фактически не хранится нигде в базе данных, кроме поля, которое устанавливается с помощью
pg_resetwal
, поэтому любое значение будет работать, что касается самой базы данных. Вам может потребоваться настроить это значение, чтобы обеспечить правильную работу систем репликации, таких как Slony-I и Skytools - в этом случае соответствующее значение можно получить из состояния реплицированной базы данных нижестоящего уровня.-l
walfile
--next-wal-file=
walfile
Установите начальное положение WAL вручную, указав имя следующего файла сегмента WAL.
Вам следует выбрать имя следующего файла WAL-сегмента, которое будет больше, чем любое существующее имя файла WAL-сегмента в каталоге
pg_wal
внутри каталога данных. Эти имена также записываются в шестнадцатеричном формате и состоят из трех частей. Первая часть - это “идентификатор временной шкалы” и обычно должна оставаться неизменной. Например, если00000001000000320000004A
является наибольшим значением вpg_wal
, используйте-l 00000001000000320000004B
или более высокое значение.Обратите внимание, что при использовании нестандартного размера сегментов WAL номера в именах файлов журнала предзаписи отличаются от LSN, которые сообщаются системными функциями и системными представлениями. Этот параметр принимает имя файла журнала предзаписи, а не LSN.
Примечание
Сама команда
pg_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, который находится за пределами самого большого в базе данных, но к счастью это не критично для правильной настройки следующего OID.
-O
mxoff
--multixact-offset=
mxoff
Установите следующий смещение для многотранзакционности вручную.
Безопасное значение можно определить, посмотрев на численно наибольшее имя файла в каталоге
pg_multixact/members
внутри каталога данных, добавив единицу, а затем умножив на 52352 (0xCC80). Имена файлов представлены в шестнадцатеричном формате. Нет простого рецепта, такого как для других параметров добавления нулей.--wal-segsize=
wal_segment_size
Установите новый размер сегмента WAL в мегабайтах. Значение должно быть установлено как степень двойки от 1 до 1024 (мегабайт). Дополнительную информацию смотрите в той же опции initdb.
Примечание
В то время как команда
pg_resetwal
установит начальный адрес WAL за пределами последнего существующего файла сегмента WAL, некоторые изменения размера сегмента могут привести к повторному использованию предыдущих имен файлов журнала предзаписи. Рекомендуется использовать-l
вместе с этой опцией для ручной установки начального адреса WAL, если перекрытие имен файлов журнала предзаписи может вызвать проблемы с вашей стратегией архивирования.-u
xid
--oldest-transaction-id=
xid
Установите вручную самый старый не замороженный идентификатор транзакции.
Безопасное значение можно определить, посмотрев на численно наименьшее имя файла в каталоге
pg_xact
внутри каталога данных, а затем умножив на 1048576 (0x100000). Обратите внимание, что имена файлов записаны в шестнадцатеричном формате. Обычно самым простым способом является указание значения опции также в шестнадцатеричном формате. Например, если0007
является наименьшим значением вpg_xact
, то-u 0x700000
будет работать (пять нулей в конце обеспечивают правильный множитель).-x
xid
--next-transaction-id=
xid
Установите следующий идентификатор транзакции вручную.
Значение безопасного значения можно определить, посмотрев на наибольшее числовое значение имени файла в каталоге
pg_xact
внутри каталога данных, добавив единицу и затем умножив на 1048576 (0x100000). Обратите внимание, что имена файлов представлены в шестнадцатеричном формате. Обычно самым простым способом является указание значения параметра в шестнадцатеричном формате. Например, если0011
является наибольшим значением вpg_xact
, то-x 0x1200000
будет работать (пять нулей в конце обеспечивают правильный множитель).
Окружение
PG_COLOR
Определяет, следует ли использовать цвет в диагностических сообщениях. Возможные значения:
always
,auto
иnever
.
Примечания
Необходимо избегать использования этой команды при работающем сервере. pg_resetwal
откажется запускаться, если обнаружит файл блокировки сервера в каталоге данных. Если сервер аварийно завершил работу, то файл блокировки мог остаться. В этом случае вы можете удалить файл блокировки, чтобы запустить pg_resetwal
. Однако перед этим убедитесь, что серверный процесс действительно не работает.
pg_resetwal
работает только с серверами той же
основной версии.