228 lines
9.7 KiB
Plaintext
228 lines
9.7 KiB
Plaintext
<!--
|
|
doc/src/sgml/ref/pg_resetxlog.sgml
|
|
PostgreSQL documentation
|
|
-->
|
|
|
|
<refentry id="APP-PGRESETXLOG">
|
|
<indexterm zone="app-pgresetxlog">
|
|
<primary>pg_resetxlog</primary>
|
|
</indexterm>
|
|
|
|
<refmeta>
|
|
<refentrytitle><application>pg_resetxlog</application></refentrytitle>
|
|
<manvolnum>1</manvolnum>
|
|
<refmiscinfo>Application</refmiscinfo>
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
<refname>pg_resetxlog</refname>
|
|
<refpurpose>reset the write-ahead log and other control information of a <productname>PostgreSQL</productname> database cluster</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<cmdsynopsis>
|
|
<command>pg_resetxlog</command>
|
|
<arg choice="opt"><option>-c</option> <replaceable class="parameter">xid</replaceable>,<replaceable class="parameter">xid</replaceable></arg>
|
|
<arg choice="opt"><option>-f</option></arg>
|
|
<arg choice="opt"><option>-n</option></arg>
|
|
<arg choice="opt"><option>-o</option> <replaceable class="parameter">oid</replaceable></arg>
|
|
<arg choice="opt"><option>-x</option> <replaceable class="parameter">xid</replaceable></arg>
|
|
<arg choice="opt"><option>-e</option> <replaceable class="parameter">xid_epoch</replaceable></arg>
|
|
<arg choice="opt"><option>-m</option> <replaceable class="parameter">mxid</replaceable>,<replaceable class="parameter">mxid</replaceable></arg>
|
|
<arg choice="opt"><option>-O</option> <replaceable class="parameter">mxoff</replaceable></arg>
|
|
<arg choice="opt"><option>-l</option> <replaceable class="parameter">xlogfile</replaceable></arg>
|
|
<arg choice="req"><arg choice="opt"><option>-D</option></arg> <replaceable class="parameter">datadir</replaceable></arg>
|
|
</cmdsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsect1 id="R1-APP-PGRESETXLOG-1">
|
|
<title>Description</title>
|
|
<para>
|
|
<command>pg_resetxlog</command> clears the write-ahead log (WAL) and
|
|
optionally resets some other control information stored in the
|
|
<filename>pg_control</> file. This function is sometimes needed
|
|
if these files have become corrupted. It should be used only as a
|
|
last resort, when the server will not start due to such corruption.
|
|
</para>
|
|
|
|
<para>
|
|
After running this command, it should be possible to start the server,
|
|
but bear in mind that the database might contain inconsistent data due to
|
|
partially-committed transactions. You should immediately dump your data,
|
|
run <command>initdb</>, and reload. After reload, check for
|
|
inconsistencies and repair as needed.
|
|
</para>
|
|
|
|
<para>
|
|
This utility can only be run by the user who installed the server, because
|
|
it requires read/write access to the data directory.
|
|
For safety reasons, you must specify the data directory on the command line.
|
|
<command>pg_resetxlog</command> does not use the environment variable
|
|
<envar>PGDATA</>.
|
|
</para>
|
|
|
|
<para>
|
|
If <command>pg_resetxlog</command> complains that it cannot determine
|
|
valid data for <filename>pg_control</>, you can force it to proceed anyway
|
|
by specifying the <option>-f</> (force) option. In this case plausible
|
|
values will be substituted for the missing data. Most of the fields can be
|
|
expected to match, but manual assistance might be needed for the next OID,
|
|
next transaction ID and epoch, next multitransaction ID and offset, and
|
|
WAL starting address fields. These fields can be set using the options
|
|
discussed below. If you are not able to determine correct values for all
|
|
these fields, <option>-f</> can still be used, but
|
|
the recovered database must be treated with even more suspicion than
|
|
usual: an immediate dump and reload is imperative. <emphasis>Do not</>
|
|
execute any data-modifying operations in the database before you dump,
|
|
as any such action is likely to make the corruption worse.
|
|
</para>
|
|
|
|
<para>
|
|
The <option>-o</>, <option>-x</>, <option>-e</>,
|
|
<option>-m</>, <option>-O</>,
|
|
<option>-c</>
|
|
and <option>-l</>
|
|
options allow the next OID, next transaction ID, next transaction ID's
|
|
epoch, next and oldest multitransaction ID, next multitransaction offset,
|
|
oldest and newest transaction IDs for which the commit time can be retrieved,
|
|
and WAL
|
|
starting address values to be set manually. These are only needed when
|
|
<command>pg_resetxlog</command> is unable to determine appropriate values
|
|
by reading <filename>pg_control</>. Safe values can be determined as
|
|
follows:
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
A safe value for the next transaction ID (<option>-x</>)
|
|
can be determined by looking for the numerically largest
|
|
file name in the directory <filename>pg_clog</> under the data directory,
|
|
adding one,
|
|
and then multiplying by 1048576. Note that the file names are in
|
|
hexadecimal. It is usually easiest to specify the option value in
|
|
hexadecimal too. For example, if <filename>0011</> is the largest entry
|
|
in <filename>pg_clog</>, <literal>-x 0x1200000</> will work (five
|
|
trailing zeroes provide the proper multiplier).
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
A safe value for the next multitransaction ID (first part of <option>-m</>)
|
|
can be determined by looking for the numerically largest
|
|
file name in the directory <filename>pg_multixact/offsets</> under the
|
|
data directory, adding one, and then multiplying by 65536.
|
|
Conversely, a safe value for the oldest multitransaction ID (second part of
|
|
<option>-m</>)
|
|
can be determined by looking for the numerically smallest
|
|
file name in the same directory and multiplying by 65536.
|
|
As above, the file names are in hexadecimal, so the easiest way to do
|
|
this is to specify the option value in hexadecimal and append four zeroes.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
A safe value for the next multitransaction offset (<option>-O</>)
|
|
can be determined by looking for the numerically largest
|
|
file name in the directory <filename>pg_multixact/members</> under the
|
|
data directory, adding one, and then multiplying by 52352. As above,
|
|
the file names are in hexadecimal. There is no simple recipe such as
|
|
the ones above of appending zeroes.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
A safe value for the oldest transaction ID for which the commit time can
|
|
be retrieved (first part of <option>-c</>) can be determined by looking
|
|
for the numerically smallest file name in the directory
|
|
<filename>pg_committs</> under the data directory. Conversely, a safe
|
|
value for the newest transaction ID for which the commit time can be
|
|
retrieved (second part of <option>-c</>) can be determined by looking for
|
|
the numerically greatest file name in the same directory. As above, the
|
|
file names are in hexadecimal.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
The WAL starting address (<option>-l</>) should be
|
|
larger than any WAL segment file name currently existing in
|
|
the directory <filename>pg_xlog</> under the data directory.
|
|
These names are also in hexadecimal and have three parts. The first
|
|
part is the <quote>timeline ID</> and should usually be kept the same.
|
|
For example, if <filename>00000001000000320000004A</> is the
|
|
largest entry in <filename>pg_xlog</>, use <literal>-l 00000001000000320000004B</> or higher.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
<command>pg_resetxlog</command> itself looks at the files in
|
|
<filename>pg_xlog</> and chooses a default <option>-l</> setting
|
|
beyond the last existing file name. Therefore, manual adjustment of
|
|
<option>-l</> should only be needed if you are aware of WAL segment
|
|
files that are not currently present in <filename>pg_xlog</>, such as
|
|
entries in an offline archive; or if the contents of
|
|
<filename>pg_xlog</> have been lost entirely.
|
|
</para>
|
|
</note>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
There is no comparably easy way to determine a next OID that's beyond
|
|
the largest one in the database, but fortunately it is not critical to
|
|
get the next-OID setting right.
|
|
</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
The transaction ID epoch is not actually stored anywhere in the database
|
|
except in the field that is set by <command>pg_resetxlog</command>,
|
|
so any value will work so far as the database itself is concerned.
|
|
You might need to adjust this value to ensure that replication
|
|
systems such as <application>Slony-I</> and
|
|
<application>Skytools</> work correctly —
|
|
if so, an appropriate value should be obtainable from the state of
|
|
the downstream replicated database.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<para>
|
|
The <option>-n</> (no operation) option instructs
|
|
<command>pg_resetxlog</command> to print the values reconstructed from
|
|
<filename>pg_control</> and values about to be changed, and then exit
|
|
without modifying anything. This is mainly a debugging tool, but can be
|
|
useful as a sanity check before allowing <command>pg_resetxlog</command>
|
|
to proceed for real.
|
|
</para>
|
|
|
|
<para>
|
|
The <option>-V</> and <option>--version</> options print
|
|
the <application>pg_resetxlog</application> version and exit. The
|
|
options <option>-?</> and <option>--help</> show supported arguments,
|
|
and exit.
|
|
</para>
|
|
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Notes</title>
|
|
|
|
<para>
|
|
This command must not be used when the server is
|
|
running. <command>pg_resetxlog</command> will refuse to start up if
|
|
it finds a server lock file in the data directory. If the
|
|
server crashed then a lock file might have been left
|
|
behind; in that case you can remove the lock file to allow
|
|
<command>pg_resetxlog</command> to run. But before you do
|
|
so, make doubly certain that there is no server process still alive.
|
|
</para>
|
|
</refsect1>
|
|
|
|
</refentry>
|