2002年7月11日
RaQ3 でディスク利用情報(quota)が取り出せずエラーが出る
RaQ3 は PostgreSQL を利用したデータベース中に quota 情報を格納して管理しています。swatch というプログラムが定期的にアップデートしているのですが、これがときどき壊れることがあるようです。管理データベースを再作成してやれば解決できます。但しその作業には root 権限での作業などが必要です。ご注意下さい。 (具体的な方法が判らない人はこの作業はしないほうが無難です。)
なお、定期的に以下のようなエラーが出ているかもしれません。
NOTICE: Index pg_attribute_attrelid_index: NUMBER OF INDEX' TUPLES (574) IS NOT THE SAME AS HEAP' (561)
NOTICE: Index pg_attribute_relid_attnum_index: NUMBER OF INDEX' TUPLES (574) IS NOT THE SAME AS HEAP' (561)
NOTICE: Index pg_attribute_relid_attnam_index: NUMBER OF INDEX' TUPLES (574) IS NOT THE SAME AS HEAP' (561)
META vacuum - FAIL: ERROR: cannot find attribute 1 of relation quota
ここではデータベース全体を一度消去して、問題のあった quota テーブルの
定義を直しておいて、データベース全体を再構築する方法について紹介します。
1:telnet login後root権限になる
2:/etc/crontab の swatch 行をコメントアウトする
# Monitor services to make sure everything is still okay.
0,15,30,45 * * * * root /usr/・・・・・・・・・・・・
を
# Monitor services to make sure everything is still okay.
#0,15,30,45 * * * * root /usr/・・・・・・・・・・・・
として、swatchの自動起動を抑制する
3:cd /home/pgsql
su postgres とし、postgres ユーザーになる。
4:pg_hba.confを書き換える。
"local all crypt" => "local all trust"
5:ダンプする。
pg_dump cobalt > cobalt.dump
※quotaの内容を取り出せないようなエラーがでましたが、実際に壊れているので無視。
6:ダンプ内容を確認
quotaのみ下記のようになっておりましたので、修正
修正前:CREATE TABLE "quota" ();
修正後:CREATE TABLE "quota" (
"type" text,
"name" text,
"total" float8,
"free" float8,
"used" float8,
"percent" int4,
"modify" timestamp
);
quotaのデータを戻す必要がない(自動的にswatchが再合成する)ので、最終行の
COPY "quota" FROM stdin;
を削除。
7:cobalt DBを削除
destroydb cobalt を実行
8:cobalt DBを作成
createdb cobalt を実行
9:データを戻す
psql cobalt < cobalt.dump
10:pg_hba.confを戻す
"local all trust" => "local all crypt"
11:rootになり、/etc/crontab の swatch の部分を戻す。
#(コメントアウト)をはずす。
管理データベースを一度全部消してしまいますので失敗するとシステムが動かなくなります。ご注意を・・・
投稿者 AJ : 10:35 【トラックバック (0)】
