Deze pagina is automatisch vertaald. Lees het Engelse origineel. English

IBSurgeon-bibliotheek

Alle Firebird- en InterBase On-Disk-Structure (ODS)-versies

Door Dmitry Kuzmenko, 24-mei-2016

Wat is het On-Disk Structure (ODS) nummer

In eenvoudige woorden: ODS (On-Disk Structure) is een nummer van het databasebestandsformaat voor de specifieke Firebird- of InterBase-RDBMS-versie.

Bijna alle versies gebruiken de zogenaamde “Y-valve” om de huidige ODS en enkele oude ODS te ondersteunen. Dit stelt de server in staat om te werken met databasebestanden van eerdere versies en vereenvoudigt de overgang van de oude server naar een nieuwe. Maar er zijn enkele beperkingen, die hieronder worden beschreven.

U kunt de ODS van uw database achterhalen door de volgende opdracht uit te voeren:

Code
gstat -h database_bestandsnaam

Gebruiker en wachtwoord zijn hier niet nodig, omdat gstat met de -h optie alleen het fysieke deel van de database leest (headerpagina, nummer 0).

Als gstat de gelezen informatie niet begrijpt, toont het een bijbehorend bericht - wat het verwachtte en wat het vond.

Bijvoorbeeld, als we gstat van InterBase 4 uitvoeren op een database van Firebird 2, toont het:

Code
Verkeerde ODS-versie, verwacht 8, aangetroffen 32779?

Hier ziet u ODS-nummer 32779 - dit is gecodeerd 11, met de hoge bit toegevoegd sinds Firebird 2.0 (in hex is dit 800B, waarbij B = 11), om verwarring tussen InterBase- en Firebird-databases te voorkomen, omdat ze vanaf een bepaald punt hetzelfde ODS-nummer hadden, maar een heel ander databaseformaat. De uitzondering op het krijgen van een begrijpelijk bericht is wanneer gstat firebird.msg of interbase.msg niet kan vinden. Het toont dan iets als:

Code
kan bericht 21:3 niet formatteren -- berichtenbestand ...msg niet gevonden

Dit betekent dus dat u een onjuiste Firebird- of InterBase-installatie heeft en dat u dit moet corrigeren.

Enkele voorbeelden:

Verkeerde ODS-versie, verwacht 8, aangetroffen 32779? - InterBase 4.x probeert een Firebird 2.x-database te openen

Verkeerde ODS-versie, verwacht 8, aangetroffen 13? - InterBase 4.x probeert een InterBase 2009-database te openen

Verkeerde ODS-versie, verwacht 15, aangetroffen 32779 - InterBase XE/XE3 probeert een Firebird 2.x-database te openen

Verkeerde ODS-versie, verwacht 11, aangetroffen 11 - Firebird 2.x probeert een InterBase 7.x-database te openen

Verkeerde ODS-versie, verwacht 11, aangetroffen 15 - Firebird 2.x probeert een InterBase XE/XE3-database te openen

Soms kunt u een ander soort bericht krijgen, van de server (niet van gstat), maar met dezelfde betekenis.

Bijvoorbeeld, wanneer de Firebird 1.5-server een Firebird 2.x-database probeert te openen:

Code
niet-ondersteunde on-disk structuur voor bestand ...; gevonden 32779, ondersteund 10

Hier ziet u de tabel van ODS-versies, sinds InterBase 4.0 (1994).

Serverversie Hoofd-ODS-nummer Kan werken met ODS Opmerking
InterBase 4.0/4.1 8.0
InterBase 4.2 8.2 8.2 InterBase 4.2 upgrade ODS 8.0 geforceerd naar 8.2
InterBase 5.0/5.1 9.0 8.2 InterBase 5.x upgrade ODS 8.0 geforceerd naar 8.2
InterBase 5.5/5.6 9.1 8.2
InterBase 6.0
Firebird 1.0
Yaffil 1.0
10.0 9.0/9.1 Het is gevaarlijk om met ODS 9.x te werken, omdat nieuwe InterBase- en Firebird-versies een nieuw metadataformaat gebruiken dat niet wordt herkend door InterBase 5.x
Firebird 1.5 10.1 9.0/9.1/10.0 ODS 10.1 van 64-bits Firebird 1.5 is incompatibel met 32-bits ODS 10.1. Dit is de enige bekende incompatibiliteit van databaseformaat tussen 32/64-bits versies.
InterBase 7.0 11.0 10.0 Incompatibel met ODS 11 van Firebird 2.x
InterBase 7.1 11.1 10.0 InterBase 7.5 zal InterBase ODS 11.0/11.1 upgraden naar 11.2, wat incompatibel is voor eerdere versies (7.0/7.1)
InterBase 7.5 11.2 10.0
Firebird 2.0 11.0 10.x ODS 11 van Firebird 2.0 is incompatibel met InterBase 7.x
Firebird 2.1 11.1 10.x/11.0 ODS 11 van Firebird 2.0 is incompatibel met InterBase 7.x
Firebird 2.5 11.2 10.x/11.x ODS 11.2 is incompatibel met Firebird 2.0/2.1.
Firebird 3.0 12.0 Ondersteunt geen eerdere ODS, alleen 12.0
Firebird 4.0 13.0 13.0
Firebird 5.0 13.1 13.0, 13.1 Database kan worden geüpgraded van 13.0 naar 13.1 met gfix -upgrade van 13.0, of met backup/restore
InterBase 2007 12.0 11.x
InterBase 2009 13.1 12.0
InterBase XE, XE3 15.0 13.1 Waar is ODS 14?
InterBase XE7 16.0 15, 13 “huidige” ODS kan worden ingesteld in IBCONFIG. Op deze manier zal XE7 databases (inclusief restore) met de opgegeven ODS (13, 15, 16) als standaard aanmaken.

ODS-upgrade

Elke serverversie gebruikt altijd (behalve InterBase XE7) het hoofd-ODS-nummer voor de aangemaakte of herstelde database. Als de ODS van de database lager is dan de hoofd-ODS van de server, kan de server met die database werken als het de ODS ondersteunt.

Soms kan de server oude ODS upgraden naar een nieuwere, zonder melding. Dit kan leiden tot de onmogelijkheid om terug te keren naar de vorige versie. Bijvoorbeeld, als u een database met ODS 8.0 opent met InterBase 4.2, zal het ODS upgraden naar 8.2, wat niet begrijpelijk is voor InterBase 4.0/4.1. Dus de kleine upgrade van ODS maakt databases incompatibel binnen dezelfde hoofdserverversie. Dit geldt ook voor Firebird 2.5 en InterBase 7.5.

Om problemen met terugkeren naar de vorige versie te voorkomen, raden we aan om back-ups te maken op de huidige serverversie, zelfs vóór de kleine upgrade van uw serverversie.

Het verschil tussen ODS (hoofd of klein) kan groot of klein zijn. Als u nieuwsgierig genoeg bent, kunt u jrd\ods.h (Firebird open source) openen en de verschillen tussen ODS vinden. Bijvoorbeeld, ODS 9.0 vergeleken met 8.x heeft declaratieve referentiële integriteit, SQL-rollen, garbage collection in indexen. Maar ODS 9.1 verschilt van 9.0 alleen door één index, toegevoegd aan een systeemtabellen.

Let op dat de hoofd-ODS-versie niet ter plaatse kan worden geüpgraded. U kunt het alleen upgraden via backup/restore.

Migratie tussen InterBase en Firebird

De laatste versies van Firebird (3.0) en InterBase (XE7) zijn zeer verschillend, qua functies en ODS. Zoals eerder gezegd, de laatste gemeenschappelijke was ODS 10, en sindsdien (Firebird 2.0 en InterBase 7.0) zijn databases incompatibel met hun formaat.

Migratie zal dus gemakkelijker zijn als u geen functies heeft gebruikt sinds InterBase 7.x of Firebird 1.5. Zo ja - de complexiteit van de migratie hangt af van hoeveel functies u in de database of het beheerproces heeft gebruikt.

Momenteel, na vele jaren van Firebird- en InterBase-ontwikkeling, is migratie tussen de nieuwste versies van deze servers moeilijk.

Hoe dan ook, als u dit probeert, moet u een metadatascript uit de database extraheren en vervolgens proberen de nieuwe database uit dat script te maken, met dezelfde server.

Code
isql -x db.gdb …
isql -i script.ddl …

Dit moet worden gedaan om te controleren of er slechte oude metadata in uw database zit of bugs in de scriptextractie van de server die u gebruikt. InterBase en Firebird slaan procedures, triggers en views (en enkele andere objecten) op in gecompileerde vorm (BLR - Binary Language Representation), en tijdens backup/restore worden metadata niet opnieuw gecompileerd (van SQL naar BLR).

In dit geval, als een database lang geleden is aangemaakt en constant is gewijzigd, kan er onjuiste (oude) BLR zijn voor sommige objecten. Deze objecten kunnen nog steeds werken, maar proberen ze opnieuw te creëren (ALTER) kan een syntaxfout (of andere fout) opleveren.

Dan kunt u proberen een database te maken uit het gecorrigeerde script op de nieuwe server. Nadat u alle incompatibiliteiten in dit script heeft opgelost, kunt u gegevens van de oude database naar de nieuwe database pompen.

Zelfs als u probeerde te back-uppen op de oude server en te herstellen op de nieuwe, en het werkte - vertrouw dit nooit. Als uw database veel objecten bevat, kunt u niet allemaal tegelijk op de nieuwe server controleren, dus de fout zal later opduiken.

Hoe terug te keren naar de vorige versie van Firebird of InterBase

Soms moet u een downgrade uitvoeren en terugkeren van de nieuwe server. Redenen kunnen variëren - een plotselinge bug in de server, prestatieproblemen, enzovoort.

Als u de back-up vóór de serverupgrade heeft gemaakt, zijn er geen problemen om terug te keren. Maar zo niet, dan krijgt u te maken met het probleem van terugkeren van de nieuwe ODS naar de oude ODS.

Om dat te doen, heeft u 2 computers nodig met de nieuwe server en de oude. Als u geen nieuwe functies van server X (versie van InterBase of Firebird) heeft gebruikt, kunt u terugkeren naar X-1 door deze stappen te volgen:

  1. Neem het gbak-hulpprogramma van server X-1 en maak daarmee een back-up op server X
  2. Breng de back-up over naar de X-1-server en herstel deze

Als er problemen zijn bij stap 1, kunt u proberen:

  1. Maak een back-up op server X met de eigen gbak
  2. Kopieer het gbak-hulpprogramma van X naar X-1
  3. Herstel de back-up op X-1 met gbak van X

Let op dat het lokale protocol tussen servers X en X-1 incompatibel kan zijn, dus het is beter om de servernaam op te geven:

Code
gbak -b localhost:c:\dir\data.gdb

Het resultaat zal alleen succesvol zijn op voorwaarde dat u geen databaseobjecten op server X heeft gewijzigd sinds u van X-1 bent geüpgraded.

Hier zijn voorbeelden:

  • Van 5.x naar 4.2 - er mogen geen rollen en nieuwe declaratieve referentiële integriteit worden gebruikt
  • Van 6.x naar 5.x - geen metadatawijzigingen, omdat 6.x een nieuw BLR-formaat gebruikt
  • Van InterBase 7.x naar Firebird - geen boolean-kolommen en objectnamen langer dan 31 tekens.
  • Van Firebird 1.5 naar InterBase - geen BIGINT-kolommen en nieuwe SQL-extensies in triggers en procedures
  • Van Firebird 2.0 naar Firebird 1.5 - geen van de nieuwe Firebird 2.0-functionaliteit.
  • Enzovoort

Als er nog steeds fouten zijn die niet kunnen worden opgelost, is de enige manier om de database op de X-1-server te maken vanuit het SQL-script en gegevens te pompen.

Firebird-migratieservice

Vaak is migratie een complexe taak, vooral voor legacy Firebird-databases die door de oorspronkelijke ontwikkelaars zijn achtergelaten. Ons bedrijf biedt de uitgebreide migratieservice voor complexe Firebird-databases. Het reguliere tarief is USD $2900.

We hebben bijvoorbeeld een database gemigreerd waarvan het SQL-script 55 megabytes was, met meer dan 5000 opgeslagen procedures, 1000 tabellen en enkele duizenden ad hoc SQL-query’s, in minder dan 3 maanden.

Als u vragen heeft, neem dan contact met ons op via [email protected]