2009-05-20 4 views
4

Oracle DBに接続されたBDEを使用するアプリケーションがあります。
私はSQLクエリにTQueryを使用し、それはTDatabaseに接続します。私たちはプロのプログラマーではなく、何が起こっているのか分かりません。ネットワークが不安定なときにDB接続が失敗しないようにするにはどうすればよいですか?

私たちのネットワークは不安定です。パケットロスに問題があります。

問題が発生すると、アプリケーションはDBサーバーから切断されるか、現在のクエリを終了できません。
これを処理する最善の方法は何ですか?

私たちのネットワーキングチームは現在、根本的な問題を解決する作業を行っており、障害が発生した場合にデータベースに再接続するようにコードを変更しました。私たちは、データベースサーバー上のオープンセッションの数に問題を抱えています。

解決方法はありますか?
私たちにとってよくある問題です。

答えて

3

私はデータベースコンポーネントで次のことをお勧めします。

  1. すべてのSQLで接続して完了すると終了します。
  2. 使用接続タイムアウト&再起動のクエリタイムアウトデータベースが切断された場合
  3. に存在する場合は、クライアント上のローカルデータベースにデータをスプールし、再び接続が確立されている中央のデータベースに送信を再開します。この方法では、データを失うことはありません。
  4. タイマーを使用して、未送信データのスプーリングを行うための中央データベース接続を確認します。

この問題は、ショップフロアのデータ収集でよく発生します。この問題は、問題を効果的に処理できる唯一の方法です。 「ウォッチドッグ」スレッドその実装する

2

短い答えを申し訳ありません...あなたのネットワークを修正してください。これは現時点ではあなたにとって最良の選択肢です。

+0

私はTCP/IPが不安定であり、インターネットが不安定であることを知っていますが、その上に安定したシステムを構築する必要があることは、特にハードウェアのデバッグが難しいことがあります。 – linjunhalida

+0

@JD、場合によっては、WANや他のネットワーク経由であなたのコントロールの外に行きます。 –

+0

@マークハリソンureliableまたはuncontrolledネットワーク接続を介してDB接続を行う必要がある場合は、別のprotocalを使用してDBと対話するようにアプリケーションのアーキテクチャを変更します。古典的な例は、DBに直接接続するためにtyringではなくXML Webサービスを使用することです。 私の経験では、DB接続は非常に混乱しており、貧しいネットワークには適していません。 – Jeff

1

試してみてください。使用できない場合はネットワーク(データベースサーバーのIPアドレス)X秒ごと

    1. ピングは、UIを無効にし、再び
    2. を接続してみてください

    トランザクションがまったく成功しない可能性があることを考慮し、その情報をどこかに保存します。次に、「ウォッチドッグ」スレッドを介して接続するときに、トランザクションの性質上許容される場合には、そのトランザクションを再度プリフォームしようとします。

  • 2

    n層ソリューションを使用すると、中間層がデータベースサーバー上にあり、その接続がローカルになっている場合に特に役立ちます。最近のDelphiの実装のほとんどは、中間層としてカスタムHTTPサーバーを使用していますが、そのような利点は、実行されている現在の要求に対してのみ接続が必要であることです。要求が完了した場合、接続は問題なく切断できます。 。

    1

    ADOの代わりにDBExpressテクノロジを使用します。構造dbquery + provider + Clientdatasetは設計上「切断」されています。

    データセットを開いて接続を切断し、再接続してデータを送信するだけで簡単にテストできます。

    ちなみに、DBExpressでは、アプリケーションをn層シナリオに簡単にアップグレードできます。

    関連する問題