BAD PAGE error after oncheck
Posted in 2003
Topics: Storage & Space Management, Migration, Import/Export & Data Conversion
Hello
I ran into the following situation :
oncheck -cD buzv:sysprocplanTBLspace data check for buzv:informix.sysprocplan
BAD PAGE 8271bd: pg_frcnt -11 < 0 or > PAGEFREE 2020
As far as i know such error message says that pg_frcnt flag
on that page has the wrong value (to say exactly - the number
of free bytes on page).
I think there's three ways to check it :
1) Manually set the correct value for this flag. How to calculate the
real bytes free number? Am i wrong that he formula is:
PAGE_SIZE-(PAGE_HEADER_SIZE)-2*(TIME_STAMP_SIZE)-
(Number_of_slots*4)-(SUM_OF_ALL_SLOTS_SIZES) ?
What is the size of TIME_STAMP - 4 byte ?
2) Drop and recreate sysprocplan table. This one is SMI table, so idea
is to get all columns, indexes, constraints on it, delete the
corresponding items in systables, sysindexes e.t.c. and than manually
create this table ?
3) DBEXPORT the whole database, than recreate it and dbimport.
On Wed, 27 Aug 2003 06:18:59 -0400, Eugene Nechitaylo wrote:
Don't try to recreate the sysprocplan table within the database. System tables
must have a tabid <99 and there may be other undocumented dependencies. Best
to dbexport/drop/dbimport the database. FWIW the timestamp is 4 bytes. The
usable table space on a 2K pagesize system is 2020 bytes/page - starting from
there the formula for available free space would be:
2020 - ((number_Of_Slots * 4) + SUM(Slot_Sizes))
If you are extraordinarily careful you could patch the pg_frcnt field in the
page header of the offending page with the engine OFFLINE after a) taking a
level 0 archive AND b) saving an image of the unmodified page so you can back
out your work if the feces encounters the air circulation device.
Art S. Kagel
> Hello
>
> I ran into the following situation :
>
> oncheck -cD buzv:sysprocplan> TBLspace data check for buzv:informix.sysprocplan BAD PAGE 8271bd: pg_frcnt
> -11 < 0 or > PAGEFREE 2020
>
> As far as i know such error message says that pg_frcnt flag on that page has
> the wrong value (to say exactly - the number of free bytes on page).
>
> I think there's three ways to check it : 1) Manually set the correct value
> for this flag. How to calculate the real bytes free number? Am i wrong that he
> formula is: PAGE_SIZE-(PAGE_HEADER_SIZE)-2*(TIME_STAMP_SIZE)-
> (Number_of_slots*4)-(SUM_OF_ALL_SLOTS_SIZES) ?
>
> What is the size of TIME_STAMP - 4 byte ?
>
> 2) Drop and recreate sysprocplan table. This one is SMI table, so idea is to
> get all columns, indexes, constraints on it, delete the corresponding items in
> systables, sysindexes e.t.c. and than manually create this table ?
>
> 3) DBEXPORT the whole database, than recreate it and dbimport.
Hello Art
"Art S. Kagel" wrote:
>
> Don't try to recreate the sysprocplan table within the database. System tables
> must have a tabid <99 and there may be other undocumented dependencies. Best
I came to the same conclusion, thanks.
> to dbexport/drop/dbimport the database. FWIW the
>timestamp is 4 bytes. The
> usable table space on a 2K pagesize system is 2020 bytes/page - starting from
> there the formula for available free space would be:
>
> 2020 - ((number_Of_Slots * 4) + SUM(Slot_Sizes))
>
Thanks for the help. I have also came to this formula :
2048-PAGE_HEADER_SIZE-PAGE_TIMESTAMPE_SIZE-NUM_OF_SLOTS*4-
SUM(SLOT_SIZES) == 2048-24-4-...==2020- ...
> If you are extraordinarily careful you could patch the >pg_frcnt field in the
> page header of the offending page with the engine OFFLINE after a) taking a
> level 0 archive AND b) saving an image of the unmodified page so you can back
> out your work if the feces encounters the air circulation device.
I tried this technics on the test database and found it to be right.So
i was going to correct my real database in the night, when the
workload is very small.
But... The miracle had happend this night ... The trouble had
disappeared without my intrusion!!!
So thanks all for helping me !
>
> Art S. Kagel
>