Обсуждение: Change "database system identifier" in pg_control?

Поиск
Список
Период
Сортировка

Change "database system identifier" in pg_control?

От
Joshua Colson
Дата:
Hello everyone,

I'm trying to change the SYSID in pg_control (at least I think that is
where it is) due to a catastrophic backup system failure, combined with
a timely administrative "oops". Does anyone know how I might go about
doing that?

The back story, for those interested:

We lost *all* of our recent backups due to massive hardware failure. A
new database was added within the last couple of weeks and yesterday
morning one of our admins toasted it. We've got a pg_dumpall from after
the database was created and all of the archive logs since. I was trying
to recreate the whole system on another machine to attempt restoration
of the data. The first problem that I ran into was the checkpoint was
incorrectly set (due to the system being a new installation). I was able
to fix that (I think) with the pg_resetxlog command but a subsequent
recovery attempt yields the following errors in the log:

2006-12-14 22:42:09 MST   LOG:  restored log file
"000000010000002300000079" from archive
2006-12-14 22:42:09 MST   LOG:  WAL file is from different system
2006-12-14 22:42:09 MST   DETAIL:  WAL file SYSID is
4965793265546637307, pg_control SYSID is 5008561987249897439
2006-12-14 22:42:09 MST   LOG:  invalid primary checkpoint record
2006-12-14 22:42:09 MST   LOG:  invalid secondary checkpoint link in
control file
2006-12-14 22:42:09 MST   PANIC:  could not locate a valid checkpoint
record
2006-12-14 22:42:09 MST   LOG:  startup process (PID 15145) was
terminated by signal 6
2006-12-14 22:42:09 MST   LOG:  aborting startup due to startup process
failure
2006-12-14 22:42:09 MST   LOG:  logger shutting down

So I thought I would try to change the SYSID to 4965793265546637307 and
have another shot at it.

I'm not a PG guru so please let me know, is there any chance that what
I'm doing will be successful, or am I just wasting my time?

Thank you very much for any help you can provide!

--
Joshua Colson <joshua.colson@ination.com>
iNation, LLC


Re: Change "database system identifier" in pg_control?

От
Tom Lane
Дата:
Joshua Colson <joshua.colson@ination.com> writes:
> So I thought I would try to change the SYSID to 4965793265546637307 and
> have another shot at it.
> I'm not a PG guru so please let me know, is there any chance that what
> I'm doing will be successful, or am I just wasting my time?

You'd have to modify pg_resetxlog to force that value into the sysid
rather than whatever is there.  Hand-editing wouldn't work very well
because of (a) the CRC on pg_control and (b) the need to copy the
value into extant WAL segments.

            regards, tom lane

Re: Change "shutdown time" was: Change "database system

От
Joshua Colson
Дата:
On Thu, 2006-12-14 at 19:10 -0500, Tom Lane wrote:
> You'd have to modify pg_resetxlog to force that value into the sysid
> rather than whatever is there.  Hand-editing wouldn't work very well
> because of (a) the CRC on pg_control and (b) the need to copy the
> value into extant WAL segments.

Well, I ended up just using the pg_control file from the running
installation. The seemed to work in combination with pg_resetxlog but
now the restore is not working because the postmaster has a shutdown
timestamp of today's date and the recovery is thinking that it has
already recovered past the proper point in time. :(

Does anyone know how I can convince the postmaster to believe it was
shutdown at approximately the time the pg_dumpall happened?

Thank you all again for any assistance!

--
Joshua Colson <joshua.colson@ination.com>
iNation, LLC


Re: Change "shutdown time" was: Change "database system

От
Tom Lane
Дата:
Joshua Colson <joshua.colson@ination.com> writes:
> Well, I ended up just using the pg_control file from the running
> installation.

The problem with that is that it'll have a fairly current
last-checkpoint pointer.  You really need a last-checkpoint pointer
pointing at where the rollforward needs to start.

            regards, tom lane

Re: Change "shutdown time" was: Change "database system

От
Joshua Colson
Дата:
On Fri, 2006-12-15 at 12:57 -0500, Tom Lane wrote:
> The problem with that is that it'll have a fairly current
> last-checkpoint pointer.  You really need a last-checkpoint pointer
> pointing at where the rollforward needs to start.

Can't I just reset the last-checkpoint pointer using pg_resetxlog, or
will it not do that?

Thanks.

--
Joshua Colson <joshua.colson@ination.com>
iNation, LLC