ORA-12571: TNS: сбой программы записи пакетов в ASP.NET - PullRequest
8 голосов
/ 22 августа 2011

Моя команда разработчиков сталкивается с многочисленными ORA-12571: TNS:packet writer failure ошибками при использовании ASP.NET 3.5 и 4.0 против Oracle 11g.Эти ошибки противоречивы относительно того, когда они возникают, и генерируются многочисленными приложениями.Это исключение происходит при вызове случайных хранимых процедур, пакетов и встроенных операторов SQL.Клиент Oracle 11 установлен на веб-сервере.Некоторые приложения используют Microsoft System.Data.OracleClient для подключения к Oracle, а некоторые используют компоненты .NET, предоставляемые oracle (ODP.NET).Оба объекта доступа к данным обнаруживают одну и ту же ошибку.

Существуют другие приложения .NET, которые работают на другом веб-сервере, но используют один и тот же сервер базы данных.В приложениях таких проблем нет.Сначала я думаю, что на веб-сервере с клиентом Oracle что-то неправильно настроено.

Кто-нибудь еще получил эту ошибку?Что вы сделали, чтобы это исправить?

ORA-12571: TNS:packet writer failure

Трассировка стека:

at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
   at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
   at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals)
   at System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.OracleClient.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)

Ответы [ 3 ]

7 голосов
/ 13 июня 2012

Другое возможное решение заключается в том, что межсетевой экран между вами и базой данных Oracle считает ваше соединение разорванным и закрывает его под вами. Вы узнаете, только когда попытаетесь выполнить запрос и получите ошибку ORA-12571.

Это вызвано тем, что соединения открыты в течение длительного времени без активности.

Решение состоит в том, чтобы добавить SQLNET.EXPIRE_TIME в файл sqlnet.ora на сервере и установить для него некоторый интервал (10). Это приведет к тому, что соединения будут проверяться каждые 10 минут, чтобы убедиться, что они все еще живы.

В результате ваш брандмауэр увидит сетевую активность и не закроет соединение.

SQLNET.EXPIRE_TIME=10

ORA-12571: TNS: сбой модуля записи пакетов - одна из самых сложных проблем, которые мне пришлось решить

1 голос
/ 22 августа 2011

Я думаю, что это ошибка в Oracle. Я сталкивался со многими проблемами с методом DBDataAdapter.Fill, когда клиент Oracle подавлял ошибку памяти. Это было решено для меня с помощью клиента 11.2.0.2 с установленным исправлением 6.

Если вы будете искать на сайте поддержки Oracle, вы увидите много подобных проблем.

Проверьте также проблемы «Чтение защищенной памяти» с клиентами 11g1 / 11g2.

0 голосов
/ 15 апреля 2014

После того, как я установил модуль elmah и смог проанализировать исключения, я попытался:

  1. Изменить конфигурацию соединения.
  2. Удалите и / или обновите правила брандмауэра сервера.
  3. Обновление клиента Oracle на сервере.

Любой из вышеперечисленных вариантов решил проблему, но я забыл устаревшего поставщика (System.Data.OracleClient) , который мы использовали. После того, как я заменил его последней версией ODP.NET (Oracle.DataAccess) , все начало работать без нареканий.

Obs: на основе описания вашего исключения вы в настоящее время используете устаревшего поставщика.

...