Gbak Yedekleme-Geri Yükleme Hızlı Kılavuzu
1. Gbak ile Yedeklemede Uzmanlaşmak
1.1 gbak komutuyla en basit Firebird yedeklemesi
1.2. Windows’ta çevrimiçi yapılabilen gbak ile yerel yedekleme
1.3. TCP/IP bağlantı dizesiyle gbak ile yedekleme
1.4. Service Manager ile gbak ile daha hızlı yedekleme
1.5. Service Manager ve engellenmiş çöp toplama ile gbak ile en hızlı yedekleme
1.6. Ağ paylaşımına veya ağ konumuna yedekleme
1.7. Uzak sunucudan yerel makineye basit yedekleme
1.8. Service Manager ile uzak sunucudan yerel makineye daha hızlı yedekleme
1.9. Service Manager kullanarak uzak sunucudaki Firebird veritabanını aynı uzak sunucuya yedekleme
2.1. En basit geri yükleme komutu
2.2. localhost bağlantı dizesiyle geri yükleme
2.3. Windows’ta XNET ile geri yükleme
2.4. Service Manager ile daha hızlı geri yükleme
2.6. Takma ad kullanarak veritabanını geri yükleme
2.7. Yerel yedeklemeyi uzak sunucuya geri yükleme
2.8. Service Manager ile yerel yedeklemeyi uzak sunucuya geri yükleme
2.9. Son derece uzun tabloları geri yükleme
3. Yedekleme ve geri yükleme süreçlerini ayarlama ve günlüğe kaydetme
3.2. Ayrıntılı çıktıya performans istatistikleri ekleme
3.3. Tabloları yedeklemeden ve/veya geri yüklemeden hariç tutma
3.4. Yedekleme veya geri yükleme için şifreyi dosyadan alma
4. Tek adımda yedekleme-geri yükleme
VM ve Firebird Yedeklemeleri Hakkında Çok Sık Sorulan Sorular
Ek A. Yedekleme/geri yükleme sırasında hatalar
gbak nedir?
Gbak, standart bir Firebird komut satırı aracıdır (resmi belgelerine buradan ulaşabilirsiniz) ve şunları yapmak için tasarlanmıştır: 1) veritabanının tam yedeklemesi: veritabanındaki her kaydı okur ve bunları yedekleme dosyasına kaydeder, 2) yedeklemeyi yeni veritabanına geri yükler.
Diğer RDBMS’lerle deneyimi olan geliştiriciler ve yöneticiler için “yedekleme” terimi biraz kafa karıştırıcı olabilir, çünkü gbak veritabanının birebir kopyasını değil, yalnızca verileri içeren (dizinler bildirim olarak saklanır) veritabanı formatında olmayan bir dosya üretir.
gbak yedekleme dosyasından bir veritabanı oluşturmak için gbak ile geri yükleme işlemi yapılmalıdır.
1. Gbak ile Yedeklemede Uzmanlaşmak
1.0. Hazırlık
C:\data klasörünü oluşturalım ve içine bir veritabanı koyalım. Firebird OLTP-EMUL testinden 5Gb’lık bir veritabanı kullanacağız, ancak elbette kendi veritabanınızı da kullanabilirsiniz.
Linux kullanıcıları için - /db klasörünü oluşturalım ve sahibini “firebird” olarak değiştirelim, ardından veritabanını oraya kopyalayalım (sahibinin de firebird olduğundan emin olun).
mkdir /db
chown firebird -R /db
1.1 gbak komutuyla en basit Firebird yedeklemesi
Windows
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Bu örnekte, gbak aracı veritabanı dosyasına yerel veya gömülü erişim kullanarak erişir.
Firebird 3.0: Firebird 3.0’ın varsayılan yapılandırmasındaki gömülü erişim (firebird.conf’da ServerMode = SuperServer parametresiyle) veritabanına özel bir kilit koymaya çalışacaktır, bu nedenle diğer bağlantılar veritabanına erişemeyecektir (veya aktif bağlantılar nedeniyle gbak denemesi başarısız olacaktır).
Firebird 2.5: Windows’ta Firebird 2.5 ile komut XNET protokolü üzerinden sorunsuz çalışacaktır (tabii ki tek bir Firebird örneği çalıştırıyorsanız). Linux’ta Firebird, gömülü erişim kullanmayı deneyecektir; erişilebilir değilse, otomatik olarak (ve örtük olarak) TCP/IP üzerinden bağlanmayı deneyecektir. (XNET, INET vb. anlamlarını bilmiyorsanız, lütfen Firebird Bağlantı Dizeleri Hile Sayfasına bakın).
Not 1: Bu komut, işletim sistemi kullanıcısının (yani sizin) hesabı altında çalışır ve yedekleme ile veritabanı dosyalarına erişmek için bu hesabın izinlerini kullanır.
Normalde, Windows’ta Firebird hizmeti LocalSystem hesabıyla, Linux’ta ise “firebird” kullanıcısı altında çalışır, ancak konsol genellikle kendi kullanıcı hesabınız altında çalıştırılır.
Bu kullanıcı hesabının veritabanı yoluna veya yedekleme yoluna erişimi yoksa, gbak “Cannot open backup file” (Yedekleme dosyası açılamıyor) hatasıyla başarısız olacaktır (Ek A. Hatalar, #5’teki örneğe bakın).
Not 2: gbak -b yedekleme dosyasını sessizce üzerine yazar. Yani, zaten backup1.fbk varsa, üzerine yazılacaktır.
Not 3: Linux’ta, bu gbak komutu konsol kullanıcısına ait bir yedekleme dosyası oluşturacaktır.
Bu komut için yedekleme süresi: 120 saniye
1.2. Windows’ta çevrimiçi yapılabilen gbak ile yerel yedekleme
Bu bölüm yalnızca Windows kullanıcıları içindir! Genellikle, veritabanına aktif bağlantılar varken yedekleme yapmamız gerekir; bu nedenle, gömülü bağlantı yerine, Firebird 3’te gbak’ın veritabanı dosyasına özel kilit koymasını önlemek için yerel protokolü, yani XNET’i açıkça belirtmek daha iyidir.
Firebird 3.0 için:
gbak -b xnet://c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Firebird 2.5 için, yerel bir bağlantı dizesi kullanabiliriz ve bu da XNET kullanacaktır:
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux’ta Firebird, Windows’taki XNET gibi belirli bir yerel protokolü desteklemez, bu nedenle TCP/IP bağlantı dizesi kullanmak gerekir (bölüm 1.3’e bakın).
Ayrıca, XNET yalnızca tek bir Firebird örneği için çalışır; bu nedenle Windows’ta birden fazla Firebird örneği çalıştırıyorsanız, hedef sunucu örneğini belirtmek için INET tarzı bağlantı dizesi kullanmak daha kolay olabilir.
Yedekleme süresi: 139 saniye
1.3. TCP/IP bağlantı dizesiyle gbak ile yedekleme
Bu, çevrimiçi yedekleme yapmak için en evrensel gbak komutudur.
Windows
gbak -b localhost:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Bu durumda, veritabanı yolunun başında localhost: belirterek, bağlantı Firebird’ün ağ alt sistemi üzerinden yapılır.
Yerel erişimden biraz daha yavaştır, ancak bağlantıları kabul eden çalışan bir sunucuya sahip olduğumuz tüm durumlarda çalışır.
Firebird için standart olmayan port
Firebird standart olmayan bir portta çalışıyorsa (örneğin, 3050 yerine 3051), yedeklemeyi şu şekilde yapabilirsiniz:
Windows
gbak -b localhost/3051:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost/3051:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Yedekleme süresi: 182 saniye
1.4. Service Manager ile gbak ile daha hızlı yedekleme
TCP/IP bağlantısının evrenselliğini, standart olmayan port desteğini ve hızlı yerel yedeklemeyi nasıl elde edebiliriz? Service Manager’ı kullanalım! Service Manager, basit bir ifadeyle, standart araçları Firebird motoru üzerinden çalıştırmanın bir yoludur. Service Manager durumunda, veritabanı yolunda sunucu adını belirtmeye gerek olmadığını, yalnızca -se parametresinde belirtmeniz gerektiğini lütfen unutmayın.
Windows
gbak -b -se localhost:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Bu komut, yedeklemeyi gerçekleştirmek için 3050 portundaki Firebird örneğinin Service Manager’ını kullanmak istediğimizi belirtmek için -service anahtarını kullanır.
Bu durumda, yedekleme doğrudan Firebird işleminin içinde gerçekleştirilir (gbak kodunun bir kopyasına sahiptir) ve işlem içi iletişim çok daha hızlı olduğundan, yedekleme bu durumda önemli ölçüde daha hızlı olacaktır.
Firebird standart olmayan bir portta (örneğin, 3051) çalışıyorsa, komut şu şekilde görünebilir:
gbak -b -se localhost/3051:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Not: Firebird 2.5 ve Firebird 3.0.0-3.0.5’te (yalnızca 3.0.6’da kaldırılmıştır) önemli bir sınırlama vardır: komut satırı (tüm parametreler ve veritabanı ile yedekleme yolları) 256 karakterden kısa olmalıdır.
Bu sınıra, örneğin veritabanı ve yedekleme yollarının uzun olması nedeniyle ulaşırsanız, databases.conf (3.0 ve üzeri) veya aliases.conf (2.5) içinde veritabanı için bir takma ad bildirebilirsiniz:
mydb1=c:\Data\test1.fdb #Windows
veya
mydb1=/db/test1.fdb #linux
ve ardından komutumuzda kullanın:
Windows
gbak -b -se localhost:service_mgr mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
Yedekleme süresi: 115 saniye
1.5. Engellenmiş çöp toplama ile gbak ile en hızlı yedekleme
Yedeklemeyi daha da hızlandırmak için -g anahtarını ekleyelim
-G(ARBAGE_COLLECT) çöp toplamayı engelle
Yani, yedekleme komutu aşağıdaki gibi olacaktır
Windows
gbak -b -se localhost:service_mgr -g mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr -g mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
-g anahtarı, Firebird motorunu yedekleme işlemi sırasında veritabanı dosyasındaki çöp toplamayı devre dışı bırakmaya zorlar.
Bu, çöp kayıt sürümlerinin yedekleme dosyasında saklanacağı anlamına gelmez; sunucunun yedekleme sırasında veritabanındaki mevcut çöpü temizlemeye çalışmayacağı anlamına gelir ve yedekleme daha hızlı olacaktır.
Bu anahtarı kullanmanızı şiddetle öneririz, çünkü çöp toplama ve ilgili temizliğin sweep (gfix -sweep veya autosweep) tarafından yapılması gerektiğine inanıyoruz; bu nedenle gbak’ı sweep’in herhangi bir alternatifi olarak düşünmemek daha iyidir.
Yedekleme süresi: 105 saniye
1.6. Ağ paylaşımına veya ağ konumuna yedekleme
Yedekleme dosyasını ağ paylaşımına koymamız gerekirse ne olur?
Windows’ta
Yeni Firebird kullanıcılarının sık karışıklığı: basit gbak -b ile komut isteminden başlatılan manuel yedekleme ağ paylaşımına sorunsuz çalışır, ancak -se localhost:service_mgr ile hızlı gbak sürümü çalışmaz.
Bunun nedeni, Windows’ta Firebird’ün LocalSystem hesabı altında çalışmasıdır ve bu hesabın ağ konumlarına erişimi yoktur (bu ağ paylaşımları “Everyone” grubu için erişim yapılandırmadıysa, ancak bu fidye yazılımı çağımızda çok çok tehlikelidir).
Çözüm, Windows’ta Firebird hizmetini ağ paylaşımına erişmek için yeterli haklara sahip bir hesap altında ve aynı zamanda C:\ProgramData\Firebird’deki yerel veritabanı dosyalarına ve sistem dosyalarına erişmek için yeterli haklara sahip bir hesap altında çalıştırmaktır. Ayrıca, firebird.conf’da RestrictAccess parametresini yapılandırmak iyi bir fikirdir.
Linux’ta
Linux’ta Firebird “firebird” hesabı altında çalıştığından, ağ paylaşımını “firebird” kullanıcısına eşleyerek bağlayın; böylece Firebird hizmeti ağ konumuna yerel bir sürücü gibi erişebilecektir.
1.7. Uzaktaki sunucudan yerel makineye basit yedekleme
Veritabanını uzaktaki sunucudan yerel makineye yedeklemek mümkündür.
Aşağıdaki örnek komut bir Windows bilgisayarda başlar, Linux sunucusundaki (IP adresi 192.168.0.108 olan, ancak elbette sunucunun ana bilgisayar adı da kullanılabilir) veritabanına erişir ve yedek dosyası Windows’taki C:\Data klasörüne kaydedilir:
gbak -b -user SYSDBA -pass masterkey 192.168.0.108:/db/test1.fdb c:\data\remotebackup1.fbk
Yedekleme süresi: 568 saniye
Bu komut genellikle yerel yedeklemeden çok daha yavaş olacaktır, çünkü gbak verileri uzak sunucudan okur ve kayıtları ağ üzerinden aktarır.
1.8. Service Manager ile uzak sunucudan yerel makineye daha hızlı yedekleme
Aşağıdaki komut, #1.7 bölümünde açıklanan uzak sunucudan yerel makineye geleneksel yedeklemeden daha hızlıdır.
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb stdout > C:\Data\remoteback1.fbk
Bu komut, yedeklemeyi uzak sunucuda yapmak için Service Manager’ı kullanır, ancak çıktı stdout kanalına gönderilir ve ardından yerel dosyaya yönlendirilir.
Bu komut genellikle #1.7’dekinden (Uzaktaki sunucudan yerel makineye basit yedekleme) %15-%20 daha hızlıdır, çünkü:
- yedeklemeyi uzak sunucuda Service Manager aracılığıyla gerçekleştirir, böylece tüm okuma ve sıkıştırma işlemleri en hızlı şekilde yapılır,
- ağ üzerinden yalnızca veritabanındaki verilerden daha küçük boyutlu olan sonuç yedek dosyasını aktarır.
Ancak bu komutla ayrıntılı modu etkinleştirmek ve ayrıntılı çıktıyı günlük dosyasına kaydetmek mümkün değildir.
Yedekleme süresi: 473 saniye
1.9. Service Manager kullanarak uzak sunucudaki Firebird veritabanını aynı uzak sunucuya yedekleme
Service Manager ile, uzak sunucudaki veritabanının gbak yedeklemesini çağırmak ve aynı uzak sunucuya kaydetmek mümkündür.
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb /db/back12.fbk
Bu komut, Service Manager aracılığıyla uzak sunucuda yedeklemeyi çağırır ve yedek dosyasının da aynı ağ sunucusuna kaydedilmesi talimatını verir.
Elbette, yedek konumu Firebird hizmeti tarafından erişilebilir olmalıdır (Linux’ta “firebird” kullanıcısı olarak, Windows’ta LocalSystem hesabı olarak çalışır).
1.10. Firebird 5’te (veya HQbird 2.5/3.0/4.0/5.0) çoklu iş parçacıklı yedekleme ile Firebird veritabanını 6 kat daha hızlı yedekleme
Firebird gbak’ın yedekleme performansından hâlâ memnun değilseniz, Firebird 5’e geçmeyi düşünün (veya diğer sürümler için kurumsal Firebird dağıtımını kullanın: HQbird).
Çoklu iş parçacıklı yedeklemeyi destekler ve bu da gbak ile 6 kata kadar daha hızlı yedekleme işlemlerini mümkün kılar.
gbak -b -par 8 -se localhost:service_mgr -g C:\Data\testbigdb1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Gördüğünüz gibi, gbak’ın yedekleme oluşturmak için 8 iş parçacığı kullanmasını sağlayan yeni bir -par 8 parametresi vardır.
HQbird bakım görevlerini (sweep, yedekleme, geri yükleme) çok daha hızlı gerçekleştirir (aşağıdaki şekildeki sonuçlar elbette farklı bir veritabanından alınmıştır):

2. Gbak aracıyla geri yükleme
Yukarıdaki komutlardan biriyle oluşturulmuş backup1.fbk yedek dosyamız var ve bunu hızlı ve verimli bir şekilde geri yüklememiz gerekiyor.
Dosyanın Windows durumunda C:\Data\backup1.fbk veya Linux durumunda /db/backup1.fbk olduğunu varsayalım.
2.1. En basit geri yükleme komutu
Windows’ta
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux’ta
gbak -c /db/backup1.fbk /db/new1.fdb -user SYSDBA -pass masterkey
Öncelikle, lütfen gbak -c’nin veritabanı dosyasının üzerine yazmadığını unutmayın; C:\data\new1.fdb veya /db/new1.fdb dosyası zaten varsa, gbak veritabanının zaten mevcut olduğunu belirten bir hata döndürecektir.
Ayrıca, bu komut 2.5/3.0+ ve Windows/Linux’ta aslında çok farklı çalışır.
Linux’ta bu komut, oluşturulan veritabanına gömülü erişimi kullanır (elbette firebird.conf dosyasında Firebird sağlayıcılarının sırasını değiştirmediyseniz) hem 3.0 hem de 2.5 için.
Windows’ta, Firebird 3.0’da varsayılan sağlayıcı sırasıyla gömülü erişim, 2.5’te ise XNET olacaktır.
Ardından, bu komut gbak’ı başlatan kullanıcının haklarıyla bir dosya oluşturur; bu özellikle Linux’ta önemlidir - bu gbak’ı root altında çalıştırırsanız, veritabanı dosyasının sahibi root olur ve “firebird” kullanıcısı altında çalışan Firebird işlemi geri yüklenen dosyaya erişemez.
Linux kullanıcıları için not
Birçok kişi, sahipliği “düzeltmek” için herkesin geri yüklenen veritabanına erişmesine izin verir, yani “chmod 777 database” gibi bir şey uygular, ancak bu çok güvensizdir; doğru yol, veritabanının sahibini aşağıdaki komutla firebird olarak değiştirmektir:
chown firebird /db/new1.fdb
Genel olarak, bu komut üretim dışı veritabanlarının (test veya geliştirme için kullanılan) basit geri yüklenmesi için yeterince iyidir.
Geri yükleme süresi: 275 saniye
2.2. localhost bağlantı dizesiyle geri yükleme
En evrensel ancak en hızlı olmayan geri yükleme seçeneği şudur:
Windows
gbak -c C:\Data\backup1.fbk localhost:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
Standart olmayan port
Firebird standart olmayan bir portta çalışıyorsa, örneğin 3051, geri yükleme komutunda belirtilebilir:
Windows
gbak -c C:\Data\backup1.fbk localhost/3051:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost/3051:/db/new1.fdb -user SYSDBA -pass masterkey
Geri yükleme süresi: 1225 saniye
2.3. Windows’ta XNET ile geri yükleme
Geri yüklemeyi biraz hızlandırmak için Windows’ta XNET kullanabiliriz (Firebird 3.0 ve üzeri için):
gbak -c C:\Data\backup1.fbk xnet://C:\Data\New2.fdb -user SYSDBA -pass masterkey
Firebird 2.5’te Windows’ta, yalnızca bir Firebird örneği çalışıyorsa basit komut satırıyla XNET erişimi kullanılacaktır:
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Geri yükleme süresi: 585 saniye
2.4. Service Manager ile daha hızlı geri yükleme
Ve geri yüklemenin en hızlı yolu Service Manager kullanmaktır.
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
-se anahtarıyla, localhost adresinde Service Manager’ı çağırır ve Firebird motorunun içinde geri yükleme kodunu gerçekleştirmesini söyleriz.
Geri yükleme Service Manager tarafından yapıldığında, oluşturulan veritabanı dosyası çalışan Firebird örneğinin (işleminin) hesabına ait olacaktır - Linux’ta “firebird” ve Windows’ta LocalSystem’dir.
Geri yükleme süresi: 244 saniye
2.5. Önerilmeyen anahtar
Bir noktada aşağıdaki anahtarı kullanma isteği duyabilirsiniz:
-R(ECREATE_DATABASE) [O(VERWRITE)] yedek dosyasından veritabanı oluştur (veya OVERWRITE kullanılırsa değiştir) (geri yükleme)
mevcut veritabanını yenisiyle değiştirmeye zorlamak için.
Deneyimlerimize göre, bu anahtar üretim veritabanını yanlışlıkla üzerine yazma olasılığını büyük ölçüde artırır.
Veritabanını her seferinde yeni bir adla geri yüklemenizi ve yeniden adlandırmanızı ve eski veritabanını açıkça silmenizi şiddetle öneririz.
Bu anahtarla komut örneği bile vermeyeceğiz.
2.6. Takma ad kullanarak veritabanını geri yükleme
Veritabanını, databases.conf dosyasında (Firebird 2.5’te aliases.conf) bildirilen takma adı kullanarak geri yüklemek mümkündür.
Örneğin, aşağıdaki bildirime sahibiz:
restdb=c:\Data\newrest1.fdb #Windows
restdb=/db/newrest1.fdb #Linux
Böylece yedeği takma ad tarafından belirtilen yola geri yüklemek için aşağıdaki komutu çalıştırabiliriz.
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk restdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk restdb -user SYSDBA -pass masterkey
2.7. Yerel yedeği uzak sunucuya geri yükleme
Yerel yedek dosyasını uzak Firebird sunucusuna geri yüklemek mümkündür.
Bu örnekte, Windows’ta saklanan yedek dosyayı Linux sunucusuna (IP adresi 102.168.0.108) geri yüklüyoruz:
gbak -c C:\Data\backup1.fbk 192.168.0.108:/db/newdb1.fdb -user SYSDBA -pass masterkey
Geri yükleme süresi: 7009 saniye
Fark etmiş olabileceğiniz gibi, uzak geri yükleme işlemi çok yavaş çalışıyor; bunu Service Manager ile hızlandırabilir miyiz?
2.8. Service Manager ile yerel yedeği uzak sunucuya geri yükleme
Service Manager ile yerel yedeği uzak sunucuda geri yüklemek için stdin giriş akışıyla bir numara yapmak gerekir:
gbak -c -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey stdin /db/new3.fdb < C:\Data\backup1.fbk
Bu komut, uzak sunucuda standart giriş stdin’i yedek kaynağı olarak kullanarak geri yüklemeyi çağırır - ve komutun < C:\Data\backup1.fbk bölümünü kullanarak girişi sağlar.
Biraz zor görünüyor mu? Ancak uzak sunucuya geri yükleme için gbak performansını 10 kat artırmanın kolay bir yoludur!
Geri yükleme süresi: 450 saniye
2.9. Son derece uzun tabloları geri yükleme
Toplam satır sayısı 2 milyardan fazla olan gerçekten büyük bir veritabanınız varsa, bazı iç taşmaları önlemek için her tabloyu ayrı bir işlemde geri yüklemek üzere -o[ne_at_a_time] anahtarını belirtmek gerekir.
gbak -c -se localhost:service_mgr -one C:\Data\backup1.fbk C:\data\new44.fdb -user SYSDBA -pass masterkey
3. Yedekleme ve geri yükleme işlemlerini ayarlama ve günlüğe kaydetme
3.1. Ayrıntılı çıktılı Gbak
Varsayılan olarak gbak çok sessiz bir araçtır; başarılı yürütme durumunda hiçbir şey döndürmez. Ayrıntılı hale getirmek için -v[erify] anahtarını ekleyebiliriz:
gbak -b -se localhost/3050:service_mgr -g mydb1 c:\Data\backup1.fbk -v -user SYSDBA -pass masterkey
Sonuç olarak daha fazla ayrıntı olacaktır. Küçük ama can sıkıcı bir sorun, çıktıyı konsola yazdırmanın ayrıntılı yedeklemeyi sessiz sürümden önemli ölçüde yavaşlatabilmesidir; bu nedenle günlüğü -y logfile anahtarıyla dosyaya kaydetmek iyi bir fikir olacaktır:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Not: gbak mevcut günlük dosyasının üzerine yazmaz! Bu örnekte zaten C:\data\backuplog1.txt dosyanız varsa, yedekleme hata verecektir (bkz. Ek A’da #3).
Not 2: yedekleme veya geri yükleme sırasında işlenen kayıt sayısını raporlama aralığını kontrol etmek için -verbint seçeneği vardır.
3.2. Ayrıntılı çıktıya performans istatistikleri ekleme
Yedekleme ve geri yükleme için gbak ayrıntılı çıktısında şu mesajları görebiliriz:
gbak: COUNTRY tablosu için veri yazılıyor
gbak:16 kayıt yazıldı
her tablo ve diğer veritabanı nesneleri için.
Hangi tabloların/nesnelerin zamanın çoğunu aldığını bulmak ilginç, değil mi?
Bunun için -st(atistics) anahtarını kullanmak gerekir:
-ST(ATISTICS) TDRW istatistikleri göster:
T başlangıçtan itibaren süre
D delta süre
R sayfa okumaları
W sayfa yazmaları
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -st tdrw c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Uygulandığında, günlüğe aşağıdaki sütunları ekleyecektir:
gbak: time delta reads writes
böylece her satırda harcanan süreyi ve G/Ç’yi görebileceğiz.
3.3. Tabloları yedeklemeden ve/veya geri yüklemekten hariç tutma
Bazı tabloların yedeklemeden hariç tutulabileceğini düşünüyorsanız (iyi bir örnek çok uzun bir günlük tablosudur), bunları parametre olarak normal ifadeyle SK[IP_DATA] parametresinde belirtebilirsiniz.
Aşağıdaki örnekte, COUNTRY ve JOB tablolarındaki verileri yedekleme dışında bırakıyoruz:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -SKIP_D ‘(COUNTRY|JOB)’ c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Ve aşağıdaki örnekte, geri yükleme sırasında CLIENT tablosunu hariç tutuyoruz:
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new33.fdb -user SYSDBA -pass masterkey -SKIP_D "CLIENT"
Lütfen SKIP_DATA parametresinin tek bir parametre olarak iletilmesi gerektiğini unutmayın, bu nedenle tırnak işaretleri içinde olmalıdır!
Linux’ta tırnaklar tek, Windows’ta çift olmalıdır.
Yedekleme ve/veya geri yüklemeden tablo hariç tutarken alınacak önlemler
Kullanmadan önce normal ifade koşulunu aşağıdaki sorgu ile kontrol etmenizi şiddetle öneririz - filtre koşuluna karşılık gelen tabloların listesini döndürecektir (sorguda tırnaklar her zaman tektir):
SQL> SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE TRIM(RDB$RELATION_NAME) SIMILAR TO '(COUNTRY|JOB)';
RDB$RELATION_NAME
===============================
COUNTRY
JOB
Lütfen, yedekleme veya geri yüklemeden hariç tutulan tabloların mevcut kısıtlamalardan (Yabancı Anahtarlar) bağımsız olarak hariç tutulacağını unutmayın; bu nedenle, bu tür bir hariç tutmayı dikkatli planlamadıysanız, geri yükleme işlemi sırasında “Cannot commit foreign key index” hatasını almanız çok kolaydır.
3.4. Yedekleme veya geri yükleme için şifreyi dosyadan alma
Komutlarınızı gören herkesin şifreyi görmesi fikrinin büyük bir hayranı değilseniz, şu anahtarı beğeneceksiniz: -fetch passwordfile
C:\Data\passfile.txt içinde şifreyi içeren dosyayı oluşturalım ve kullanalım (burada çok basit bir gömülü varyant kullanıyoruz, elbette anahtar Service Manager ile de çalışacaktır):
gbak -b c:\Data\test1.fdb c:\Data\backup5.fbk -user SYSDBA -fetch C:\Data\passfile.txt
2 pratik faydası vardır:
- Şifreyi tek bir dosyada saklarsak, tüm komut dosyalarımızın her zaman güncel şifreyi kullanmasını sağlayabiliriz.
- Şifreyi her komut dosyasında ifşa etmeyiz.
4. Tek adımda yedekleme-geri yükleme
Çoğu zaman yedeklemenin amacı, örneğin veritabanı için yeni sayfa boyutu uygulamak veya mevcut veritabanını 2.5’ten 3.0’a geçirmek için yeni ve taze bir veritabanı elde etmek amacıyla anında geri yükleme yapmaktır.
Bu durumda, ara yedekleme dosyası oluşturmayı atlamak, boş alan gereksinimlerini azaltmak ve süreci hızlandırmak için standart girdi ve çıktıyı ilgili komutlar için kaynak olarak kullanarak tek bir komutla yedekleme-geri yükleme yapmak mümkündür.
Komut aşağıdaki gibidir:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout | gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
Özünde, burada | sembolüyle birleştirilmiş 2 komut yapıyoruz,
ilki stdout’a yedekleme için:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout
ve ikincisi, stdin’den geri yükleme için:
gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
Bu komut, aynı Firebird örneğinde yedekleme-geri yükleme yapmanın en hızlı yoludur.
Lütfen unutmayın: 2.5’ten 3.0’a tek adımda yedekleme-geri yükleme ile veritabanlarını dönüştürmek için 2 Firebird örneği kullanmak gereklidir, ayrıntılara buradan bakın.
5. Performans özeti
Aşağıdaki şekil, test veritabanının yerel yedeklemesinin farklı yedekleme komutlarının hızı hakkında bilgi içerir:

Gördüğünüz gibi, yerel yedekleme yapmanın en hızlı yolu Service Manager (anahtar -se[rvice]) kullanmak ve çöp toplamayı engellemektir (anahtar -ig).
Uzak sunucudan yerel makineye yedekleme için Service Manager da en iyi seçenektir:

Geri yükleme performansındaki durum benzerdir: Service Manager geri yüklemenin en hızlı yoludur.

Oldukça nadir görülen durum olan, yerel yedekten uzak sunucuya geri yükleme yapıldığında, stdin hilesi ile Service Manager kullanmak tek uygun seçenektir:

VM ve Firebird Yedeklemeleri Hakkında Çok Sık Sorulan Soru
Her şeyi yedeklemeyi vaat eden popüler yedekleme araçları varken neden Firebird yedekleme araçlarını kullanmalıyım?
Ya da, Sanal Makinenin tam görüntüsünü yedekliyorum, neden Firebird veritabanının yedeklenmesiyle ilgileneyim?
Cevap burada.
Ek A. Yedekleme/geri yükleme sırasında oluşan hatalar
- gbak’ı parametresiz veya veritabanının sahibi olmayan/SYSDBA olmayan bir kullanıcıyla çalıştırma girişimi aşağıdaki hataya yol açacaktır:
gbak: ERROR:Unable to perform operation. You must be either SYSDBA or owner of the database
gbak:Exiting before completion due to errors
- Yanlış şifre belirtirseniz, aşağıdaki hata oluşacaktır:
gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
gbak:Exiting before completion due to errors
- Ayrıntılı günlük hedefi olarak mevcut bir dosya belirtildiğinde hata oluşur:
gbak: ERROR:cannot open status and error output file C:\data\backuplog1.txt
gbak: ERROR: Exiting before completion due to errors
gbak:Exiting before completion due to errors
- gbak geri yükleme komutunda hedef olarak mevcut bir veritabanı belirtilirse hata oluşur:
gbak: ERROR:database C:\data\new1.fdb already exists. To replace it, use the -REP switch
gbak:Exiting before completion due to errors
- gbak, yazma izninin yeterli olmadığı bir konuma yedek yazmaya çalıştığında hata oluşur.
gbak: ERROR:cannot open file /db/test1.fbk
gbak:Exiting before completion due to errors
- gbak, izni olmayan bir dosyaya erişmeye çalıştığında - örneğin, dosyanın Linux’ta “firebird” kullanıcısından farklı bir sahibi varsa:
gbak: ERROR:no permission for read-write access to database /db/test1.fdb
gbak: ERROR: IProvider::attachDatabase failed when loading mapping cache
gbak:Exiting before completion due to errors
- Ayrıntılı çıktı kullanma girişimi:
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -user SYSDBA -pass masterkey /db/test1.fdb stdout >
c:\data\rembackup2.fbk
gbak: ERROR:standard output is not supported when using split operation or in verbose mode
gbak: ERROR: Exiting before completion due to errors
gbak:Exiting before completion due to errors
- Uzak sunucuda Service Manager ile ayrıntılı modda ve günlük dosyasına kaydederek yedekleme yapma girişimi.
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -y lg1.txt -user SYSDBA -pass masterkey /db/test1.f
db stdout > c:\data\rembackup2.fbk
gbak: ERROR:Invalid clumplet buffer structure: string length doesn't match with clumplet
gbak:Exiting before completion due to errors
- Yedekleme bir nedenle başarısız olduğunda tek adımda yedekleme-geri yüklemede hata:
gbak: ERROR:No request from user for stdin data
gbak:Exiting before completion due to errors
- gbak’a yedek olmayan bir şey aktarmaya çalışıyorsanız:
gbak: ERROR:unavailable database
gbak:Exiting before completion due to errors
gbak: ERROR:expected backup description record
gbak:Exiting before completion due to errors
- Yanlış sayfaya sahip bozuk bir veritabanı dosyasının yedeklenmesi aşağıdaki hatayı bildirecektir (sayı ve veritabanı dosyası elbette farklı olacaktır):
gbak: ERROR:database file appears corrupt (E:\DATABASE1.FDB)
gbak: ERROR: wrong page type
gbak: ERROR: page 9294588 is of wrong type (expected 8, found 0)
gbak: ERROR:gds_$get_segment failed
gbak:Exiting before completion due to errors
gbak: ERROR:Unexpected I/O error while reading from backup file
gbak:Exiting before completion due to errors
İletişim
Herhangi bir sorunuz için lütfen bizimle iletişime geçmekten çekinmeyin veya hataları ya da yazım hatalarını bildirin: [email protected]