Provided by: manpages-zh_1.6.3.3-2_all bug

NAME

       pg_resetxlog - 重置一个 PostgreSQL 数据库集群的预写日志以及其它控制内容

SYNOPSIS

       pg_resetxlog [  -f  ] [  -n  ] [  -o oid  ] [  -x xid  ] [  -l fileid,seg  ] datadir

DESCRIPTION 描述

       pg_resetxlog    清理预写日志(WAL)并且可以选择地重置其它一些控制信息(存储在   pg_control
       文件中)。                                  有时候,如果这些文件崩溃了,我们需要这个功能。
       我们一定只把它用作最后的方法,就是说只有因为这样的崩溃导致服务器无法启动的时候才使用。

        在运行这个命令之后,我们可能可以启动服务器了,但是,一定要记住数据库可能因为部分提交的事务而含有不完整的数据。
       你应该马上转储你的数据,运行                                        initdb,然后重新装载。
       在重新装载之后,检查不完整的部分然后根据需要进行修复。

        这个命令只能由安装服务器的用户运行,因为它需要对数据目录的读写权限。
       出于安全考虑,你必须在命令行上声明数据目录。 pg_resetxlog 不使用环境变量 PGDATA。

       如果 pg_resetxlog 抱怨说它无法判断用于  pg_control  的有效数据,那么你可以强制它继续处理,
       方法是声明   -f   (强制)开关。在这种情况下,那些丢失了的数据的值将用模糊的近似数值代替。
       大多数字段都可以匹配上,但是下一个                 OID,下一个事务                 ID,WAL
       开始地址以及数据库区域字段可能需要手工帮助,
       前面三个可以用下面讨论的开关设置。pg_resetxlog  自己的环境是猜测区域字段的来源;看看  LANG
       等等东西,它们应该和                       initdb                       运行的环境相匹配。
       如果你不能判断所有这些字段的正确数值,那么还是可以使用                                -f,
       但是这样恢复过来的数据库更要怀疑有问题:立即转储和重置是必须的。
       在转储之前不要执行任何修改数据的操作,因为任何这样的动作都可能把事情搞得更糟糕。

        -o, -x, 和 -l 开关允许我们手工设置下一个 OID,下一个事务  ID,以及  WAL  起始位置的数值。
       只有在  pg_resetxlog 无法通过读取 pg_control  判断合适的数值的时候才需要它。对于下一个事务
       ID       而言,一个安全的数值是看看数据目录里的       /pg_clog        里数值最大的文件名,
       然后加一,然后再乘上
       1048576。请注意那些文件名是十六进制的。通常我们也以十六进制的形式声明开关值是最简单得。
       比如,如果       0011       是       pg_clog       里       最大的记录,-x       0x1200000
       就可以了(后面的五个零提供了合适的乘积)。   WAL    的起始位置应该比目前存在于数据目录里得
       /pg_xlog                  里面的任何文件号都大。它也是十六进制的,并且有两部分。比如,如果
       000000FF0000003A       是       pg_xlog       里最大的条目,       那么-l        0xFF,0x3B
       就可以了。我们没有很容易的办法来判断比数据库中最大的      OID     大一号的下一个     OID,
       不过很走运的是获取正确的下一个 OID 并非非常关键。

        开关        -n        (无操作)指示        pg_resetxlog        打印从         pg_control
       重新构造的数值然后不修改任何值就退出。      这主要是一个调试工具,但是在      pg_resetxlog
       真正处理前进行的整洁性检查的时候可能会有用。

NOTES 注意

        在                   postmaster                    服务器运行的时候一定不要运行这个命令。
       如果发现在数据文件目录里有锁文件,那么     pg_resetxlog     将拒绝启动。如果    postmaster
       崩溃,那么可能会剩下一个锁文件;     如果这样,你可以删除该锁文件以便允许     pg_resetxlog
       运行。但是在你这么做之前,一定要确信没有任何postmaster或者后端服务器仍在运行。

译者

       Postgresql 中文网站 何伟平 <laser@pgsqldb.org>

       本页面中文版由中文 man 手册页计划提供。
       中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh