5

私はデータベースプログラミングに比較的慣れていません。IBPPでfirebird 2.5を使用しています。サンプルの firebird データベースを使用するアプリケーションが少なくとも 2 つあります。埋め込まれた亜種 (fbembedded.dll、icudt30.dll、icuc30.dll) と接続したいのは、それが顧客の PC 上のホスト アプリケーションになるからです。データベースからデータを読み取る簡単なテスト アプリケーションを作成し、このアプリケーションを同時に 3 回起動しました。すべてが機能しました。

しかし、これが常に機能するかどうか、およびデータが破損する危険なしに安定して機能するかどうかはわかりません。ビューア ibexpert を使用してデータベースに接続すると、テスト アプリケーションがデータベースに接続できないためです。さらに、ドキュメント sais ( firebirdEmbedded ):

複数の埋め込みサーバーを同時に実行することができ、複数のアプリを同じ埋め込みサーバーに接続することができます。通常のサーバーがすでに稼働していることも問題ではありません。 ただし、組み込みサーバーは、接続が成功した後、独自の排他的使用のためにデータベース ファイルをロックします。これは、複数の埋め込みサーバー プロセスから同時に (または、埋め込みサーバーがファイルをロックすると、他のサーバーから) 同じデータベースにアクセスできないことを意味します。

ドキュメントは正しいですか?私のサンプル アプリケーションは反対のことを示しているようです。しばらく前に PC に firebird スーパーサーバーをインストールしましたが、これをテストする前にアンインストールしました。

4

1 に答える 1

5

参照するドキュメントは、Firebird 2.0 または 2.1 に基づいています。Windows 上の Firebird Embedded の「サーバー」アーキテクチャは、Firebird 2.5 で変更されました。Firebird 2.5 より前は、Windows 上の Firebird Embedded は SuperServer として動作しました。つまり、データベース ファイルへの排他的アクセスが必要でした。

Firebird 2.5 以降、Windows 上の Firebird Embedded は SuperClassic サーバー モデルのように動作します。つまり、データベース ファイルへの共有アクセスを使用し、複数の Firebird Embedded アプリケーションと、Classic または SuperClassic サーバー モデルの Firebird サーバーから同じデータベースにアクセスできます。 (SuperServer ではありません)同じマシンで実行されている場合。この変更の欠点は、埋め込みアプリケーションが共有データベース ロックファイル (C:\ProgramData\Firebird 内) を作成、読み取り、書き込みできる必要があることです。

破損について心配する必要はありません。埋め込みエンジンが共有ロックファイルにアクセスできない場合、接続は失敗します。IB Expert に接続できない理由は、おそらく、Firebird サーバー経由で SuperServer モデル (排他アクセスが必要) に接続しようとしたためです。

Firebird 2.5 リリース ノートも参照してください: Firebird エンジンの変更点:

Windows ライブラリの組み込みサーバーfbembed.dllは、以前のように Superserver ではなく Superclassic を使用するようになり、そのモデルを POSIX 上の Superclassic へのローカル接続のモデルと統合しました。以前は単一のアプリケーション空間への接続を制限していたデータベース ファイル ロックは、異なる組み込みサーバー モジュールから同じデータベースへの同時アクセスを許可するグローバル ロック テーブルに置き換えられました。これにより、アプリケーションの同時デバッグと、gbakgstatなどのネイティブ ユーティリティ ツールの使用が容易になります。

于 2015-10-02T08:14:16.907 に答える