Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Sve verzije Firebird i InterBase strukture na disku (ODS)

O autoru: Dmitry Kuzmenko, 24. maj 2016.

Šta je On-Disk Structure (ODS) broj

Jednostavno rečeno, ODS (On-Disk Structure) je broj formata datoteke baze podataka za određenu verziju Firebird ili InterBase RDBMS-a.

Skoro sve verzije koriste takozvani „Y-valve“ za podršku trenutnom ODS-u i nekim starijim ODS-ovima. To omogućava serveru da radi sa datotekama baza podataka iz prethodnih verzija i olakšava prelazak sa starog servera na novi. Ali postoje neka ograničenja, koja će biti opisana dalje.

ODS svoje baze podataka možete saznati pokretanjem sledeće komande

Code
gstat -h database_file_name

Korisničko ime i lozinka ovde nisu potrebni, jer gstat sa opcijom -h samo čita fizički deo baze podataka (header stranicu, broj 0).

Ako gstat ne bude razumeo pročitane informacije, prikazaće odgovarajuću poruku - šta je očekivao i šta je pronašao.

Na primer, ako pokrenemo gstat iz InterBase 4 na bazi podataka iz Firebird 2, prikazaće

Code
Wrong ODS version, expected 8, encountered 32779?

Ovde vidite ODS broj 32779 - to je kodirano 11, sa dodatim visokim bitom od Firebird 2.0 (u heksadecimalnom zapisu to će biti 800B, gde je B = 11), da bi se izbegla zabuna između InterBase i Firebird baza podataka, jer su od nekog trenutka imale isti ODS broj, ali veoma različit format baze podataka. Izuzetak od dobijanja razumljive poruke je kada gstat ne može da pronađe firebird.msg ili interbase.msg. Prikazaće nešto poput

Code
can't format message 21:3 -- message file ...msg not found

Dakle, to znači da imate neispravnu Firebird ili InterBase instalaciju i morate to popraviti.

Nekoliko primera:

Wrong ODS version, expected 8, encountered 32779? - InterBase 4.x pokušava da otvori Firebird 2.x bazu podataka

Wrong ODS version, expected 8, encountered 13? - InterBase 4.x pokušava da otvori IntrBase 2009 bazu podataka

Wrong ODS version, expected 15, encountered 32779 - InterBase XE/XE3 pokušava da otvori Firebird 2.x bazu podataka

Wrong ODS version, expected 11, encountered 11 - Firebird 2.x pokušava da otvori InterBase 7.x bazu podataka

Wrong ODS version, expected 11, encountered 15- Firebird 2.x pokušava da otvori InterBase XE/XE3 bazu podataka

Ponekad možete dobiti drugu vrstu poruke, od servera (ne od gstat-a), ali sa istim značenjem.

Na primer, kada Firebird 1.5 server pokušava da otvori Firebird 2.x bazu podataka:

Code
unsupported on-disk structure for file ...; found 32779, support 10

Ovde možete videti tabelu ODS verzija, od InterBase 4.0 (1994).

Verzija servera Glavni ODS broj Može da radi sa ODS Napomena
InterBase 4.0/4.1 8.0
InterBase 4.2 8.2 8.2 InterBase 4.2 prinudno nadograđuje ODS 8.0 na 8.2
InterBase 5.0/5.1 9.0 8.2 InterBase 5.x prinudno nadograđuje ODS 8.0 na 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 Opasno je raditi sa ODS 9.x, jer novi InterBase i Firebird koriste novi format metapodataka, koji InterBase 5.x ne prepoznaje
Firebird 1.5 10.1 9.0/9.1/10.0 ODS 10.1 64-bitnog Firebird 1.5 nije kompatibilan sa 32-bitnim ODS 10.1. Ovo je jedina poznata nekompatibilnost formata baze podataka između 32/64-bitnih verzija.
InterBase 7.0 11.0 10.0 Nekompatibilan sa ODS 11 Firebird 2.x
InterBase 7.1 11.1 10.0 InterBase 7.5 će nadograditi InterBase ODS 11.0/11.1 na 11.2, što je nekompatibilno za prethodne verzije (7.0/7.1)
InterBase 7.5 11.2 10.0
Firebird 2.0 11.0 10.x ODS 11 Firebird 2.0 nije kompatibilan sa InterBase 7.x
Firebird 2.1 11.1 10.x/11.0 ODS 11 Firebird 2.0 nije kompatibilan sa InterBase 7.x
Firebird 2.5 11.2 10.x/11.x ODS 11.2 nije kompatibilan sa Firebird 2.0/2.1.
Firebird 3.0 12.0 Ne podržava prethodni ODS, samo 12.0
Firebird 4.0 13.0 13.0
Firebird 5.0 13.1 13.0, 13.1 Baza podataka može biti nadograđena sa 13.0 na 13.1 pomoću gfix -upgrade iz 13.0, ili pomoću backup/restore
InterBase 2007 12.0 11.x
InterBase 2009 13.1 12.0
InterBase XE, XE3 15.0 13.1 Gde je ODS 14?
InterBase XE7 16.0 15, 13 „Trenutni“ ODS može se podesiti u IBCONFIG. Na taj način će XE7 kreirati baze podataka (uključujući restore) sa navedenim ODS-om (13, 15, 16) kao podrazumevanim.

Nadogradnja ODS-a

Svaka verzija servera uvek koristi (osim InterBase XE7) svoj glavni ODS broj za kreiranu ili restauriranu bazu podataka. Ako je ODS baze podataka manji od glavnog ODS-a servera, server može da radi sa tom bazom podataka ako podržava njen ODS.

Ponekad server može da nadogradi stari ODS na neki noviji, bez obaveštenja. To može dovesti do nemogućnosti vraćanja na prethodnu verziju. Na primer, ako otvorite bazu podataka sa ODS 8.0 pomoću InterBase 4.2, ona će nadograditi ODS na 8.2, što InterBase 4.0/4.1 ne razume. Dakle, manja nadogradnja ODS-a čini baze podataka nekompatibilnim unutar iste glavne verzije servera. To važi i za Firebird 2.5 i InterBase 7.5.

Da biste izbegli probleme sa vraćanjem na prethodnu verziju, preporučujemo da pravite rezervne kopije na trenutnoj verziji servera čak i pre manje nadogradnje vaše verzije servera.

Razlika između ODS-ova (glavnog ili manjeg) može biti ogromna ili mala. Ako ste dovoljno radoznali, možete otvoriti jrd\ods.h (Firebird open source) i pronaći razlike između ODS-ova. Na primer, ODS 9.0 u poređenju sa 8.x ima deklarativni referencijalni integritet, SQL uloge, sakupljanje smeća u indeksima. Ali ODS 9.1 se razlikuje od 9.0 samo po jednom indeksu, dodatnom nekoj sistemskoj tabeli.

Imajte na umu da se glavna ODS verzija ne može nadograditi u letu. Možete je nadograditi samo pomoću backup/restore.

Migracija između InterBase i Firebird

Poslednje verzije Firebird (3.0) i InterBase (XE7) su veoma različite, po funkcionalnostima i ODS-u. Kao što je ranije rečeno, poslednji zajednički je bio ODS 10, i od tada (Firebird 2.0 i InterBase 7.0) baze podataka su nekompatibilne po svom formatu.

Dakle, migracija će biti lakša ako niste koristili funkcionalnosti od InterBase 7.x ili Firebird 1.5. Ako jeste - složenost migracije će zavisiti od toga koliko ste funkcionalnosti koristili u bazi podataka ili u procesu administracije.

Trenutno, nakon mnogo godina razvoja Firebird i InterBase, migracija između najnovijih verzija ovih servera je teška.

U svakom slučaju, ako pokušate to da uradite, potrebno je da izvučete skriptu metapodataka iz baze podataka, a zatim pokušate da kreirate novu bazu podataka iz te skripte, koristeći isti server.

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

To je potrebno uraditi da biste proverili da li u vašoj bazi podataka ima loših starih metapodataka ili grešaka u izvlačenju skripte na serveru koji koristite. InterBase i Firebird čuvaju procedure, trigere i poglede (i neke druge objekte) u kompajliranom obliku (BLR - Binary Language Representation), i tokom backup/restore metapodaci se ne rekompajliraju (iz SQL-a u BLR).

U tom slučaju, ako je baza podataka kreirana davno i stalno modifikovana, može postojati neispravan (stari) BLR za neke objekte. Ti objekti mogu i dalje da rade, ali pokušaj da ih ponovo kreirate (ALTER) može izazvati sintaksnu (ili drugu) grešku.

Zatim možete pokušati da kreirate bazu podataka iz ispravljene skripte na novom serveru. Nakon što ispravite sve nekompatibilnosti u ovoj skripti, možete preneti podatke iz stare baze podataka u novu bazu podataka.

Čak i ako ste pokušali backup na starom serveru i restore na novom, i to je uspelo - nikada ne verujte tome. Ako vaša baza podataka sadrži mnogo objekata, ne možete sve njih odjednom proveriti na novom serveru, pa će se greška pojaviti nešto kasnije.

Kako se vratiti na prethodnu verziju Firebird ili InterBase

Ponekad može biti potrebno da izvršite downgrade i vratite se sa novog servera. Razlozi mogu biti različiti - iznenadna greška u serveru, problemi sa performansama i tako dalje.

Ako ste napravili rezervnu kopiju pre nadogradnje servera, neće biti problema da se vratite. Ali ako niste, suočićete se sa problemom vraćanja sa novog ODS-a na stari ODS.

Da biste to uradili, biće vam potrebna 2 računara sa novim serverom i starim. Ako niste koristili nijednu novu funkcionalnost servera X (verzije InterBase ili Firebird), možete se vratiti na X-1 prateći ove korake:

  1. Uzmite gbak alat sa servera X-1 i napravite rezervnu kopiju pomoću njega na serveru X
  2. Prenesite rezervnu kopiju na server X-1 i vratite je

Ako dođe do problema u koraku 1, možete pokušati

  1. Napravite rezervnu kopiju na serveru X koristeći njegov gbak
  2. Kopirajte gbak alat sa X na X-1
  3. Vratite rezervnu kopiju na X-1 koristeći gbak sa X

Imajte u vidu da lokalni protokol između servera X i X-1 može biti nekompatibilan, pa je bolje navesti ime servera:

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

Rezultat će biti uspešan samo pod uslovom da niste menjali nijedan objekat baze podataka na serveru X od kada ste izvršili nadogradnju sa X-1.

Evo primera:

  • Sa 5.x na 4.2 - ne smeju se koristiti role ni novi deklarativni referencijalni integritet
  • Sa 6.x na 5.x - nema izmena metapodataka, jer 6.x koristi novi BLR format
  • Sa InterBase 7.x na Firebird - nema boolean kolona ni imena objekata dužih od 31 karaktera.
  • Sa Firebird 1.5 na InterBase - nema BIGINT kolona ni novih SQL ekstenzija u triggerima i procedurama
  • Sa Firebird 2.0 na Firebird 1.5 - nijedna nova funkcionalnost Firebird 2.0.
  • I tako dalje

Ako i dalje postoje greške koje se ne mogu ispraviti, jedini način je da kreirate bazu podataka na serveru X-1 iz SQL skripte i prenesete podatke.

Firebird Migration service

Često je migracija složen zadatak, posebno za zastarele Firebird baze podataka koje su originalni programeri napustili. Naša kompanija nudi sveobuhvatnu uslugu migracije za složene Firebird baze podataka. Redovna naknada je 2900 USD.

Na primer, migrirali smo bazu podataka čija je SQL skripta bila 55 megabajta, sa više od 5000 sačuvanih procedura, 1000 tabela i nekoliko hiljada ad hoc SQL upita, za manje od 3 meseca.

Ako imate bilo kakvih pitanja, kontaktirajte nas [email protected]