長期実行アプリケーションは、MS C OBDC API を使用して、Oracle DB への SQL 接続を作成および使用します。このアプリケーションは、当初、起動時に ODBC 接続を確立し、アプリケーションの実行中にその接続を無期限に維持するように設計されていました。
ごくまれに接続が突然切れるケースが見られますが、それは使い方が間違っているためなのか、それともこのような接続を維持しても問題ないと考えられるのか疑問に思いました. この件に関する決定的な情報を教えてくれる人はいますか?
私はODBCに精通していませんが、そのようなユースケースは接続プールで処理するのが最適です。アプリケーションは、何らかの作業があったときにプールからの接続を要求し、完了したらすぐに解放することができます。プールは、データベースへの実際の(再)接続を処理します。
ODBC接続プールをすばやく検索すると、次のように表示されます。DriverManager接続プール
これに関する決定的な情報があるかどうかはわかりませんが、長時間実行されるプログラムでは、常にこの種のインシデントに備えておく必要があります。それらは発生するだけです (db 接続だけでなく、長時間開いたままのソケットでも発生します)。 . 私は Oracle の経験はありませんが、Informix と非常によく似た設定をしています。これが (擬似コードで) 私たちが行っていることです。
while (programissupposedtorun) {
opendb();
do {
youractivities();
} while(dbisok);
closedbandcleanup();
}
接続が切断されたことを正しく検出でき、データを失うことなく処理を再開できる限り、問題はありません。