Interbase transaksjonsnummer bug

Mens du utfører en obduksjon på en database nylig, kjørte jeg inn i en bug som kan være av interesse for noen mennesker.
Forsøk på å koble til databasen mislyktes med feilen "GDS indre konsistens sjekk, ikke kan finne tupp." Kontrollere database header viste at den neste transaksjonen antall var 131 596 294, og siden størrelsen var 1024. Som det skjer, en 1024 byte side vil holde 4016 transaksjons stater. Dividere neste transaksjonsnummer fra 4016 for å få tips siden sekvensnummeret gir 32768,001494. En meget interessant tall.
Det er en feil i Interbase 5.6, 6.01, og dagens Firebird beta som forårsaker oppslag av en transaksjon inventar for å mislykkes hvis det er mer enn 32767 sider transaksjons. Det gjør den maksimale sikre transaksjonen id for en database med:
1024 byte sider 131,596,287. 2048 byte sider 265,814,016. 4096 byte sider 534,249,472. . 8192 byte sider 1,071,120,384
Selv om de er store tall, overskredet denne databasen 131 millioner transaksjoner i seks måneder
Forslag:.


    Ikke bruk en 1024 byte sidestørrelse
    <. br>
    gjøre sjekk din neste transaksjonsnummer fra tid til annen.

    Hvis du ser den neste transaksjonen antall nærmer seg grensen, sikkerhetskopiering og gjenoppretting av databasen. vant
    Gfix 't løse dette problemet, men jeg kan. (Ta kontakt med meg for mer informasjon).
    Hilsen, etter Ann