Я установил соединение с БД Oracle в моем проекте .net Core API
Я использую этот драйвер для подключения к Oracle
Мой код:
connection.Open();
using (OracleCommand cmd = connection.CreateCommand()) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "MyPackage.SP";
cmd.Parameters.Add(DbParam(cmd, "id", OracleType.Number, 1));
cmd.Parameters.Add(DbOutParam(cmd, "out_key", OracleType.VarChar, 1024));
try {
cmd.ExecuteNonQuery();
result = cmd.Parameters["out_key"].Value.ToString();
} catch (OracleException oe) {
Console.Out.WriteLine("OracleException: {0}: {1}", Tool.GetCurrentMethod(), oe.Message);
}
connection.Close();
}
Моя строка соединения:
Data Source = ORACLE-DEV:1521/pdb;PERSIST SECURITY INFO=True;USER ID=user; Password=password;
Иногда соединение исчезает, и после того, как у меня есть для всех соединений одно исключение:
ORA-01012: not logged on
Process ID: x
Session ID: y Serial number: z
У меня естьуже прочитали вопрос , но есть пользователь, который решил проблему, установив для параметра «Подтверждение соединения» значение true, а также оставил предупреждение
В качестве предупреждения я цитирую документы Oracle.
Атрибут Validate Connection проверяет соединения, выходящие из пула.Этот атрибут следует использовать только в случае крайней необходимости, поскольку он заставляет сервер выполнять обход данных в базу данных для проверки каждого соединения непосредственно перед его предоставлением приложению.Если недопустимые соединения встречаются редко, разработчики могут создать собственный обработчик событий для получения нового соединения, а не использовать проверку соединения.Как правило, это обеспечивает лучшую производительность.
Я хочу знать, что делать после таких исключений перехвата и как выполнить автоматическое переподключение
try {
cmd.ExecuteNonQuery();
} catch (OracleException oe) {
Console.Out.WriteLine("OracleException: {0}", oe.Message);
if (oe.Code == -1012) {
// put your code here
}
}
Есть идеи?