2013-04-25 9 views
1

Я получаю следующее сообщение об ошибке оракула, когда мое приложение развертывается на сервере только, а не при запуске точно такой же исполняемый на моей локальной машине:ORA-01002: выборка из последовательности

enter image description here

Трассировка стека указывает на простой оператор выбора с объединением, который я могу успешно выполнить через TOAD локально и через SQL Plus на проблемном сервере.

Верхняя половина StackTrace является:

Oracle.DataAccess.Client.OracleException ORA-01002: fetch out of sequence 
    at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) 
    at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src, Boolean bCheck) 
    at Oracle.DataAccess.Client.OracleDataReader.Read() 
    at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping) 
    at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue) 
    at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) 
    at System.Data.Common.LoadAdapter.FillFromReader(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) 
    at System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler) 
    at Reconciliation.Models.Legacy.EntityDbEnvironment.OpenEntity(String sql) 
    at Reconciliation.Models.Legacy.EntityDbEnvironment.Open(String& sql, DataTable& datatable) 
**at myProject.Checks.ExecuteSql()** 

Я могу только представить, это проблема клиента оракула, но там, где я должен смотреть, чтобы решить это?

+3

Есть ли у вас автокоммит? Эта ошибка возникает, если вы пытаетесь извлечь курсор через фиксацию (вы не должны совершать внутри цикла курсора). –

+0

@VincentMalgrat - Не то, чтобы мы верим, строка соединения точно такая же, но, возможно, это может быть установлено на клиенте oracle? –

+0

Да, автокоммит может быть установлен только клиентом. Ошибка возникает не из самого SQL-запроса, а из-за неправильного использования курсора (выборка после последней строки возвращена, выборка после фиксации для курсора FOR UPDATE, выборка после перезаписи без повторного выполнения или выборка после отката). –

ответ

1

У меня был этот выпуск тоже. Мое приложение отлично работало на машине, и тот же самый исполняемый файл на другой машине получал это исключение из последовательности.

Мой запрос большой, который занимает несколько минут. Он управляется COM +. Я понял, что мои две среды имеют немного другую конфигурацию компонентов. В среде с отказами был установлен тайм-аут транзакции, равный 60 секундам, а другой - гораздо больше.

Чтобы решить эту проблему, мне просто нужно было перейти в Службы компонентов, щелкнуть правой кнопкой мыши на «Мой компьютер», «Свойства», «Параметры» и увеличить тайм-аут транзакции.

Теперь имеет смысл, так как исключение извлечения из последовательности происходит, когда вы пытаетесь получить доступ к закрытому курсору. Я понимаю, что тайм-аут COM + закрыл транзакцию, поэтому курсор, и выбросил это исключение Oracle.

Picture of the property to update

Смежные вопросы