Re: How to recover when can't start database

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: How to recover when can't start database
Дата
Msg-id 6531.1112368973@sss.pgh.pa.us
обсуждение исходный текст
Ответ на How to recover when can't start database  ("L.Boldareva" <pg@pierro.dds.nl>)
Ответы Re: How to recover when can't start database  ("L.Boldareva" <pg@pierro.dds.nl>)
Список pgsql-admin
"L.Boldareva" <pg@pierro.dds.nl> writes:
> LOG:  database system was not properly shut down; automatic recovery in
> progress
> LOG:  redo starts at 5/6F000ABC
> PANIC:  btree_split_redo: lost left sibling
> LOG:  startup process (PID 5603) was terminated by signal 6

Hmm.  AFAICS that could only happen if a page split record is pointing
at an "original" page that's not there anymore; that is, the page is
past what the kernel says is the end of the file.  Exactly how did you
get into this state ... was there a system-level crash involved?  ISTM
this cannot happen unless the filesystem has dropped data.

You could probably get it to start by changing the "false" to "true"
in this call of XLogReadBuffer

    /* Left (original) sibling */
    buffer = XLogReadBuffer(false, reln, leftsib);
    if (!BufferIsValid(buffer))
        elog(PANIC, "btree_split_%s: lost left sibling", op);

in src/backend/access/nbtree/nbtxlog.c (it's line 261 in CVS tip,
possibly a little different in 8.0).  Let us know if that helps.

I'd be a bit suspicious of the contents of the index, if not the
whole database, so an immediate dump,reinitdb,reload might be your
most prudent course of action after you get it to start.

Plan B would be to wipe out the WAL log with pg_resetxlog.  This will
allow you to start but the odds of having corrupt data afterwards would
be about 100% ... you *must* dump and reload if you go that way.

            regards, tom lane

В списке pgsql-admin по дате отправления:

Предыдущее
От: Pallav Kalva
Дата:
Сообщение: Postgresql.conf setting recommendations for 8.0.1
Следующее
От: "L.Boldareva"
Дата:
Сообщение: Re: How to recover when can't start database