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

IBSurgeon kütüphanesi

Gbak Yedekleme-Geri Yükleme Hızlı Kılavuzu

gbak nedir?

1. Gbak ile Yedeklemede Uzmanlaşmak

1.0 Hazırlık

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

1.10. Firebird 5 ile Firebird veritabanını 6 kat daha hızlı yedekleme (veya 2.5/3.0/4.0/5.0’da HQbird)

2. Gbak aracıyla Geri Yükleme

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.5. Önerilmeyen anahtar

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.1. Ayrıntılı çıktı ile gbak

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

5. Performans özeti

VM ve Firebird Yedeklemeleri Hakkında Çok Sık Sorulan Sorular

Ek A. Yedekleme/geri yükleme sırasında hatalar

İletişim

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).

Code
mkdir /db
chown firebird -R /db

1.1 gbak komutuyla en basit Firebird yedeklemesi

Windows

Code
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
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:

Code
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:

Code
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

Code
gbak -b localhost:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
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

Code
gbak -b localhost/3051:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
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

Code
gbak -b -se localhost:service_mgr c:\Data\test1.fdb  c:\Data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
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:

Code
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:

Code
mydb1=c:\Data\test1.fdb #Windows

veya

Code
mydb1=/db/test1.fdb  #linux

ve ardından komutumuzda kullanın:

Windows

Code
gbak -b -se localhost:service_mgr mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
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

Code
 -G(ARBAGE_COLLECT)    çöp toplamayı engelle

Yani, yedekleme komutu aşağıdaki gibi olacaktır

Windows

Code
gbak -b -se localhost:service_mgr -g mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
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:

Code
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.

Code
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ü:

  1. 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,
  2. 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.

Code
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.

Code
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

Code
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey

Linux’ta

Code
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:

Code
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

Code
gbak -c C:\Data\backup1.fbk localhost:C:\data\new1.fdb -user SYSDBA -pass masterkey

Linux

Code
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

Code
gbak -c C:\Data\backup1.fbk localhost/3051:C:\data\new1.fdb -user SYSDBA -pass masterkey

Linux

Code
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):

Code
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:

Code
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

Code
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey

Linux

Code
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:

Code
   -R(ECREATE_DATABASE) [O(VERWRITE)] yedek dosyasından veritabanı oluştur (veya OVERWRITE kullanılırsa değiştir) (geri yükleme)
Code
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:

Code
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

Code
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk restdb -user SYSDBA -pass masterkey

Linux

Code
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:

Code
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:

Code
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.

Code
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:

Code
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:

Code
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:

Code
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:

Code
 -ST(ATISTICS) TDRW    istatistikleri göster:
     T                 başlangıçtan itibaren süre
     D                 delta süre
     R                 sayfa okumaları
     W                 sayfa yazmaları
Code
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:

Code
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:

Code
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:

Code
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):

Code
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):

Code
gbak -b c:\Data\test1.fdb c:\Data\backup5.fbk -user SYSDBA -fetch C:\Data\passfile.txt

2 pratik faydası vardır:

  1. Şifreyi tek bir dosyada saklarsak, tüm komut dosyalarımızın her zaman güncel şifreyi kullanmasını sağlayabiliriz.
  2. Ş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:

Code
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:

Code
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:

Code
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

  1. 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:
Code
gbak: ERROR:Unable to perform operation.  You must be either SYSDBA or owner of the database
gbak:Exiting before completion due to errors
  1. Yanlış şifre belirtirseniz, aşağıdaki hata oluşacaktır:
Code
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
  1. Ayrıntılı günlük hedefi olarak mevcut bir dosya belirtildiğinde hata oluşur:
Code
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
  1. gbak geri yükleme komutunda hedef olarak mevcut bir veritabanı belirtilirse hata oluşur:
Code
gbak: ERROR:database C:\data\new1.fdb already exists.  To replace it, use the -REP switch
gbak:Exiting before completion due to errors
  1. gbak, yazma izninin yeterli olmadığı bir konuma yedek yazmaya çalıştığında hata oluşur.
Code
gbak: ERROR:cannot open file  /db/test1.fbk
gbak:Exiting before completion due to errors
  1. 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:
Code
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
  1. Ayrıntılı çıktı kullanma girişimi:
Code
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
  1. Uzak sunucuda Service Manager ile ayrıntılı modda ve günlük dosyasına kaydederek yedekleme yapma girişimi.
Code
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
  1. Yedekleme bir nedenle başarısız olduğunda tek adımda yedekleme-geri yüklemede hata:
Code
gbak: ERROR:No request from user for stdin data
gbak:Exiting before completion due to errors
  1. gbak’a yedek olmayan bir şey aktarmaya çalışıyorsanız:
Code
gbak: ERROR:unavailable database
gbak:Exiting before completion due to errors
gbak: ERROR:expected backup description record
gbak:Exiting before completion due to errors
  1. Yanlış sayfaya sahip bozuk bir veritabanı dosyasının yedeklenmesi aşağıdaki hatayı bildirecektir (sayı ve veritabanı dosyası elbette farklı olacaktır):
Code
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]