Provided by: manpages-zh_1.6.4.3-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>

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh

Application                                        2003-11-02                                    PG_RESETXLOG(1)