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