Provided by: manpages-zh_1.5.2-1_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>