## 皮克\_重置沃尔 皮克\_resetwal — 重置 PostgreSQL 数据库集群的预写日志和其他控制信息 ## 概要 `pg_resetwal` [ `-f`\|`- 力量` ][ `-n` | `--dry-run` ] [*`选项`*...][ `-d` | `--pgdata` ]*`数据目录`* ## 描述 `pg_resetwal`清除预写日志 (WAL) 并可选地重置存储在`pg_control`文件。如果这些文件已损坏,有时需要此功能。当服务器由于这种损坏而无法启动时,它应该仅作为最后的手段使用。 运行此命令后,应该可以启动服务器,但请记住,由于部分提交的事务,数据库可能包含不一致的数据。您应该立即转储数据,运行`初始化数据库`,然后重新加载。重新加载后,检查不一致并根据需要进行修复。 此实用程序只能由安装服务器的用户运行,因为它需要对数据目录进行读/写访问。出于安全原因,您必须在命令行中指定数据目录。`pg_resetwal`不使用环境变量`PGD​​ATA`. 如果`pg_resetwal`抱怨它无法确定有效数据`pg_control`,您可以通过指定`-f`(强制)选项。在这种情况下,将用合理的值代替缺失的数据。大多数字段都可以匹配,但下一个 OID、下一个事务 ID 和 epoch、下一个多事务 ID 和偏移量以及 WAL 起始位置字段可能需要手动协助。可以使用下面讨论的选项设置这些字段。如果您无法确定所有这些字段的正确值,`-f`仍然可以使用,但必须以比平时更加​​怀疑的方式对待恢复的数据库:立即转储和重新加载是必要的。*不要*在转储之前在数据库中执行任何数据修改操作,因为任何此类操作都可能使损坏变得更糟。 ## 选项 `-f`\ `- 力量` 力量`pg_resetwal`即使它不能确定有效的数据`pg_control`,如上所述。 `-n`\ `--空运行` 这`-n`/`--空运行`选项指示`pg_resetwal`打印从中重建的值`pg_control`和即将更改的值,然后退出而不修改任何内容。这主要是一个调试工具,但在允许之前作为健全性检查很有用`pg_resetwal`进行真正的。 `-V`\ `- 版本` 显示版本信息,然后退出。 `-?`\ `- 帮助` 显示帮助,然后退出。 仅在以下情况下才需要以下选项`pg_resetwal`无法通过读数确定合适的值`pg_control`.可以如下所述确定安全值。对于采用数字参数的值,可以使用前缀指定十六进制值`0x`. `-c *`xid`*,*`xid`*`\ `--commit-timestamp-ids=*`xid`*,*`xid`*` 手动设置可以检索其提交时间的最旧和最新事务 ID。 可以通过查找目录中数字最小的文件名来确定可以检索其提交时间(第一部分)的最早事务 ID 的安全值`pg_commit_ts`数据目录下。相反,可以通过在同一目录中查找数字最大的文件名来确定可以检索其提交时间(第二部分)的最新事务 ID 的安全值。文件名是十六进制的。 `-e *`xid_epoch`*`\ `--epoch=*`xid_epoch`*` 手动设置下一个事务 ID 的纪元。 事务 ID 纪元实际上并未存储在数据库中的任何位置,除了`pg_resetwal`,因此就数据库本身而言,任何值都可以使用。您可能需要调整此值以确保 Slony-I 和 Skytools 等复制系统正常工作 - 如果是这样,则应从下游复制数据库的状态中获取适当的值。 `-l *`walfile`*`\ `--next-wal 文件=*`walfile`*` 通过指定下一个 WAL 段文件的名称来手动设置 WAL 起始位置。 下一个 WAL 段文件的名称应大于目录中当前存在的任何 WAL 段文件名`pg_wal`数据目录下。这些名称也是十六进制的,由三个部分组成。第一部分是“时间线 ID”,通常应保持不变。例如,如果`00000001000000320000004A`是最大的入口`pg_wal`, 采用`-l 00000001000000320000004B`或更高。 请注意,当使用非默认 WAL 段大小时,WAL 文件名中的数字与系统函数和系统视图报告的 LSN 不同。此选项采用 WAL 文件名,而不是 LSN。 ### 笔记 `pg_resetwal`本身查看文件`普格沃尔`并选择默认值`-l`设置超出上一个现有文件名。因此,手动调整`-l`仅当您知道WAL段文件当前不在中时才需要`普格沃尔`,例如离线存档中的条目;或者如果`普格沃尔`已经完全消失了。 `-m*`mxid`*,*`mxid`*`\ `--多方位入侵检测系统=*`mxid`*,*`mxid`*` 手动设置下一个和最早的多事务ID。 下一个多事务ID(第一部分)的安全值可以通过查找目录中数字最大的文件名来确定`pg_多X射线/偏移`在数据目录下,加一,然后乘以65536(0x10000)。相反,最早的多事务ID的安全值(第二部分)`-m`)可以通过在同一目录中查找数字最小的文件名并乘以65536来确定。文件名是十六进制的,所以最简单的方法是用十六进制指定选项值并附加四个零。 `-o*`老年人`*`\ `--下一个oid=*`老年人`*` 手动设置下一个OID。 要确定下一个OID超出数据库中最大的OID,没有相对简单的方法,但幸运的是,正确设置下一个OID并不重要。 `-O*`mxoff`*`\ `--多X射线偏移=*`mxoff`*` 手动设置下一个多重传输偏移。 可以通过查找目录中数字最大的文件名来确定安全值`pg_multixact/成员`在数据目录下,加一,然后乘以52352(0xCC80)。文件名是十六进制的。没有简单的方法可以像其他加零选项那样简单。 `--wal segsize=*`wal\_段尺寸`*` 以兆字节为单位设置新的WAL段大小。该值必须设置为1到1024(兆字节)之间的2次方。看到相同的选项了吗[initdb](app-initdb.html)了解更多信息。 ### 笔记 虽然`普格沃尔酒店`将WAL起始地址设置为超出最新的现有WAL段文件,某些段大小更改可能会导致重复使用以前的WAL文件名。建议使用`-l`如果WAL文件名重叠将导致存档策略出现问题,则使用此选项手动设置WAL起始地址。 `-u*`希德`*`\ `--最早的事务id=*`希德`*` 手动设置最早的未冻结交易ID。 可以通过在目录中查找数字最小的文件名来确定安全值`pg_xact`然后乘以1048576(0x100000)。请注意,文件名是十六进制的。用十六进制指定选项值通常也是最容易的。例如,如果`0007`是世界上最小的入口`pg_xact`, `-u0x700000`将起作用(五个尾随的零提供适当的乘数)。 `-x*`希德`*`\ `--下一个事务id=*`希德`*` 手动设置下一个事务ID。 可以通过查找目录中数字最大的文件名来确定安全值`pg_xact`在数据目录下,添加一,然后乘以1048576(0x100000)。请注意,文件名是十六进制的。用十六进制指定选项值通常也是最容易的。例如,如果`0011`是世界上最大的入口`pg_xact`, `-x 0x1200000`将起作用(五个尾随的零提供适当的乘数)。 ## 环境 `PG_颜色` 指定是否在诊断消息中使用颜色。可能的值是`总是`, `汽车`和`从不`. ## 笔记 服务器运行时不得使用此命令。`普格沃尔酒店`如果在数据目录中找到服务器锁文件,将拒绝启动。如果服务器崩溃,那么可能会留下一个锁文件;在这种情况下,可以删除锁文件以允许`普格沃尔酒店`跑。但在执行此操作之前,请加倍确保没有任何服务器进程仍处于活动状态。 `普格沃尔酒店`仅适用于相同主要版本的服务器。 ## 另见 [pg\_控制数据](app-pgcontroldata.html)