Dockerに.netCore web-apiプロジェクトがあり、そこでOracleデータベースに接続します。接続には、ナゲットパッケージoracleClientCoreを使用します
stotedプロシージャを接続して呼び出す方法:
string cs = "Data Source = 172.10.200.100:1521/dev;PERSIST SECURITY INFO=True;USER ID=test; Password=devtest;";
using (OracleConnection connection = new OracleConnection(cs)){
connection.Open();
using (OracleCommand cmd = connection.CreateCommand()) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_check_db";
cmd.ExecuteNonQuery();
connection.Close();
}
}
ストアドプロシージャsp_check_db
では、insert into table
データベースへの接続が切断され、例外が発生することがありましたORA-03114: not connected to ORACLE
。データベースを再度有効にした後、ORA-03114: not connected to ORACLE
プロジェクトを再構築して再デプロイするまで、同じエラーが発生し続けます。
この状況で私は何ができますか、それは正しい行動ではありませんか?コードまたは接続文字列に問題がありますか?
アプリケーションが外部統合(この場合はデータベース)に依存している場合、パッチやネットワーク障害などが原因で短期間到達できない可能性があるため、再試行ポリシーを実装するのに適しています。再試行ロジックは、構成方法に応じて、特定の例外が発生した場合に一定時間コードを再実行します。
これは、フレームワークPollyを使用して単純な再試行ロジックを実装する方法の例です。このロジックは、例外が発生した場合に10秒のスパンでコードを3回再実行しますORA-03114
。3回目以降もコードが同じ例外をスローする場合、例外はスローされます。
var retryTimes = 3;
var waitBetweenExceptions = TimeSpan.FromSeconds(10);
var retryPolicy = Policy
.Handle<OracleException>(e => e.Message.Contains("ORA-03114"))
.WaitAndRetry(retryTimes, i => waitBetweenExceptions);
await retryPolicy.Execute(() =>
{
string cs = "Data Source = 172.10.200.100:1521/dev;PERSIST SECURITY INFO=True;USER ID=test; Password=devtest;";
using (OracleConnection connection = new OracleConnection(cs)){
connection.Open();
using (OracleCommand cmd = connection.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_check_db";
cmd.ExecuteNonQuery();
connection.Close();
}
}
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加