[pgsql-jp: 39967] Re: OIDとXIDを使いきると?
Itagaki Takahiro
itagaki.takahiro @ oss.ntt.co.jp
2009年 8月 17日 (月) 09:51:10 JST
Tatsuo Ishii <ishii @ sraoss.co.jp> wrote:
> > 便乗ですが、ちなみにこのような状況を試してみる
> > 簡単な方法というのはあるのでしょうか。
>
> 他に良い方法があるのかも知れませんが、私の場合、共有メモリ上の、
> ShmemVariableCache->nextXid;
> を直接触るC関数を書いてXIDを無理やり周回させて実験しました。
それはまた職人向けな方法ですね :-)
いったんデータベースを止めてよければ、pg_resetxlog を使う手があります。
-o, -x あたりが、今回の状況に対応しています。
http://www.postgresql.jp/document/current/html/app-pgresetxlog.html
$ pg_resetxlog --help
pg_resetxlogはPostgreSQLのトランザクションログをリセットします。
使用方法:
pg_resetxlog [OPTION]... DATADIR
オプション:
-e XIDEPOCH 次のトランザクションIDエポックを設定します
-f 強制的に更新を実施します
-l TLI,FILE,SEG 新しいトランザクションログについて、強制的に最小のWAL開始位置を設定します
-m XID 次のマルチトランザクションIDを設定します
-n 更新をせず、単に取り出した制御値を表示します(試験用)
-o OID 次のOIDを設定します
-O OFFSET 次のマルチトランザクションオフセットを設定します
-x XID 次のトランザクションIDを設定します
> もちろんこんなことをするとデータベースが以後使い物にならなくなる可能性
> が高いので、あくまで実験用ということで。
もちろん pg_resetxlog も同様にデータを破壊する可能性があるのでご注意を。
------------------------------------------------------------
NTT オープンソース ソフトウェア センタ
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>
pgsql-jp メーリングリストの案内