pg_resetxlog

Название

pg_resetxlog -- очистка журнала упреждающей записи и другой управляющей информацию кластера PostgreSQL

Синтаксис

pg_resetxlog [ -f ] [ -n ] [-o oid] [-x xid] [-e xid_epoch] [-m mxid,mxid] [-O mxoff] [-l xlogfile] datadir

Описание

pg_resetxlog очищает журнал упреждающей записи (WAL) и может сбросить некоторую другую управляющую информацию, хранящуюся в файле pg_control. Это необходимо в случае повреждения этих файлов, и должно использоваться лишь при крайних мерах.

После запуска этой команды, старт сервера, скорее всего, будет возможен, однако, стоит учитывать, что сервер может оказаться не в целостном состоянии. Требуется немедленно выгрузить данные (dump), выполнить initdb и загрузить данные. После чего проверить целостность и при необходимости восстановить.

Утилита может запускаться лишь от пользователя, установившего сервер, так как требуются права записи/чтения в каталоге хранения данных кластера. В целях безопасности каталог необходимо указывать в командной строке. pg_resetxlog не поддерживает переменную окружения PGDATA.

Если pg_resetxlog выводит сообщение о невозможности определить данные из pg_control, то команду можно запустить принудительно, указав -f. В этом случае будут использованы наиболее вероятные значения. Для большинства полей это нормально, но для некоторых может потребоваться явное указание: следующее значение OID, следующее значение ID транзакции и времени, ID мультитранзакции и смещение, начальный адрес WAL. Эти значения можно указать с помощью далее описанных параметров. Если их невозможно определить, то флаг f позволяет это обойти, однако, достоверность данных восстановленной базы останется под сомнением: незамедлительная выгрузка с последующим восстановлением данных крайне необходимы. Не выполняйте никаких операций модификации до создания дампа данных, так как это может привести к ещё более печальным последствиям.

Чтобы указать значения следующих OID, ID транзакции, времени транзакции, ID мультитранзакции, смещения мультитранзакции и начального адреса WAL, используются соответствующие параметры -o, -x, -e, -m, -O, и -l. Это требуется, когда pg_resetxlog не может самостоятельно определить значения из файла pg_control. Безопасные значения вычисляются, как описано далее:

  • Чтобы определить следующее безопасное значение идентификатора транзакции (-x), необходимо в каталоге pg_clog найти файл, имя которого представляет наибольшее числовое значение, добавить к нему один и затем умножить на 1048576. Имена файлов представлены в шестнадцатеричном формате, и значение параметра проще указывать в нём же. Например, если в pg_clog найден файл 0011, будет корректным значение -x 0x1200000 (пять замыкающих нулей представляют требуемый множитель).

  • Безопасное значение следующего идентификатора мультитранзакции (первый аргумент параметра -m) можно вычислить, найдя наибольшее числовое значение среди имён файлов, расположенных в каталоге pg_multixact/offsets. К найденному значению необходимо прибавить один, затем умножить на 65536. Для вычисления же наиболее старшего ID мультитранзакции (второй аргумент параметра -m), необходимо найти наименьшее числовое значение среди тех же файлов, и умножить его на 65536. Как было описано ранее, имена представлены в шестнадцатеричном формате, поэтому значения аргументов лучше указывать в нём же, приписав четыре замыкающих нуля.

  • Чтобы определить безопасное значение следующего смещения (-O), необходимо найти наибольшее числовое значение в имени файла в каталоге pg_multixact/members, прибавить один, а затем умножить на 52352. Имена файлов также представлены в шестнадцатеричном формате, однако не существует однозначного решения в добавлении замыкающих нулей, аналогично ранее описанным.

  • Начальный адрес журнала WAL (-l) должен превышать наибольшее значение сегмента в имени файла, расположенного в каталоге pg_xlog. Имена также представлены в шестнадцатеричном формате и состоят из трёх частей. Первая из них это "ID временного интервала" (обычно оставляют неизменным), например, если 00000001000000320000004A имеет наибольшее значение в pg_xlog, то можно использовать -l 00000001000000320000004B, либо выше.

    Замечание: pg_resetxlog ищет среди файлов каталога pg_xlog, и по умолчанию выбирает значение для флага -l, идущее следующим после найденного. Корректировка значения параметра -l требуется лишь в ситуации, когда известно о существовании других сегментов WAL, отсутствующих на момент в каталоге pg_xlog, например, из архивного файла, или при полной потере данных в pg_xlog.

  • Не существует относительно простого пути вычисления следующего за наибольшим из существующих значением OID, однако, это не критично.

  • Время ID транзакции не хранится в базе данных кроме поля, устанавливаемого командой pg_resetxlog, поэтому принимается любая допустимая величина. Возможно, понадобиться поправить значение для обеспечения работоспособности репликации, например, Slony-I. Значение должно соответствовать состоянию реплицируемой базы данных.

С флагом -n (без выполнения) команда pg_resetxlog отображает извлечённые из pg_control данные, а также значения, которые можно изменить. Режим полезен для отладки и тестирования предстоящей операции без реального применения изменений.

Флаги -V и --version выводят версию pg_resetxlog и прерывают дальнейшее выполнение. Ключи -? и --help выводят справку по поддерживаемым аргументам.

Замечания

Команду нельзя выполнять на работающем сервере. pg_resetxlog отклонит выполнение при обнаруженном блокирующем файле в каталоге хранения данных. Иногда при аварии сервера блокирующий файл может остаться в системе. В этом случае необходимо самостоятельно удалить его, чтобы дать возможность pg_resetxlog отработать. Перед выполнением операции дважды убедитесь, что сервер остановлен.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy