Tüm Firebird ve InterBase On-Disk-Structure (ODS) sürümleri
Yazan: Dmitry Kuzmenko, 24-Mayıs-2016
On-Disk Structure (ODS) Numarası Nedir?
Basitçe ifade etmek gerekirse, ODS (On-Disk Structure), belirli bir Firebird veya InterBase RDBMS sürümü için veritabanı dosya formatının numarasıdır.
Neredeyse tüm sürümler, mevcut ODS’yi ve bazı eski ODS’leri desteklemek için “Y-valve” olarak adlandırılan yapıyı kullanır. Bu, sunucunun önceki sürümlerdeki veritabanı dosyalarıyla çalışmasına olanak tanır ve eski sunucudan yenisine geçişi basitleştirir. Ancak aşağıda açıklanacak bazı sınırlamalar vardır.
Veritabanınızın ODS numarasını aşağıdaki komutu çalıştırarak öğrenebilirsiniz:
gstat -h database_file_name
Burada kullanıcı ve şifre gerekmez, çünkü gstat -h seçeneğiyle veritabanının yalnızca fiziksel kısmını (başlık sayfası, sayfa 0) okur.
Eğer gstat okuduğu bilgiyi anlamazsa, ne beklediğini ve ne bulduğunu gösteren ilgili mesajı görüntüler.
Örneğin, Firebird 2 veritabanında InterBase 4’ten gstat çalıştırırsak, şunu gösterir:
Wrong ODS version, expected 8, encountered 32779?
Burada, Firebird 2.0’dan itibaren InterBase ve Firebird veritabanları arasındaki karışıklığı önlemek için yüksek bit eklenmiş (hex olarak 800B olacaktır, burada B = 11) 11 olarak kodlanmış 32779 ODS numarasını görüyorsunuz, çünkü bir noktadan itibaren aynı ODS numarasına sahiptiler ancak çok farklı veritabanı formatları vardı. Anlaşılır bir mesaj alamamanın istisnası, gstat’ın firebird.msg veya interbase.msg dosyasını bulamamasıdır. Bu durumda şuna benzer bir mesaj gösterir:
can't format message 21:3 -- message file ...msg not found
Bu, yanlış bir Firebird veya InterBase kurulumunuz olduğu ve bunu düzeltmeniz gerektiği anlamına gelir.
Birkaç örnek:
Wrong ODS version, expected 8, encountered 32779? - InterBase 4.x, Firebird 2.x veritabanını açmaya çalışıyor
Wrong ODS version, expected 8, encountered 13? - InterBase 4.x, InterBase 2009 veritabanını açmaya çalışıyor
Wrong ODS version, expected 15, encountered 32779 - InterBase XE/XE3, Firebird 2.x veritabanını açmaya çalışıyor
Wrong ODS version, expected 11, encountered 11 - Firebird 2.x, InterBase 7.x veritabanını açmaya çalışıyor
Wrong ODS version, expected 11, encountered 15 - Firebird 2.x, InterBase XE/XE3 veritabanını açmaya çalışıyor
Bazen sunucudan (gstat’tan değil) aynı anlama gelen başka bir mesaj türü alabilirsiniz.
Örneğin, Firebird 1.5 sunucusu Firebird 2.x veritabanını açmaya çalıştığında:
unsupported on-disk structure for file ...; found 32779, support 10
Burada, InterBase 4.0’dan (1994) itibaren ODS sürüm tablosunu görebilirsiniz.
| Sunucu Sürümü | Ana ODS Numarası | Çalışabileceği ODS | Not |
|---|---|---|---|
| InterBase 4.0/4.1 | 8.0 | ||
| InterBase 4.2 | 8.2 | 8.2 | InterBase 4.2, ODS 8.0’ı zorla 8.2’ye yükseltir |
| InterBase 5.0/5.1 | 9.0 | 8.2 | InterBase 5.x, ODS 8.0’ı zorla 8.2’ye yükseltir |
| InterBase 5.5/5.6 | 9.1 | 8.2 | |
| InterBase 6.0 Firebird 1.0 Yaffil 1.0 |
10.0 | 9.0/9.1 | ODS 9.x ile çalışmak tehlikelidir, çünkü yeni InterBase ve Firebird, InterBase 5.x tarafından tanınmayan yeni meta veri formatı kullanır |
| Firebird 1.5 | 10.1 | 9.0/9.1/10.0 | 64bit Firebird 1.5’in ODS 10.1’i, 32bit ODS 10.1 ile uyumsuzdur. Bu, 32/64bit sürümler arasındaki bilinen tek veritabanı formatı uyumsuzluğudur. |
| InterBase 7.0 | 11.0 | 10.0 | Firebird 2.x’in ODS 11’i ile uyumsuz |
| InterBase 7.1 | 11.1 | 10.0 | InterBase 7.5, InterBase ODS 11.0/11.1’i 11.2’ye yükseltir; bu, önceki sürümler (7.0/7.1) için uyumsuzdur |
| InterBase 7.5 | 11.2 | 10.0 | |
| Firebird 2.0 | 11.0 | 10.x | Firebird 2.0’ın ODS 11’i InterBase 7.x ile uyumsuzdur |
| Firebird 2.1 | 11.1 | 10.x/11.0 | Firebird 2.0’ın ODS 11’i InterBase 7.x ile uyumsuzdur |
| Firebird 2.5 | 11.2 | 10.x/11.x | ODS 11.2, Firebird 2.0/2.1 ile uyumsuzdur. |
| Firebird 3.0 | 12.0 | Önceki ODS’leri desteklemez, yalnızca 12.0 | |
| Firebird 4.0 | 13.0 | 13.0 | |
| Firebird 5.0 | 13.1 | 13.0, 13.1 | Veritabanı, gfix -upgrade ile 13.0’dan 13.1’e veya yedekleme/geri yükleme ile yükseltilebilir |
| InterBase 2007 | 12.0 | 11.x | |
| InterBase 2009 | 13.1 | 12.0 | |
| InterBase XE, XE3 | 15.0 | 13.1 | ODS 14 nerede? |
| InterBase XE7 | 16.0 | 15, 13 | “geçerli” ODS, IBCONFIG’de ayarlanabilir. Bu şekilde XE7, belirtilen ODS (13, 15, 16) ile varsayılan olarak veritabanları oluşturur (geri yükleme dahil). |
ODS Yükseltme
Her sunucu sürümü, oluşturulan veya geri yüklenen veritabanı için her zaman (InterBase XE7 hariç) ana ODS numarasını kullanır. Veritabanının ODS’si sunucunun ana ODS’sinden düşükse, sunucu bu ODS’yi destekliyorsa o veritabanıyla çalışabilir.
Bazen sunucu, bildirimde bulunmadan eski ODS’yi daha yeni bir sürüme yükseltebilir. Bu, önceki sürüme dönmenin imkansız hale gelmesine yol açabilir. Örneğin, ODS 8.0 olan bir veritabanını InterBase 4.2 ile açarsanız, ODS’yi 8.2’ye yükseltir; bu, InterBase 4.0/4.1 tarafından anlaşılamaz. Bu nedenle, ODS’nin küçük yükseltmesi, aynı ana sunucu sürümü içindeki veritabanlarını uyumsuz hale getirir. Bu durum Firebird 2.5 ve InterBase 7.5 için de geçerlidir.
Önceki sürüme dönme sorunlarını önlemek için, sunucu sürümünüzün küçük yükseltmesinden önce bile mevcut sunucu sürümünde yedekleme yapmanızı öneririz.
ODS arasındaki fark (ana veya küçük) büyük veya küçük olabilir. Yeterince meraklıysanız, jrd\ods.h (Firebird açık kaynak) dosyasını açabilir ve ODS’ler arasındaki farkları bulabilirsiniz. Örneğin, ODS 9.0, 8.x ile karşılaştırıldığında bildirimsel referans bütünlüğü, SQL rolleri, dizinlerde çöp toplama özelliklerine sahiptir. Ancak ODS 9.1, 9.0’dan yalnızca bazı sistem tablolarına eklenen bir dizinle farklılık gösterir.
Ana ODS sürümünün anında yükseltilemeyeceğini unutmayın. Yalnızca yedekleme/geri yükleme ile yükseltebilirsiniz.
InterBase ve Firebird Arasında Geçiş
Firebird (3.0) ve InterBase’in (XE7) son sürümleri, özellikler ve ODS açısından çok farklıdır. Daha önce de belirtildiği gibi, son ortak ODS 10’du ve o zamandan beri (Firebird 2.0 ve InterBase 7.0) veritabanları format açısından uyumsuzdur.
Bu nedenle, InterBase 7.x veya Firebird 1.5’ten bu yana özellikler kullanmadıysanız geçiş daha kolay olacaktır. Kullandıysanız, geçişin karmaşıklığı, veritabanında veya yönetim sürecinde kaç özellik kullandığınıza bağlı olacaktır.
Şu anda, uzun yıllar süren Firebird ve InterBase geliştirmesinden sonra, bu sunucuların en son sürümleri arasında geçiş yapmak zordur.
Her durumda, bunu yapmaya çalışırsanız, veritabanından meta veri komut dosyasını çıkarmanız ve ardından aynı sunucuyu kullanarak bu komut dosyasından yeni veritabanını oluşturmayı denemeniz gerekir.
isql -x db.gdb …
isql -i script.ddl …
Bu, veritabanınızda kötü eski meta veriler veya kullandığınız sunucudaki komut dosyası çıkarma hataları olup olmadığını kontrol etmek için yapılmalıdır. InterBase ve Firebird, prosedürleri, tetikleyicileri ve görünümleri (ve diğer bazı nesneleri) derlenmiş biçimde (BLR - Binary Language Representation) saklar ve yedekleme/geri yükleme sırasında meta veriler yeniden derlenmez (SQL’den BLR’ye).
Bu durumda, bir veritabanı uzun zaman önce oluşturulduysa ve sürekli değiştirildiyse, bazı nesneler için yanlış (eski) BLR olabilir. Bu nesneler hâlâ çalışabilir, ancak yeniden oluşturmayı (ALTER) denemek sözdizimi (veya başka) hatasına neden olabilir.
Ardından, düzeltilmiş komut dosyasından yeni sunucuda bir veritabanı oluşturmayı deneyebilirsiniz. Bu komut dosyasındaki tüm uyumsuzlukları düzelttikten sonra, eski veritabanından yeni veritabanına veri aktarabilirsiniz.
Eski sunucuda yedekleyip yenisinde geri yüklemeyi denediyseniz ve çalıştıysa bile - buna asla güvenmeyin. Veritabanınız çok sayıda nesne içeriyorsa, hepsini aynı anda yeni sunucuda kontrol edemezsiniz; bu nedenle hata daha sonra ortaya çıkacaktır.
Önceki Firebird veya InterBase Sürümüne Nasıl Dönülür
Bazen yeni sunucudan önceki sürüme dönmeniz (downgrade) gerekebilir. Nedenler değişebilir - sunucuda ani bir hata, performans sorunları vb.
Sunucu yükseltmesinden önce yedekleme yaptıysanız, geri dönmekte sorun olmayacaktır. Ancak yapmadıysanız, yeni ODS’den eski ODS’ye dönme sorunuyla karşılaşırsınız.
Bunu yapmak için yeni sunucu ve eski sunucu olmak üzere 2 bilgisayara ihtiyacınız olacaktır. Sunucu X’in (InterBase veya Firebird sürümü) yeni özelliklerini kullanmadıysanız, şu adımları izleyerek X-1’e dönebilirsiniz:
-
X-1 sunucusundan gbak yardımcı programını alın ve X sunucusunda bunu kullanarak yedekleme yapın
-
Yedeği X-1 sunucusuna aktarın ve geri yükleyin
-
adımda bazı sorunlar varsa, şunları deneyebilirsiniz:
-
X sunucusunda kendi gbak’ını kullanarak yedekleme yapın
-
gbak yardımcı programını X’ten X-1’e kopyalayın
-
X-1’de X’ten gbak kullanarak yedeği geri yükleyin
X ve X-1 sunucuları arasındaki yerel protokolün uyumsuz olabileceğini unutmayın; bu nedenle sunucu adını belirtmek daha iyidir:
gbak -b localhost:c:\dir\data.gdb
Sonuç yalnızca, X-1’den yükseltme yaptığınızdan bu yana X sunucusunda veritabanı nesnelerinden herhangi birini değiştirmediyseniz başarılı olacaktır.
İşte örnekler:
- 5.x’ten 4.2’ye - hiçbir rol ve yeni bildirimsel referans bütünlüğü kullanılmamış olmalıdır
- 6.x’ten 5.x’e - hiçbir meta veri değişikliği olmamalıdır, çünkü 6.x yeni BLR formatı kullanır
- InterBase 7.x’ten Firebird’e - hiçbir boolean sütunu ve 31 karakterden uzun nesne adı olmamalıdır
- Firebird 1.5’ten InterBase’e - BIGINT sütunları ve tetikleyicilerde/prosedürlerde yeni SQL uzantıları olmamalıdır
- Firebird 2.0’dan Firebird 1.5’e - yeni Firebird 2.0 işlevselliğinin hiçbiri kullanılmamış olmalıdır
- Ve benzeri
Hâlâ düzeltilemeyen hatalar varsa, tek yol X-1 sunucusunda SQL komut dosyasından veritabanı oluşturmak ve veri aktarmaktır.
Firebird Geçiş Hizmeti
Geçiş genellikle karmaşık bir görevdir, özellikle orijinal geliştiriciler tarafından terk edilmiş eski Firebird veritabanları için. Şirketimiz, karmaşık Firebird veritabanları için kapsamlı geçiş hizmeti sunmaktadır. Normal ücret USD$2900’dür.
Örneğin, SQL komut dosyası 55 Megabayt olan, 5000’den fazla saklı prosedür, 1000 tablo ve birkaç bin ad hoc SQL sorgusu içeren bir veritabanını 3 aydan kısa sürede geçirdik.
Herhangi bir sorunuz varsa, lütfen bizimle iletişime geçin: [email protected]