pg_resetwal#
pg_resetwal
pg_resetwal — сбросить журнал предварительной записи и другую управляющую информацию кластера базы данных Tantor SE
Синтаксис
pg_resetwal [ -f | --force ] [ -n | --dry-run ] [option...] [ -D | --pgdata ]datadir
Описание
pg_resetwal очищает журнал предварительной записи (WAL) и
при необходимости сбрасывает некоторую другую управляющую информацию, хранящуюся в файле
pg_control. Иногда эта функция требуется,
если эти файлы были повреждены. Она должна использоваться только как
крайний случай, когда сервер не запускается из-за такой коррупции.
Некоторые параметры, такие как --wal-segsize (см. ниже), также могут
использоваться для изменения некоторых глобальных настроек кластера базы данных без
необходимости повторного запуска initdb. Это можно безопасно сделать на
в остальном исправном кластере базы данных, если не используются никакие из упомянутых ниже опасных режимов.
Если pg_resetwal используется в каталоге данных, где сервер был корректно завершен и файл управления в порядке, то это не повлияет на содержимое системы баз данных, за исключением того, что неиспользуемые файлы WAL будут удалены. Любое другое использование потенциально опасно и должно выполняться с большой осторожностью. pg_resetwal потребует указания опции -f (force) перед работой с каталогом данных в состоянии некорректного завершения или с поврежденным файлом управления.
После выполнения этой команды в каталоге данных с поврежденным WAL или
поврежденным файлом управления, сервер должен запуститься,
но имейте в виду, что база данных может содержать несогласованные данные из-за
частично зафиксированных транзакций. Вы должны немедленно выгрузить ваши данные,
выполнить initdb и восстановить. После восстановления проверьте на
несоответствия и при необходимости исправьте.
Если pg_resetwal сообщает, что не может определить
допустимые данные для pg_control, можно заставить его все равно продолжить,
указав опцию -f (force). В этом случае для отсутствующих данных будут подставлены
вероятные значения. Ожидается, что большая часть полей будет совпадать,
но для следующих полей может потребоваться ручная помощь: следующий OID,
следующий идентификатор транзакции и эпоха, следующий идентификатор множественной транзакции и смещение,
а также поля начального местоположения WAL. Эти поля можно установить с помощью опций,
описанных ниже. Если вы не можете определить правильные значения для всех
этих полей, все равно можно использовать опцию -f, но
восстановленную базу данных необходимо рассматривать с еще большим подозрением, чем
обычно: немедленное создание резервной копии и восстановление обязательны. Не
выполняйте никаких операций модификации данных в базе данных перед созданием резервной копии,
так как любое такое действие может ухудшить повреждение.
Эта утилита может быть запущена только пользователем, который установил сервер, потому что она требует доступа на чтение/запись к каталогу данных.
Опции
datadir-Ddatadir--pgdata=datadirУказывает расположение каталога базы данных. По соображениям безопасности, вы должны указать каталог данных в командной строке.
pg_resetwalне использует переменную окруженияPGDATA.-f--forceПринудительно заставить
pg_resetwalпродолжить даже в ситуациях, когда это может быть опасно, как объяснено выше. В частности, эта опция необходима для продолжения, если сервер не был корректно завершен или еслиpg_resetwalне может определить допустимые данные дляpg_control.-n--dry-runОпция
-n/--dry-runуказывает командеpg_resetwalвыводить значения, восстановленные из файлаpg_controlи значения, которые будут изменены, а затем завершить работу без внесения изменений. Это в основном инструмент отладки, но может быть полезным для проверки перед разрешениемpg_resetwalпродолжить работу на самом деле.-V--versionОтобразить информацию о версии, а затем завершить работу.
-?--helpПоказать справку, а затем выйти.
Следующие параметры необходимы только в том случае, если
pg_resetwal не может определить подходящие значения
путем чтения pg_control. Безопасные значения могут быть определены, как
описано ниже. Для значений, которые принимают числовые аргументы, шестнадцатеричные
значения могут быть указаны с использованием префикса 0x. Обратите
внимание, что эти инструкции применимы только при стандартном размере блока 8 кБ.
-cxid,xid--commit-timestamp-ids=xid,xidУстановите вручную самые старые и самые новые идентификаторы транзакций, для которых можно получить время коммита.
Значение для самого старого идентификатора транзакции, для которого можно получить время коммита (первая часть), можно определить, поискав наименьшее числовое имя файла в каталоге
pg_commit_tsвнутри каталога данных. Соответственно, значение для самого нового идентификатора транзакции, для которого можно получить время коммита (вторая часть), можно определить, поискав наибольшее числовое имя файла в том же каталоге. Имена файлов представлены в шестнадцатеричном формате.-exid_epoch--epoch=xid_epochУстановите эпоху следующего идентификатора транзакции вручную.
Эпоха идентификатора транзакции фактически не хранится нигде в базе данных, кроме поля, которое устанавливается с помощью
pg_resetwal, поэтому любое значение будет работать, что касается самой базы данных. Вам может потребоваться настроить это значение, чтобы обеспечить правильную работу систем репликации, таких как Slony-I и Skytools - в этом случае соответствующее значение можно получить из состояния реплицированной базы данных нижестоящего уровня.-lwalfile--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было полностью потеряно.-mmxid,mxid--multixact-ids=mxid,mxidУстановите следующий и предыдущий многотранзакционный идентификатор вручную.
Значение для следующего безопасного идентификатора многократной транзакции (первая часть) можно определить, поискав наибольшее числовое имя файла в каталоге
pg_multixact/offsetsвнутри каталога данных, добавив единицу и умножив на 65536 (0x10000). Соответственно, значение для самого старого идентификатора многократной транзакции (вторая часть-m) можно определить, поискав наименьшее числовое имя файла в том же каталоге и умножив на 65536. Имена файлов представлены в шестнадцатеричном формате, поэтому самым простым способом сделать это является указание значения опции в шестнадцатеричном формате и добавление четырех нулей.-ooid--next-oid=oidУстановите следующий OID вручную.
Нет такого простого способа определить следующий OID, который находится за пределами самого большого в базе данных, но к счастью это не критично для правильной настройки следующего OID.
-Omxoff--multixact-offset=mxoffУстановите следующий смещение для многотранзакционности вручную.
Безопасное значение можно определить, посмотрев на численно наибольшее имя файла в каталоге
pg_multixact/membersвнутри каталога данных, добавив единицу, а затем умножив на 52352 (0xCC80). Имена файлов представлены в шестнадцатеричном формате. Нет простого рецепта, такого как для других параметров добавления нулей.--wal-segsize=wal_segment_sizeУстановите новый размер сегмента WAL в мегабайтах. Значение должно быть установлено как степень двойки от 1 до 1024 (мегабайт). Дополнительную информацию смотрите в той же опции initdb.
Эта опция также может быть использована для изменения размера сегмента WAL существующего кластера базы данных, избегая необходимости повторного
initdb.Примечание
В то время как команда
pg_resetwalустановит начальный адрес WAL за пределами последнего существующего файла сегмента WAL, некоторые изменения размера сегмента могут привести к повторному использованию предыдущих имен файлов журнала предзаписи. Рекомендуется использовать-lвместе с этой опцией для ручной установки начального адреса WAL, если перекрытие имен файлов журнала предзаписи может вызвать проблемы с вашей стратегией архивирования.-uxid--oldest-transaction-id=xidУстановите вручную самый старый не замороженный идентификатор транзакции.
Безопасное значение можно определить, посмотрев на численно наименьшее имя файла в каталоге
pg_xactвнутри каталога данных, а затем умножив на 1048576 (0x100000). Обратите внимание, что имена файлов записаны в шестнадцатеричном формате. Обычно самым простым способом является указание значения опции также в шестнадцатеричном формате. Например, если0007является наименьшим значением вpg_xact, то-u 0x700000будет работать (пять нулей в конце обеспечивают правильный множитель).-xxid--next-transaction-id=xidУстановите следующий идентификатор транзакции вручную.
Значение безопасного значения можно определить, посмотрев на наибольшее числовое значение имени файла в каталоге
pg_xactвнутри каталога данных, добавив единицу и затем умножив на 1048576 (0x100000). Обратите внимание, что имена файлов представлены в шестнадцатеричном формате. Обычно самым простым способом является указание значения параметра в шестнадцатеричном формате. Например, если0011является наибольшим значением вpg_xact, то-x 0x1200000будет работать (пять нулей в конце обеспечивают правильный множитель).
Окружение
PG_COLORОпределяет, следует ли использовать цвет в диагностических сообщениях. Возможные значения:
always,autoиnever.
Примечания
Необходимо избегать использования этой команды при работающем сервере. pg_resetwal откажется запускаться, если обнаружит файл блокировки сервера в каталоге данных. Если сервер аварийно завершил работу, то файл блокировки мог остаться. В этом случае вы можете удалить файл блокировки, чтобы запустить pg_resetwal. Однако перед этим убедитесь, что серверный процесс действительно не работает.
pg_resetwal работает только с серверами той же
основной версии.