close

  為了測試EDB的歸檔備份與基於時間回復(PITR)功能,設定了postgresql.conf中,
archive_%相關的參數。其中timeout時間設為60秒,
隔天一早來歸檔功能沒啟動,反倒是WAL資料已經將硬碟塞滿了。
  所以,就自作主張將pg_xlog裡大部份的log檔都刪了,清出硬碟空間來。

結果,修改了歸檔指令之後,發現一直出現找不到WAL檔的訊息,
cp: cannot stat `pg_xlog/00000001000000000000009A': No such file or directory
2010-12-10 11:12:59 CSTLOG:  archive command failed with exit code 1
2010-12-10 11:12:59 CSTDETAIL:  The failed archive command was: test ! -f /opt/PostgresPlus/8.4AS/wal_archive/00000001000000000000009A && cp pg_xlog/00000001000000000000009A /opt/PostgresPlus/8.4AS/wal_archive/00000001000000000000009A

只好趕緊找reset log的方法。
後來,利用pg_resetxlog將WAL日誌重設。

底下,是針對pg_resetxlog的說明:

語法:pg_resetxlog [-f] [-n] [-ooid ] [-x xid ] [-e xid_epoch ] [-m mxid ] [-O mxoff ] [-l timelineid,fileid,seg ] datadir

請注意:1.在資料庫系統執行中時,不要執行這個指令
    2.不能以root執行,要以enterprisedb帳號執行


-f 強制
-n 開關
(底下三項,是pg_resetxlog無法透過pg_control判斷合適當數值的時候,才需要指定)
-o 指定下一個OID
  無法很容易的判斷比資料庫中最大的OID,不過它的值並不是很重要。
-e 指定下一個紀元OID
-m 指定下一個多交易(multitransaction) ID:參考pg_multixact/offsets裡數值最大的檔案名稱,
  再加1,然後再乘上65536。檔案名稱要轉成十六進制。最簡單的方式,是取得十六進制數值,後面
  再加上0000。
-O 指定下一個多交易(multitransaction)偏移位址:參考pg_multixact/members裡數值最大的檔案名稱,
  再加1,然後再乘上65536。檔案名稱要轉成十六進制。最簡單的方式,是取得十六進制數值,後面
  再加上0000。
-x 指定下一個事務(transaction) ID:參考pg_clog裡數值最大的檔案名稱,再加1,然後再乘上1048576
 。檔案名稱要轉成十六進制。例如,pg_clog中最大的文件記錄是0011,可以下 -x 0x1200000
  [ (11 + 1) * (0x100000) = 0x120000]
-l 指定WAL起始位置的值:要比pg_xlog中目前最大的檔案記錄還大,十六進制,且分成三個部份,每個部
  份的值不大於255(0xFF)。
  例如,目前pg_xlog中最大的檔案記錄是00000001000000320000004A,則給-l 0x1,0x32,0x4B即可
  ,如果該部份的值已滿(255),則加上一部份的值,例如最大檔記錄是000000010000003A000000FF
  ,則給 -l 0x1,0x3B,0x0。
 
我是以指定WAL起始位置的方式執行。
執行之後,pg_xlog裡面的log會被清空重新開始產生log檔。

arrow
arrow
    全站熱搜

    來自大海的心 發表在 痞客邦 留言(0) 人氣()