このページは機械翻訳されています。英語の原文をお読みください。 English

IBSurgeon ライブラリ

Gbakバックアップ・リストアのクイックガイド

gbakとは?

1. gbakを使ったバックアップの習得

1.0 準備

1.1 gbakコマンドによる最もシンプルなFirebirdバックアップ

1.2 Windowsでオンライン実行可能なgbakによるローカルバックアップ

1.3 TCP/IP接続文字列を使用したgbakバックアップ

1.4 Service Managerを使用した高速なgbakバックアップ

1.5 Service Managerとガベージコレクション無効化による最速のgbakバックアップ

1.6 ネットワーク共有またはネットワーク場所へのバックアップ

1.7 リモートサーバーからローカルマシンへのシンプルなバックアップ

1.8 Service Managerを使用したリモートサーバーからローカルマシンへの高速バックアップ

1.9 Service Managerを使用したリモートサーバー上のFirebirdデータベースの同じリモートサーバーへのバックアップ

1.10 Firebird 5(またはHQbird 2.5/3.0/4.0/5.0)でFirebirdデータベースを6倍高速にバックアップ

2. Gbakツールによるリストア

2.1 最もシンプルなリストアコマンド

2.2 localhost接続文字列を使用したリストア

2.3 WindowsでのXNETを使用したリストア

2.4 Service Managerを使用した高速リストア

2.5 推奨されないスイッチ

2.6 エイリアスを使用したデータベースのリストア

2.7 ローカルバックアップのリモートサーバーへのリストア

2.8 Service Managerを使用したローカルバックアップのリモートサーバーへのリストア

2.9 非常に長いテーブルのリストア

3. バックアップとリストアの調整とロギング

3.1 詳細出力付きのgbak

3.2 詳細出力へのパフォーマンス統計の追加

3.3 バックアップおよび/またはリストアからのテーブル除外

3.4 バックアップまたはリストアのパスワードをファイルから取得

4. ワンステップのバックアップ-リストア

5. パフォーマンスのまとめ

VMとFirebirdバックアップに関する非常によくある質問

付録A. バックアップ/リストア中のエラー

連絡先

gbakとは?

Gbakは、Firebirdの標準コマンドラインツールです(公式ドキュメントはこちら)。1)データベースのフルバックアップ(データベース内のすべてのレコードを読み取り、バックアップファイルに保存する)、2)バックアップの新しいデータベースへのリストア、という2つの機能を実行するように設計されています。

他のRDBMSの経験がある開発者や管理者にとって、「バックアップ」という用語は少し混乱を招くかもしれません。なぜなら、gbakはデータベースの正確なコピーではなく、データのみを含む非データベース形式のファイル(インデックスは宣言として保存されます)を生成するからです。

gbakバックアップファイルからデータベースを作成するには、gbakによるリストアプロセスを実行する必要があります。

1. gbakを使ったバックアップの習得

1.0. 準備

フォルダC:\dataを作成し、そこにデータベースを配置しましょう。Firebird OLTP-EMULテストから5GBのデータベースを使用しますが、もちろん独自のデータベースを使用することもできます。

Linuxユーザーの場合 - フォルダ/dbを作成し、その所有者を「firebird」に変更して、データベースをそこにコピーします(所有者もfirebirdであることを確認してください)。

Code
mkdir /db
chown firebird -R /db

1.1 gbakコマンドによる最もシンプルなFirebirdバックアップ

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

この例では、gbakツールはローカルまたは組み込みアクセスを使用してデータベースファイルにアクセスします。

Firebird 3.0: Firebird 3.0のデフォルト設定(firebird.confのServerMode = SuperServerパラメータ)での組み込みアクセスは、データベースに排他ロックをかけようとするため、他の接続はデータベースにアクセスできなくなります(または、アクティブな接続があるためにgbakの試行が失敗します)。

Firebird 2.5: WindowsでFirebird 2.5を使用する場合、このコマンドはXNETプロトコルを通じて正常に動作します(もちろん、実行中のFirebirdインスタンスが1つだけの場合)。Linuxでは、Firebirdは組み込みアクセスを試み、それが利用できない場合は、自動的に(そして暗黙的に)TCP/IP経由での接続を試みます。(XNET、INETなどの意味がわからない場合は、Firebird接続文字列チートシートを参照してください)。

注1: このコマンドはOSユーザー(つまり、あなた)のアカウントで実行され、その権限を使用してバックアップファイルとデータベースファイルにアクセスします。

通常、Windows上のFirebirdサービスはLocalSystemアカウントで実行され、Linuxではユーザー「firebird」で実行されますが、コンソールは通常、自分のユーザーアカウントで実行されます。

このユーザーアカウントがデータベースパスまたはバックアップパスにアクセスできない場合、gbakは「Cannot open backup file」エラーで失敗します(付録Aの例、エラー#5を参照)。

注2: gbak -bはバックアップファイルを黙って上書きします。したがって、既にbackup1.fbkがある場合は、上書きされます。

注3: Linuxでは、このgbakコマンドはコンソールユーザーを所有者とするバックアップファイルを作成します。

このコマンドのバックアップ時間:120秒

1.2 Windowsでオンライン実行可能なgbakによるローカルバックアップ

このセクションはWindowsユーザーのみを対象としています! 通常、データベースへのアクティブな接続がある間にバックアップを実行する必要があるため、組み込み接続の代わりに、Firebird 3でgbak自体がデータベースファイルに排他ロックをかけるのを避けるために、ローカルプロトコル(つまりXNET)を明示的に指定する方が良いです。

Firebird 3.0の場合:

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

Firebird 2.5の場合、ローカル接続文字列を使用でき、それもXNETを使用します:

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

Linuxでは、FirebirdはWindowsのXNETのような特定のローカルプロトコルをサポートしていないため、TCP/IP接続文字列を使用する必要があります(セクション1.3を参照)。

また、XNETはFirebirdの単一インスタンスでのみ機能するため、Windowsで複数のFirebirdインスタンスを実行している場合は、INETスタイルの接続文字列を使用してターゲットサーバーインスタンスを指定する方が簡単かもしれません。

バックアップ時間:139秒

1.3 TCP/IP接続文字列を使用したgbakバックアップ

これは、オンラインバックアップを実行するための最も汎用的なgbakコマンドです。

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

この場合、データベースパスの先頭にlocalhost: を指定することで、接続はFirebirdのネットワークサブシステムを通じて行われます。

ローカルアクセスよりわずかに遅いですが、接続を受け入れる実行中のサーバーがあるすべての場合に機能します。

Firebirdの非標準ポート

Firebirdが非標準ポート(例:3050の代わりに3051)で実行されている場合、次の方法でバックアップを実行できます:

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

バックアップ時間:182秒

1.4. Service Managerを使ったgbakによる高速バックアップ

TCP/IP接続の汎用性、非標準ポートのサポート、そして高速なローカルバックアップをどう実現するか? Service Managerを使いましょう! Service Managerとは、簡単に言うと、Firebirdエンジンを介して標準ツールを実行する方法です。Service Managerの場合、データベースへのパスにサーバー名を指定する必要はなく、-seパラメータにのみ指定すればよいことに注意してください。

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

このコマンドは、-serviceスイッチを使用して、ポート3050で実行されているFirebirdインスタンスのService Managerを使用してバックアップを実行することを指定しています。

この場合、バックアップはFirebirdプロセス内で直接実行され(gbakコードのコピーを持っています)、プロセス内通信ははるかに高速であるため、この場合のバックアップは大幅に高速になります。

Firebirdが非標準ポート(例:3051)で実行されている場合、コマンドは次のようになります:

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

注記: Firebird 2.5およびFirebird 3.0.0-3.0.5(3.0.6でのみ解除)には重大な制限があります:コマンドライン(データベースとバックアップのすべてのパラメータとパス)は256文字未満である必要があります。

この制限に達した場合(例えば、データベースとバックアップのパスが長いため)、databases.conf(3.0以降)またはaliases.conf(2.5)でデータベースのエイリアスを宣言できます:

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

または

Code
mydb1=/db/test1.fdb  #linux

そして、それをコマンドで使用します:

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

バックアップ時間: 115秒

1.5. ガベージコレクションを無効化したgbakによる最速バックアップ

バックアップをさらに高速化するために、-gスイッチを追加しましょう。

Code
 -G(ARBAGE_COLLECT)    ガベージコレクションを無効化

したがって、バックアップコマンドは次のようになります:

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スイッチは、Firebirdエンジンにデータベースファイル内のバックアッププロセスに対するガベージコレクションを無効化するよう強制します。

これは、ガベージレコードバージョンがバックアップファイルに保存されるという意味ではなく、サーバーがバックアップ中にデータベース内の既存のガベージをクリーンアップしようとしないことを意味し、バックアップが高速になります。

このスイッチの使用を強くお勧めします。なぜなら、ガベージコレクションとそれに伴うクリーンアップはスイープ(gfix -sweepまたは自動スイープ)によって行われるべきであり、gbakをスイープの代替手段と見なすべきではないと考えるからです。

バックアップ時間: 105秒

1.6. ネットワーク共有またはネットワーク上の場所へのバックアップ

バックアップファイルをネットワーク共有に置く必要がある場合はどうでしょうか?

Windowsの場合

新しいFirebirdユーザーがよく混乱する点:コマンドプロンプトからコマンドを実行する手動バックアップ(単純なgbak -b)はネットワーク共有で正常に機能しますが、-se localhost:service_mgrを使用した高速バージョンのgbakは機能しません。

その理由は、Windows上のFirebirdがLocalSystemアカウントで実行されており、このアカウントにはネットワーク上の場所へのアクセス権がないためです(これらのネットワーク共有が「Everyone」グループのアクセスを設定している場合を除きますが、これはランサムウェアの時代において非常に危険です)。

解決策は、Windows上のFirebirdサービスを、ネットワーク共有にアクセスするのに十分な権限と、同時にローカルデータベースファイルおよびC:\ProgramData\Firebird内のシステムファイルにアクセスするのに十分な権限を持つアカウントで実行することです。また、firebird.confでRestrictAccessパラメータを設定することも良いアイデアです。

Linuxの場合

Linux上のFirebirdは「firebird」アカウントで実行されるため、ネットワーク共有をユーザー「firebird」にマッピングしてマウントし、Firebirdサービスがローカルドライブと同じようにネットワーク上の場所にアクセスできるようにします。

1.7. リモートサーバーからローカルマシンへの単純なバックアップ

リモートサーバーからローカルマシンへデータベースをバックアップすることが可能です。

以下のコマンド例はWindowsコンピュータで開始され、Linuxサーバー(IPアドレス192.168.0.108、もちろんサーバーのホスト名も使用可能)上のデータベースにアクセスし、バックアップファイルはWindowsのC:\Dataフォルダに保存されます:

Code
gbak -b -user SYSDBA -pass masterkey 192.168.0.108:/db/test1.fdb c:\data\remotebackup1.fbk

バックアップ時間: 568秒

このコマンドは通常、ローカルバックアップよりもはるかに遅くなります。なぜなら、gbakがリモートサーバーからデータを読み取り、ネットワーク経由でレコードを転送するためです。

1.8. Service Managerを使用したリモートサーバーからローカルへの高速バックアップ

以下のコマンドは、#1.7で説明したリモートサーバーからローカルマシンへの従来のバックアップよりも高速です。

Code
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb stdout > C:\Data\remoteback1.fbk

これはService Managerを使用してリモートサーバーでバックアップを実行しますが、出力はstdoutパイプに送信され、その後ローカルファイルにリダイレクトされます。

このコマンドは通常、#1.7(リモートサーバーからローカルへの単純なバックアップ)よりも15%〜20%高速です。その理由は以下の通りです:

  1. リモートサーバー上のService Managerを通じてバックアップを実行するため、すべての読み取りおよび圧縮操作が最速の方法で実行されます。
  2. ネットワーク経由で転送されるのは、データベース内のデータよりもサイズが小さい、結果のバックアップファイルのみです。

ただし、このコマンドでは、詳細モードを有効にして詳細な出力をログファイルに保存することはできません。

バックアップ時間: 473秒

1.9. Service Managerを使用してリモートサーバー上のFirebirdデータベースを同じリモートサーバーにバックアップ

Service Managerを使用すると、リモートサーバー上のデータベースのgbakバックアップを呼び出し、それを同じリモートサーバーに保存することも可能です。

Code
gbak -b -se  192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb /db/back12.fbk

このコマンドはService Managerを通じてリモートサーバーでバックアップを呼び出し、バックアップファイルも同じネットワークサーバーに保存するよう指示します。

もちろん、バックアップの場所はFirebirdサービスがアクセスできる必要があります(Linuxではユーザー「firebird」として実行され、WindowsではLocalSystemアカウントとして実行されます)。

1.10. Firebird 5(またはHQbird 2.5/3.0/4.0/5.0)のマルチスレッドバックアップでFirebirdデータベースを6倍高速にバックアップ

Firebird gbakのバックアップパフォーマンスにまだ満足できない場合は、Firebird 5への移行を検討してください(または他のバージョン用のエンタープライズFirebirdディストリビューション:HQbirdを使用)。

マルチスレッドバックアップをサポートしており、gbakでのバックアップ操作を最大6倍高速化できます。

Code
gbak -b -par 8  -se localhost:service_mgr -g C:\Data\testbigdb1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey

ご覧のとおり、新しいパラメータ-par 8があり、gbakがバックアップを作成するために8つのスレッドを使用するようにします。

HQbirdはメンテナンスタスク(スイープ、バックアップ、リストア)をはるかに高速に実行します(下図の結果はもちろん異なるデータベースからのものです):

2. Gbakツールによるリストア

上記のいずれかのコマンドで作成されたバックアップファイルbackup1.fbkがあり、それを高速かつ効率的にリストアする必要があります。

ファイルがWindowsの場合はC:\Data\backup1.fbk、Linuxの場合は/db/backup1.fbkにあると仮定します。

2.1. 最も単純なリストアコマンド

Windowsの場合

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

Linuxの場合

Code
gbak -c /db/backup1.fbk /db/new1.fdb -user SYSDBA -pass masterkey

まず第一に、gbak -cはデータベースファイルを上書きしないことに注意してください。C:\data\new1.fdbまたは/db/new1.fdbファイルが存在する場合、gbakはデータベースが既に存在するというエラーを返します。

では、このコマンドは実際には2.5/3.0+およびWindows/Linuxで大きく動作が異なります。

Linuxでは、このコマンドは作成されたデータベースへの埋め込みアクセスを使用します(もちろん、firebird.confでFirebirdプロバイダーの順序を変更していない場合)。これは3.0と2.5の両方に当てはまります。

Windowsでは、Firebird 3.0でプロバイダーのデフォルトの順序の場合、埋め込みアクセスになり、2.5ではXNETになります。

次に、このコマンドはgbakを起動したユーザーの権限でファイルを作成します。これは特にLinuxで重要です。rootでこのようなgbakを実行すると、データベースファイルの所有者はrootになり、「firebird」ユーザーで実行されるFirebirdプロセスは復元されたファイルにアクセスできなくなります。

Linuxユーザーへの注意

多くの人が所有権を「修正」するために、復元されたデータベースへの全員のアクセス権限を適用します。つまり、「chmod 777 database」のようなものです。しかし、これは非常に安全ではありません。正しい方法は、以下のコマンドでデータベースの所有者をfirebirdに変更することです。

Code
chown firebird /db/new1.fdb

一般的に、このコマンドは本番環境以外のデータベース(テストや開発用)の単純な復元には十分です。

復元時間: 275秒

2.2. localhost接続文字列を使用した復元

最も汎用的ですが、最速ではない復元オプションは次のとおりです。

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

非標準ポート

Firebirdが非標準ポート(例: 3051)で実行されている場合、復元コマンドで指定できます。

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

復元時間: 1225秒

2.3. WindowsでのXNETを使用した復元

復元を少し速くするために、WindowsではXNETを使用できます(Firebird 3.0以降)。

Code
gbak -c C:\Data\backup1.fbk xnet://C:\Data\New2.fdb -user SYSDBA -pass masterkey

Windows上のFirebird 2.5では、単純なコマンドラインでXNETアクセスが使用されます(Firebirdインスタンスが1つだけ実行されている場合)。

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

復元時間: 585秒

2.4. Service Managerを使用した高速復元

そして最速の復元方法はService Managerを使用することです。

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

-switch -seを使用すると、localhostアドレスでService Managerを呼び出し、Firebirdエンジン内で復元コードを実行するように指示します。

Service Managerによって復元が行われると、作成されたデータベースファイルは実行中のFirebirdインスタンス(プロセス)のアカウントが所有します。Linuxでは「firebird」、WindowsではLocalSystemです。

復元時間: 244秒

2.5. 推奨されないスイッチ

ある時点で、次のスイッチを使用したくなるかもしれません。

Code
   -R(ECREATE_DATABASE) [O(VERWRITE)] create (or replace if OVERWRITE used)                               database from backup file (restore)
Code
既存のデータベースを新しいものに強制的に置き換えるために。

私たちの経験では、このスイッチは本番データベースを誤って上書きする可能性を大幅に高めます。

毎回新しい名前でデータベースを復元し、名前を変更し、古いデータベースを明示的に削除することを強くお勧めします。

このスイッチを使用したコマンドの例は提供しません。

2.6. エイリアスを使用したデータベースの復元

databases.conf(Firebird 2.5ではaliases.conf)で宣言されたエイリアスを使用してデータベースを復元することが可能です。

例えば、次のような宣言があるとします。

Code
restdb=c:\Data\newrest1.fdb  #Windows

restdb=/db/newrest1.fdb  #Linux

したがって、次のコマンドを実行して、エイリアスで指定されたパスにバックアップを復元できます。

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. ローカルバックアップをリモートサーバーに復元

ローカルバックアップファイルをリモートのFirebirdサーバーに復元することが可能です。

この例では、Windowsに保存されているバックアップファイルをLinuxサーバー(IPアドレス102.168.0.108)に復元します。

Code
gbak  -c C:\Data\backup1.fbk 192.168.0.108:/db/newdb1.fdb -user SYSDBA -pass masterkey

復元時間: 7009秒

お気づきかもしれませんが、リモート復元プロセスは非常に遅く動作します。Service Managerで高速化できるでしょうか?

2.8. Service Managerを使用したローカルバックアップのリモートサーバーへの復元

Service Managerを使用してリモートサーバーでローカルバックアップを復元するには、stdin入力ストリームを使ったトリックが必要です。

Code
gbak -c -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey stdin /db/new3.fdb <  C:\Data\backup1.fbk

このコマンドは、リモートサーバーでバックアップのソースとして標準入力stdinを使用して復元を呼び出し、コマンドの< C:\Data\backup1.fbk部分を使用して入力を供給します。

少しトリッキーに見えますか?しかし、これはリモートサーバーへの復元でgbakのパフォーマンスを10倍向上させる簡単な方法です。

復元時間: 450秒

2.9. 非常に長いテーブルの復元

総行数が20億を超える本当に大きなデータベースがある場合、内部オーバーフローを避けるために、各テーブルを個別のトランザクションで復元するためのスイッチ-o[ne_at_a_time]を指定する必要があります。

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

3. バックアップおよび復元プロセスの調整とロギング

3.1. 詳細出力付きのGbak

デフォルトでは、gbakは非常に静かなツールで、正常に実行された場合には何も返しません。詳細出力にするには、スイッチ**-v[erify]**を追加できます。

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

その結果、より詳細な情報が表示されます。コンソールへの出力印刷により、詳細バックアップがサイレントバージョンよりも大幅に遅くなる可能性があるという小さなが厄介な問題があります。そのため、スイッチ-y logfileでログをファイルに保存することをお勧めします。

Code
gbak -b -se localhost/3050:service_mgr -g -v mydb1  c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt

: gbakは既存のログファイルを上書きしません!この例でC:\data\backuplog1.txtが既に存在する場合、バックアップはエラーを発生させます(付録Aの#3を参照)。

注2: バックアップまたは復元中に処理されたレコード数を報告する間隔を制御するオプション**-verbint**があります。

3.2. 詳細出力へのパフォーマンス統計の追加

バックアップと復元のgbak詳細出力では、次のようなメッセージが表示されます。

Code
gbak:    writing data for table COUNTRY
gbak:16 records written

すべてのテーブルおよびその他のデータベースオブジェクトについて。

どのテーブル/オブジェクトが最も時間を消費しているかを把握するのは興味深いですよね?

このためには、スイッチ**-st(atistics)**を使用する必要があります。

Code
 -ST(ATISTICS) TDRW    show statistics:
     T                 time from start
     D                 delta time
     R                 page reads
     W                 page writes
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

適用すると、ログに次の列が追加されます。

Code
gbak: time   delta  reads  writes

各行に費やされた時間とIOを確認できるようになります。

3.3. バックアップおよび/または復元からテーブルを除外

一部のテーブルをバックアップから除外できると考えられる場合(非常に長いログテーブルは良い例です)、パラメータSK[IP_DATA]で正規表現をパラメータとして指定できます。

以下は、バックアップからテーブルCOUNTRYとJOBのデータを除外する例です:

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

そして、以下の例では、リストアからテーブルCLIENTを除外します:

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

SKIP_DATAへのパラメータは単一のパラメータとして渡す必要があるため、引用符で囲む必要があることに注意してください!

Linuxでは引用符はシングルクォート、Windowsではダブルクォートを使用します。


バックアップおよび/またはリストアからテーブルを除外する際の注意事項

使用前に、以下のクエリで正規表現条件を確認することを強くお勧めします。これにより、フィルタ条件に一致するテーブルのリストが返されます(クエリ内の引用符は常にシングルクォートです):

Code
SQL> SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE TRIM(RDB$RELATION_NAME) SIMILAR TO '(COUNTRY|JOB)';

RDB$RELATION_NAME
===============================
COUNTRY
JOB

バックアップまたはリストアからテーブルが除外される際、既存の制約(外部キー)に関係なく除外されることに注意してください。そのため、このような除外を慎重に計画していない場合、リストア処理中に「Cannot commit foreign key index」というエラーが発生しやすくなります。

3.4. バックアップまたはリストア用のパスワードをファイルから取得する

コマンドを見た人全員にパスワードを公開することに抵抗がある場合は、次のスイッチが便利です:-fetch passwordfile

C:\Data\passfile.txtにパスワードを保存したファイルを作成し、それを使用しましょう(ここでは非常にシンプルな組み込みバリアントを使用していますが、もちろんこのスイッチはService Managerでも動作します):

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

これには2つの実用的な利点があります:

  1. パスワードを単一のファイルに保存することで、すべてのコマンドファイルが常に最新のパスワードを使用することを保証できます。
  2. すべてのコマンドファイルにパスワードを公開する必要がありません。

4. ワンステップのバックアップ-リストア

バックアップの目的が、即時のリストアを実行して新しいデータベースを取得することである場合がよくあります。例えば、データベースに新しいページサイズを適用したり、既存のデータベースを2.5から3.0に移行したりする場合です。

この場合、標準入力と標準出力を各コマンドのソースとして使用し、単一のコマンドでバックアップ-リストアを実行することが可能です。これにより、中間バックアップファイルの作成を回避し、空き容量の要件を減らし、プロセスを高速化できます。

コマンドは次のとおりです:

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

本質的には、ここでは|記号で結合された2つのコマンドを実行しています。

1つ目はstdoutへのバックアップ:

Code
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout

2つ目はstdinからのリストア:

Code
gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb

このコマンドは、同じFirebirdインスタンス上でバックアップ-リストアを実行する最速の方法です。

注意:ワンステップのバックアップ-リストアでデータベースを2.5から3.0に変換するには、2つのFirebirdインスタンスを使用する必要があります。詳細はこちらをご覧ください

5. パフォーマンスの概要

次の図には、テストデータベースのローカルバックアップにおけるさまざまなバックアップコマンドの速度に関する情報が含まれています:

ご覧のとおり、ローカルバックアップを実行する最速の方法は、Service Manager(-se[rvice]スイッチ)を使用し、ガベージコレクションを無効化する(-igスイッチ)ことです。

リモートサーバーからローカルマシンへのバックアップの場合も、Service Managerが最適なオプションです:

リストアのパフォーマンスも同様の状況です:Service Managerがリストアの最速の方法です。

かなりまれなケースですが、ローカルバックアップからリモートサーバーへのリストアを行う場合、stdinトリックを使用したService Managerが唯一の実行可能な選択肢です:

VMとFirebirdバックアップに関する非常によくある質問

すべてをバックアップすると約束する一般的なバックアップツールが利用可能なのに、なぜFirebirdバックアップツールを使用する必要があるのですか?

または、仮想マシンの完全なイメージをバックアップしているのに、なぜFirebirdデータベースのバックアップについて気にする必要があるのですか?

答えはこちらにあります。

付録A. バックアップ/リストア中のエラー

  1. パラメータなしでgbakを実行しようとした場合、またはデータベースの非所有者ユーザー/非SYSDBAで実行しようとした場合、次のエラーが発生します:
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. 誤ったパスワードを指定した場合、次のエラーが発生します:
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. 既存のファイルが詳細ログの出力先として指定された場合にエラーが発生します:
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のリストアコマンドで既存のデータベースが出力先として指定された場合にエラーが発生します:
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が書き込み権限のない場所にバックアップを書き込もうとした場合にエラーが発生します:
Code
gbak: ERROR:cannot open file  /db/test1.fbk
gbak:Exiting before completion due to errors
  1. gbakがアクセス権限のないファイルにアクセスしようとした場合 - 例えば、Linuxでファイルの所有者がユーザー「firebird」ではない場合:
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. 詳細出力を使用しようとした場合:
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. リモートサーバー上のService Managerで詳細出力を有効にしてログファイルに保存しながらバックアップを実行しようとした場合:
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. 何らかの理由でバックアップが失敗した場合のワンステップのバックアップ-リストアでのエラー:
Code
gbak: ERROR:No request from user for stdin data
gbak:Exiting before completion due to errors
  1. gbakにバックアップ以外のファイルを渡そうとした場合:
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. 誤ったページを含む破損したデータベースファイルのバックアップでは、次のエラーが報告されます(番号とデータベースファイルはもちろん異なります):
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:エラーにより完了前に終了します

Code

## 連絡先

ご質問がある場合や、エラーや誤字を報告したい場合は、お気軽にご連絡ください:[email protected]