Прерывистая проблема с соединением vb.net - PullRequest
0 голосов
/ 23 августа 2011

Я вижу странный прерывистый сбой соединения. Мое приложение работает нормально, а затем начинает выдавать исключения сбоя подключения. Сброс IIS требуется, прежде чем приложение снова начнет работать. Мне удалось отследить несколько сбоев до неожиданного перезапуска кластера оракула, но не все из них. Кто-нибудь еще видел эту проблему? Я искал в Интернете, но ничего не нашел.

Клиент - сервер Win2003, IIS под управлением ASP.net 2.0.50727, код VB.NET, соединение ODBC через Oracle Client 10.2.0.1.0

Сервер - Oracle Database 10g Enterprise Edition, выпуск 10.2.0.4.0 - 64-разрядная версия в кластере Linux.

Ошибка:

Attempting connection.Open()
FAILED connection.Open()
Message: 
Stack Trace: 
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src,     String procedure) 
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src) 
at Oracle.DataAccess.Client.OracleConnection.Open() 
at MABridge2._0.debug.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\xxxx\My Documents\Visual Studio     2008\Projects\xxx\debug.aspx.vb:line 19
Closed connection

Код:

Imports Oracle.DataAccess.Client
Partial Public Class debug
Inherits System.Web.UI.Page

Dim loggingstring As String

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim connString As New String("Data Source=xxx_rac;Persist Security Info=True;User ID=xxx;Password=xxxxx;")
    Using conn As New OracleConnection(connString)
        Dim cmd As New OracleCommand()
        Response.Write("Attempting connection.Open()" + "<br>")
        Try
            conn.Open()
        Catch ex As OracleException
            Response.Write("FAILED connection.Open()" + "<br>")
            loggingstring = "Message: " + ex.Message + "<br>" + "Stack Trace:" + ex.StackTrace + "<br>"
            Response.Write(loggingstring)
        End Try
        conn.Close()
        Response.Write("Closed connection" + "<br>")
    End Using

End Sub

Ответы [ 3 ]

2 голосов
/ 28 августа 2011

Попробуйте изменить код, чтобы избавиться от экземпляра OracleCommand, иначе у вас будет утечка ресурсов, которая может стать причиной ваших проблем.

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

Чтобы подвести итог проблемы:

  • Ошибка возникает при открытии соединения
  • ошибка возникает после того, как система использовалась некоторое время
  • Ошибкавременное решение проблемы путем сброса IIS

Исходя из этого, звучит так, как будто ваш код пропускает соединения или какой-либо другой ресурс.

Счетчики производительности и события см .: http://download.oracle.com/docs/html/B13831_01/monitor.htm#i1005706

0 голосов
/ 31 августа 2011

Из вашей строки подключения я предполагаю, что вы подключаетесь к базе данных RAC, состоящей из более чем одного экземпляра ...

Если мое предположение верно, тогда может быть другое объяснение:

В конфигурации RAC слушатель Oracle, к которому вы подключаетесь, возвращает информацию, сообщающую клиенту, к какому экземпляру клиент должен подключиться ... это означает: вы подключаетесь к слушателю A, а слушатель A говорит вам подключиться к экземпляру B. Это часть о том, что происходит "за кадром" (в Oracle Client, а не в вашем коде).

Когда слушатель сообщает эту информацию, он сообщает не IP-адрес, а имя (DNS ...). Если ваш компьютер не может разрешить это имя, вы получаете именно то поведение, которое вы описываете ... подключение иногда работает, а иногда нет ... либо поместите все имена узлов, относящиеся ко всем узлам RAC, в локальные узлы, либо (лучше) сделайте их разрешаемыми DNS в вашей локальной сети ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...