Bu sayfa makine çevirisidir. İngilizce orijinalini okuyun. English

IBSurgeon kütüphanesi

Tüm Firebird ve InterBase Disk Üzeri Yapı (ODS) sürümleri

Dmitry Kuzmenko tarafından, 24-Mayıs-2016

On-Disk Structure (ODS) Numarası Nedir

Basit bir ifadeyle 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” adı verilen yapıyı kullanır. Bu, sunucunun önceki sürümlerden gelen veritabanı dosyalarıyla çalışmasını ve eski sunucudan yeni sunucuya geçişi kolaylaştırmasını sağlar. Ancak ileride açıklanacak bazı sınırlamalar vardır.

Veritabanınızın ODS’sini aşağıdaki komutu çalıştırarak öğrenebilirsiniz

Code
gstat -h database_file_name

Burada kullanıcı adı ve parola gereksizdir, çünkü -h seçeneğiyle gstat yalnızca veritabanının fiziksel kısmını (başlık sayfası, 0 numaralı) okur.

Eğer gstat okunan bilgiyi anlamazsa, karşılık gelen mesajı gösterir - ne beklediğini ve ne bulduğunu.

Örneğin, Firebird 2 veritabanında InterBase 4’ten gstat çalıştırırsak, şunu gösterecektir

Code
Wrong ODS version, expected 8, encountered 32779?

Burada, ODS numarası 32779’u görüyorsunuz - bu, InterBase ve Firebird veritabanları arasındaki karışıklığı önlemek için Firebird 2.0’dan itibaren yüksek bit eklenmiş 11’in kodlanmış halidir (onaltılıkta 800B olur, burada B = 11), çünkü bir noktadan sonra eşit ODS numarasına sahip oldular, ancak veritabanı formatları çok farklıydı. Anlaşılır bir mesaj almanın istisnası, gstat’ın firebird.msg veya interbase.msg dosyasını bulamamasıdır. Şöyle bir şey gösterecektir

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

Yani bu, hatalı 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, IntrBase 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 aynı anlama gelen farklı türde bir mesaj alabilirsiniz, sunucudan (gstat’tan değil).

Örneğin, Firebird 1.5 sunucusu Firebird 2.x veritabanını açmaya çalıştığında:

Code
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 metadata 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ında 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, önceki sürümler (7.0/7.1) için uyumsuz olan 11.2’ye yükseltir
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 uyumsuz
Firebird 2.1 11.1 10.x/11.0 Firebird 2.0’ın ODS 11’i, InterBase 7.x ile uyumsuz
Firebird 2.5 11.2 10.x/11.x ODS 11.2, Firebird 2.0/2.1 ile uyumsuz.
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ı, 13.0’dan gfix -upgrade ile veya yedekleme/geri yükleme ile 13.0’dan 13.1’e 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 “Mevcut” 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ükseltmesi

Her sunucu sürümü (InterBase XE7 hariç) oluşturulan veya geri yüklenen veritabanı için her zaman ana ODS numarasını kullanır. Veritabanının ODS’si sunucunun ana ODS’sinden küçü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, sürüme geri 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 InterBase 4.0/4.1 tarafından anlaşılamayan 8.2’ye yükseltir. Yani ODS’nin küçük yükseltmesi, aynı ana sunucu sürümü içinde veritabanlarını uyumsuz hale getirir. Bu, Firebird 2.5 ve InterBase 7.5 için de geçerlidir.

Sürüme geri dönme sorunlarından kaçınmak 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 (ana veya küçük) arasındaki fark büyük veya küçük olabilir. Meraklıysanız, jrd\ods.h dosyasını (Firebird açık kaynak) açabilir ve ODS’ler arasındaki farkları bulabilirsiniz. Örneğin, ODS 9.0, 8.x’e kıyasla bildirimsel referans bütünlüğü, SQL rolleri, indekslerde çöp toplama özelliklerine sahiptir. Ancak ODS 9.1, 9.0’dan yalnızca bazı sistem tablolarına eklenen bir indeks ile farklıdır.

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 söylendiği gibi, son ortak olan ODS 10’du ve o zamandan beri (Firebird 2.0 ve InterBase 7.0) veritabanları formatlarıyla uyumsuzdur.

Yani, InterBase 7.x veya Firebird 1.5’ten beri özellikleri kullanmadıysanız geçiş daha kolay olacaktır. Eğer 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, Firebird ve InterBase’in uzun yıllar süren gelişiminden sonra, bu sunucuların en son sürümleri arasında geçiş zordur.

Her halükarda, bunu denerseniz, veritabanından metadata betiği çıkarmanız ve ardından aynı sunucuyu kullanarak bu betikten yeni veritabanını oluşturmayı denemeniz gerekir.

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

Bu, veritabanınızda kötü eski metadata veya kullandığınız sunucuda betik çıkarma hataları olup olmadığını kontrol etmek için yapılmalıdır. InterBase ve Firebird, saklı yordamları, tetikleyicileri ve görünümleri (ve bazı diğer nesneleri) derlenmiş biçimde (BLR - Binary Language Representation) saklar ve yedekleme/geri yükleme sırasında metadata yeniden derlenmez (SQL’den BLR’ye).

Bu durumda, bir veritabanı uzun zaman önce oluşturulmuş ve sürekli değiştirilmişse, bazı nesneler için yanlış (eski) BLR olabilir. Bu nesneler hala çalışabilir, ancak bunları yeniden oluşturmaya çalışmak (ALTER) sözdizimi (veya başka) hatası verebilir.

Ardından, düzeltilmiş betikten yeni sunucuda bir veritabanı oluşturmayı deneyebilirsiniz. Bu betikteki tüm uyumsuzlukları düzelttikten sonra, eski veritabanından yeni veritabanına veri aktarabilirsiniz.

Eski sunucuda yedekleme yapıp yenisinde geri yüklemeyi deneseniz ve işe yarasa bile - buna asla güvenmeyin. Veritabanınız çok sayıda nesne içeriyorsa, hepsini yeni sunucuda bir kerede kontrol edemezsiniz, bu nedenle hata bir süre sonra ortaya çıkacaktır.

Firebird veya InterBase’in önceki sürümüne nasıl dönülür

Bazen, yeni sunucudan geri dönmek için bir düşürme (downgrade) yapmanız gerekebilir. Nedenler çeşitli olabilir - 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şacaksınız.

Bunu yapmak için yeni sunucu ve eski sunucu ile 2 bilgisayara ihtiyacınız olacak. Sunucu X’in (InterBase veya Firebird sürümü) yeni özelliklerinden hiçbirini kullanmadıysanız, şu adımları izleyerek X-1’e dönebilirsiniz:

  1. Sunucu X-1’den gbak yardımcı programını alın ve sunucu X’te bunu kullanarak yedekleme yapın

  2. Yedeği X-1 sunucusuna aktarın ve geri yükleyin

  3. adımda bazı sorunlar varsa, şunları deneyebilirsiniz

  4. Sunucu X’te, onun gbak’ını kullanarak yedekleme yapın

  5. gbak yardımcı programını X’ten X-1’e kopyalayın

  6. X’ten gbak kullanarak X-1’de 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:

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

Sonuç yalnızca, X-1’den yükseltme yaptığınızdan beri sunucu X’te veritabanı nesnelerinden hiç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ı
  • 6.x’ten 5.x’e - hiçbir metadata değişikliği olmamalı, çü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ı.
  • Firebird 1.5’ten InterBase’e - BIGINT sütunları ve tetikleyicilerde ve yordamlarda yeni SQL uzantıları olmamalı
  • Firebird 2.0’dan Firebird 1.5’e - yeni Firebird 2.0 işlevselliğinden hiçbiri olmamalı.
  • Ve benzeri

Hala düzeltilemeyen hatalar varsa, tek yol X-1 sunucusunda SQL betiğinden 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 betiği 55 Megabayt olan, 5000’den fazla saklı yordam, 1000 tablo ve birkaç bin ad hoc SQL sorgusu içeren veritabanını 3 aydan kısa sürede geçirdik.

Herhangi bir sorunuz varsa, lütfen bizimle iletişime geçin [email protected]