Man page - pg_resetxlog(1)

Manual

PG_RESETXLOG

NAME
SYNOPSIS
DESCRIPTION 描 述
NOTES 注 意
译 者


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