FireBird/Interbase hakkında Sık Sorulan Sorular (19.06.2008)

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kilitli
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

FireBird/Interbase hakkında Sık Sorulan Sorular (19.06.2008)

Mesaj gönderen mussimsek »

Merhaba,

Sık sorulan soruları bir arada topladık. Hem güzel bir arşiv olmasını, hem de konu bütünlüğünü amaçladık.

Firebird nedir?
Firebird Interbase 6 kodları üzerine geliştirilmiş bedava bir SQL veritabanıdır.

Nereden indirebilirim?
http://www.firebirdsql.org adresini açın. Download kısmından "Firebird Relational Database" seçeneğine tıklatın. Firebird 2.1 seçeneğini seçin ve "Windows executable installer for full Classic or Superserver" seçeneği ile Firebird'ü indirin.

Classic ve SuperServer arasındaki fark nedir?
* Windows üzerinde kullanıyorsanız, SuperServer kullanmanız tavsiye edilir.
* Classic server'da her bağlanan client için ayrı process oluşturulur, SuperServer ise tüm istekleri tek bir process'ten karşılar. Her bir process sistem kaynağı tükettiği için classic Server kullanıcı sayısı az, performansa ihtiyaç olan yerlerde tercih edilebilir.
* Classic Server çok işlemciyi destekler, Super Server desteklemez.
* Classic Serverda application modda guardian çalışmaz, SuperServer'da application modda da, service modunda da guardian sorunsuz çalışır.

Guardian Nedir?
Guardian, Firebird database sunucusunu arka planda sürekli gözetler. Herhangi bir nedenden dolayı sunucu kapanırsa, yeniden başlatır.

Neden hep FireBird öneriyor sunuz?
FireBird bir SQL veritabanı olması dolayısıyla paradox ve MySQL gibi veritabanlarında olmayan transaction, SP, trigger gibi yapıları desteklemektedir. Bu da işinizi çok daha güvenli ve kolay kılmaktadır.

Firebird ücretsiz midir?
Evet, Firebird'ün tüm sürümleri ücretsizdir. İstediğiniz gibi dağıtabilirsiniz.

Interbase'in hangi sürümleri ücretsizdir?
Interbase'in sadece 6.0, 6.01 ve 6.02 sürümleri ücretsizdir. 5.5 ve öncesi ile, 6.5 ve sonrası ücretlidir.

Bir de Yaffil diye birşey görüyorum?
Yaffil'de yine Interbase 6 kodu üzerine geliştirilen, daha çok rusların tercih ettiği bir SQL veritabanı idi. Zamanla Firebird'ün büyük başarı kazanması üzerine, Firebird'e katılmıştır.

Vulcan Nedir?
Vulcan çoklu işlemci desteği vermek için Jim Starkey tarafından yazılan ayrı bir projedir. Daha sonra firebird ile 3.0 sürümünde birleştirilip, daha sağlam bir çoklu işlemci desteği (SMP) verilecektir.

Interbase'mi, FireBird'mü?
Firebird.
* Firebird, Interbase kodlarından geliştirilmesine rağmen birkaç sefer kodlar yeni baştan yazılmış ve performans, özellik olarak Interbase'i geçmiştir.
* Interbase'in yeni sürümleri ücretli iken, Firebird tamamen bedavadır.
* Destek noktasında da Firebird çok iyidir. Sourceforge'daki binlerce proje arasından 2007 yılının en iyi destek verilen projesi seçilmiştir.

Hangi projelerde kullanabilirim?
Küçük, Orta ve büyük ölçekli tüm projelerde (yani milyon kayıtlar dahil) rahatlıkla ve güvenle kullanılabilir. Bir kişilik bir projeyi Firebird ile yazıp, daha sonra ihtiyacınız olursa aynı veritabanı dosyası ile yüzlerce kişiye de kullandırabilirsiniz. Piyasada aktif çalışan 900-950 GB büyüklüğünde hergün milyonlarca kayıt girilen Firebird projeleri mevcuttur.

Ayrıca ReadOnly DB Özelliği ile CD'lerde dahi çalıştırılabilir tanıtım programlarında da kullanılabilir. Örneğin Dergi yapımında veya reklam ve tanıtım CD'lerinde kullanılabilir.

Firebird hangi işletim sistemlerini ve ortamları desteklemektedir?
* Windows
* Linux
* FreeBSD
* Solaris
* HP-UX
* Mac-OS
* Sinixz
---------------------
* ODBC driver
* JDBC
* .net provider

FireBird'ün limitleri nedir?

viewtopic.php?t=22531

Çok büyük projelere yetecek kadar kapasiteli bir veritabanı : )

SQL Desteği ne düzeydedir?
Full ANSI SQL-92 standardlarını destekler. SQL 2003'te yer alan özelliklerin de büyük bir kısmı desteklenmektedir.

SQL 2003'te yer alan maddelerin Firebird 1.5 ve 2.0'da hangilerinin desteklendiğini görmek için :

http://www.firebirdsql.org/index.php?op ... onformance

Interbase ile hazırladığım veritabanlarımı FireBird ile kullanabilir miyim?
Evet, Firebird ile Interbase 6 ve hatta daha önceki Interbase sürümlerinde hazırladığınız veritabanlarını kullanabilirsiniz.

Paradox'taki bilgilerimi FireBird'e nasıl aktarırım?
Bkz : viewtopic.php?t=3166

FireBird'ün kurulumunu nasıl yapabilirim?
Adım Adım Firebird Kurulumu : viewtopic.php?f=18&t=22647

Firebird öğrenebilir miyim acaba, bana biraz zor geliyor. En kolayı yine paradox, ne dersiniz?
Matrix'teki kafaya bilgi aktarma olayı bulunana dek bir işi öğrenmenin yolu okumak ve çalışmak :) Forumda kaynak çok, takıldığınız yerde yardımcı olacak insan da çok. Size düşen biraz gayret :)

FireBird ve Interbase için yönetim aracı var mıdır?
FireBird ile bir yönetim aracı gelmemektedir. Interbase ile IB Console diye bir araç gelmekle beraber pekte kullanışlı değildir.

* IB Expert : http://www.ibexpert.com - Personal sürümü ücretsiz.
* EMS Interbase Manager : http://www.ems-hitech.com
* DBWorkbench : http://www.upscene.com
* IB Admin : http://www.sqlly.com
* IB Console : http://www.mengoni.it

Bu araçlar ile veritabanı, tablo, index oluşturma, kayıtları görme vs. gibi komple veritabanı yönetim işlemlerini yapabilirsiniz.

Firebird/Interbase için varsayılan kullanıcı ve şifre nedir?
SYSDBA - masterkey

SYSDBA kullanıcısının şifresini değiştirebilir miyim?
Evet değiştirebilirsiniz. Ib Expert'te Tools menüsünden User Manager kısmından değiştirebilirsiniz.

SYSDBA kullanıcısının şifresini değiştirdim ama başka bir bilgisayarda veritabanını açabiliyorum?
Evet, maalesef Firebird ve Interbase 6 şifreleri veritabanı bazında değil, bilgisayarda saklamaktadır. Bunun sonucu olarak, bilgisayardaki her Firebird veritabanı aynı şifreyi kullanmak zorundadır ve veritabanını başka bir bilgisayara taşıdığınız zaman, o bilgisayardaki şifre ile açabilirsiniz.

2008 sonuna doğru çıkması beklenen Firebird 3.0 ile bu sıkıntı sona erecek, kullanıcı ve şifreler veritabanına dahil edilecek, veritabanı dosyası başka bir yere götürülse bile şifre bilinmiyorsa açılmayacaktır.

FireBird/Interbase elektrik kesintilerinden etkileniyormuş?
Windows'taki her açık dosya gibi Firebird'te bilgisayarın düzgün kapanmamasından etkilenebilir. En güzel çözüm bir kesintisiz güç kaynağı kullanmak ve düzenli yedek almaktır.
Ayrıca şunları yapmayın/yaptırmayın :
* Veritabanı kullanılırken metadata değişikliği yapmayın.
* Veritabanı kullanılırken dosyayı kopyalamayın.
* Veritabanı özelliklerinden "Forced Writes" seçeneğinin aktif olduğundan emin olun.

Delphi tarafında hangi bileşen setini kullanmalıyım?
IBX (InterBase eXpress).

Zamanla Firebird interbase'den ayrılıp, çok daha güçlü ve özellikli bir veritabanı haline gelmektedir. IBX genel olarak yeterli olsa da bazı noktalarda yetersiz kalabilmektedir. Fib+ ( http://www.devrace.com ) component seti Firebird'ün yeni sürümleri de dahil olmak üzere daha iyi desteğe sahiptir.

IBX'i nasıl kullanabilirim?
Bu geniş bir konu. Gerekli temel bilgilerin tamamının yer aldığı bir makale sitede var : http://www.delphiturkiye.com/index.php? ... xgiris.htm

dbExpress ve BDE ile de kullanılabiliyormuş?

evet ancak en uygun yol IBX'tir. BDE artık geliştirilmiyor ve bazı noktalarda IBX kadar geniş bir desteği yok. dbExpress ise daha çok raporlar için uygun bir erişim metodudur. Veri güncellemesi biraz sıkıntılıdır.

UDF nedir?
User-Defined Function (Kullanıcı tanımlı fonksiyon). dll yazarak veya mevcut UDF dll'lerini kullanara, FireBird'e fonksiyonlar ilave edebilirsiniz. Ayrıca Firebird 2.1 ile pek çok dahili fonksiyon eklenmiştir : viewtopic.php?f=18&t=22223

Firebird/Interbase'i ağ ortamlarında birden çok kullanıcı ile kullanabilir miyim?
Evet kullanabilirsiniz. Gerekli ayarlar için : viewtopic.php?t=104

FireBird/Interbase'in performansı nasıl?
Yeterince iyi. Detay istiyorsanız Kuri_TLJ'nin Firebird seminerini izleyiniz. SQL Server ile bir karşılaştırması var.

Delphi tarafından kodla Database, table vs. oluşturabilir miyim?
evet oluşturabilirsiniz : viewtopic.php?t=2171 , viewtopic.php?t=106

IbTable.RecordCount komutu gerçek kayıt sayısını vermiyor?
Evet, IBX veritabanından kayıtların tamamını çekmez. Bunun için doğru sayıyı alamazsınız. Bunun için ya IBTable.FetchAll komutu ile tüm kayıtları çekmelisiniz veya SQL ile (select count(*) from tablo_adı) kayıt sayısını bulmalısınız.

Türkçe için charset olarak ne kullanmalıyım?
charset : Win1254, collate : PXW_TURK kullanmalısınız.

Generator nedir?
Generator daha çok otomatik artan alanlar için (autoinc) kullanılan bir yapıdır. Ama çok daha esnektir. İsterseniz manuel olarak generator'lerin değerini arttırabileceğinizden başka işler içinde kullanabilirsiniz.

Generatorleri AutoInc için en uygun nasıl kullanırım?
IBDataset ile. GeneratorField kısmından ayarlayabilirsiniz. Bunun dışında trigger ile de kullanabilirsiniz.

Test yaptım paradox/mySQL FireBird'ten daha hızlı çıktı?
Olay sadece hız olayı değildir. Firebird özellikle transaction desteği ile yaptığınız güncellemeleri güvenli hale getirmektedir. Ayrıca kayıt sayısı arttıkça Paradox birçok sıkıntı çıkartmaktadır. Detaylar için Fahrettin abinin seminerini izleyebilirsiniz.

Kayıt yaptığım halde, veritabanına kaydolmuyor?
Bunun teorik olarak birçok nedeni olabilir. Eğer commitretaining yazarak aratırsanız, muhtemel nedenlere ulaşabilirsiniz. İşte birkaçı :
- viewtopic.php?t=4975&highlight=commitretaining
- viewtopic.php?t=2737&highlight=commitretaining
- viewtopic.php?t=4037&highlight=commitretaining
...

Bir alana girdiğim değerlerin sonuna boşluk ekleniyor, bunu nasıl önlerim?
-CHAR alantipini kullanmış iseniz böyle olması normaldir. CHAR alantipinde belirlenen uzunlukta bilgi saklanır. Yani AD isimli alanınız 20 karakter ise, bu 20 karakterin hepsi doldurulur. AD olarak "Ali" değerini girmişseniz, sonuna 17 tane boşluk eklenir ve 20'ye tamamlanır. Bunun için VARCHAR tipini kullanmalısınız. VARCHAR'da sadece girilen karakter kadarı saklanır. Sona boşluk eklenmez.
- Bir de IBX bileşenlerinde alanın FixedLength özelliğinin False olması lazım. Eğer bu özellik True ise yine sona boşluk eklenir.

Domain Nedir?
Kullanıcının tanımladığı veritipi diyebiliriz. Birden çok tabloda kullandığınız veritiplerini domain olarak tanımlayıp, tablolarda bu veritipi için domaini kullanabilirsiniz. Mesela Telefon ve Faks alanları için.

Domain kullanmanın faydası var mıdır?
Domain'i değiştirdiğiniz zaman, ilgili tüm alanlar otomatikmen değişir. Ayrıca hangi alana ne değer veriyordum diye düşünmeyeceğinizden size hız kazandırır.
Kullanmanız iyi olur.

Embedded Server nedir?
viewtopic.php?t=1310

Stored Procedure (SP) nedir?
Veritabanı tarafında kaydedilmiş ve derlenmiş procedure'dür. Delphi'deki procedure'ün veritabanındaki karşılığı gibi düşünebilirsiniz.

SP kullanmak ne avantajlar sağlar?
* İşlemleri kodla yapmaya göre çok daha kolay ve esnektir.
* İşlemlerin veritabanı tarafında yapılması, arada veri gidip gelmemesi, SP'lerin zaten derlenmiş olduğundan tekrar derlenmemesi gibi sebeplerden dolayı çok daha hızlıdır.
* Hazırladığınız SP'leri diğer mecralarda da kolayca kullanacağınızdan, projenizi kolayca taşıyabilirsiniz. Mesela Delphi'de hazırladığınız projeyi birkaç günlük çalışma ile php'ye ve dolayısıyla web'e taşıyabilirsiniz.
.....
NOT : SP'leri mutlaka ve mutlaka kullanın. FireBird'ü paradox gibi sadece veri depolamak için kullanırsanız, büyük gücünü kullanmamış olursunuz.

Trigger nedir?
Tabloya veri eklendiğinde, silindiğinde ve tablodaki veri güncellendiğinde otomatik çalışan kodlardır.

Trigger nerelerde kullanılır?
* Referential Integrity (veri bütünlüğü) sağlama
* Girilen bilgilerin loglanması
* Bazı hesapların yapılması
* .....

View nedir?
view'lar bir veya birden fazla tablodan verileri çekmek için; bir SQL cümlesi ile oluşturulan sanal bir tablodur. Bu tablo veya tablolara kayıt eklendikçe, ilgili view'da kayıtları görebilirsiniz. View'daki bilgiler veritabanında depolanmaz, ilgili tablolardan alınır.

View nerelerde kullanılabilir?
* Birden fazla tablodan kolayca veri çekmek için. Mesela Rapor oluşturmak veya acemi programcıların işini kolaylaştırmak için.
* Bazı bilgileri gizlemek için. Mesela personel tablonuz var. Tüm alanlar görünsün ancak maaş kısmı görünmesin istiyorsunuz. Bu tip durumlarda faydalı olur.
* Tabloyla birlikte bir takım bilgiler göstermek için kullanışlı olabilir. Mesela bazı alanları toplamı veya bu alanlardan en büyüğü, en küçüğünü göstermek gibi.

FireBird veritabanını nasıl yedeklerim?
* Dosyayı direk kopyalamanız yeterli olur.
* Ayrıca IB Expert gibi bir araçla Backup - Restore yapabilirsiniz.
* Delphi tarafında Backup-Restore : viewtopic.php?p=18633#18633
* Kullanıcı tarafında shadow kopyalama da güzel bir seçenek : viewtopic.php?t=1329
* Ücretsiz ve kullanışlı bir program GBAK BackupRunner ile : http://cc.borland.com/codecentral/ccweb ... g?id=18733

Yedekleme yöneticileri veya planlayıcıları (backup scheduler) :
Talat Doğan'ın FIBS Firebird-Interbase Backup Scheduler ve
Maura Barbieri ‘nin GBak Scheduler ını kullanabilirsiniz.

FireBird/Interbase veritipleri nelerdir?
viewtopic.php?t=834

Boolean tipi yok, nasıl olacak?
Evet ama bir domain tanımlayarak Boolean tipini kolayca oluşturabilirsiniz. True ve False için 1 ve 0 değerlerini saklayacağız :

Kod: Tümünü seç

create domain DMN_BOOLEAN as SMALLINT default 0 not null
      check ( value in (0,1));
Dialect1/Dialect3 farkı nedir, hangisini kullanmalıyım?
FireBird için Dialect 3 kullanmalısınız. Interbase 5 ve öncesi için Dialect1 kullanmalısınız. En belirgin fark Dialect 3'te TimeStamp yanında Date ve Time diye ayrı 2 veritipinin yer almasıdır.

Tüm farklar için : viewtopic.php?p=52185#52185

Firebird ile programı yaptım. Kullanıcı bilgisayarına da FirBird kurmak lazım, nasıl yapsam?

Inno Setup ile yapabilirsiniz : viewtopic.php?t=3420 .

Firebird hangi portu kullanır?

Varsayılan olarak 3050 portunu kullanır. İsterseniz, Firebird.conf dosyasından portu değiştirebilirsiniz.
Kilitli