2012-02-29 21 views
13

Firebirdドライバを使用してDelphiのDBXでカスタムトランザクションレベルを指定する方法を探しています。私はDelphi XEを使用しています。Delphi DBX Firebirdのカスタムトランザクションレベル

TSQLConnectionコンポーネントのパラメータエディタでは、さまざまなTransIsolation値を設定でき、デフォルト値はReadCommitedです。プロパティWaitOnLocksTrueに設定されています。 は、私は、これは、次のFirebirdのトランザクション構成を使用していますが、私はよく分からない期待:

READ WRITE + WAIT + SNAPSHOThttp://www.firebirdsql.org/refdocs/langrefupd20-set-trans.htmlを参照)

私はLOCK TIMEOUT [seconds]の代わりWAITを使用したいと思います。しかし、私はどのようにこれを指定するのか見つけることはできません。私はDBXソースファイルを見てきましたが、カスタムトランザクションレベル(xilCUSTOMの検索)のコードがありますが、未完/未使用のようです。

この理由は、マルチユーザデータスナップアプリケーションでデッドロックが発生することがあり、あるトランザクションが別の(おそらくはデッド)トランザクションを待っているためです。クライアントのハングアップを無期限に行うよりも、数秒後にトランザクションを中断させる方がいいでしょう。

+1

ドキュメントに続く 'さらに、TSQLConnectionでは、データベース固有のカスタム分離レベルを指定できます。カスタム分離レベルは、dbExpressドライバによって定義されます。詳細についてはドライバのドキュメントを参照してください。 – JustMe

+0

文書化されたインターベースドライバを購入することを検討していますか? IBDACやIB Object(+パフォーマンス+互換性+サポート)のようなより自然な敬礼を使用しますか? – JustMe

答えて

0

私の経験では、JustMEが述べたIBOオブジェクトは非常にまともなライブラリです。もう一つのポイント - デッドロックにつながるシナリオを特定しようとしたと思いますか?それは非常に予測不可能な状況ですか?あなたがロックタイムアウトを使用した場合に悪影響を受けるアプリケーションを実際に動かすことがWAITによって実際に可能になる他の状況があるかどうか疑問に思うだけです。私の最初のコメントに戻って - ファイアバードでは、一般的には専用のライブラリを使う方が良いです。あなたがソートされることを願っています!

関連する問題