none
Estouro de conexão oracle c#

    Question

  • Tenho uma aplicação que se conecta com o oracle, porém a mesma mantem a conexão ativa mesmo eu forçando ela fechar.

    código de conexão tem sempre a mesma estrutura abaixo:

    using (OleDbConnection vConexao = Conexao.GetConnection())
     {
       ..........................

       vConexao.Close();
       vConexao.Dispose();
    }

    Já tentei fazer isso com o System.Data.OracleClient, mas também dar o mesmo problema.

    Alguém pode me ajudar com esse problema de conexão do oracle.
     
    Tuesday, October 13, 2009 8:22 PM

All replies

  • Leonardo,

    Você está utilizando Connection Pooling no Oracle? É possível que a conexão continue aberta no banco de dados para posterior reutilização.

    Não é necessário chamar os métodos Close e Dispose dentro do using. Poderia mostrar a implementação do código GetConnection aqui no fórum?

    Att.

    Ari C. Raimundo
    Wednesday, October 14, 2009 1:09 AM
  • Raimundo,

    Não estou utilizando Connection Pooling no Oracle, como eu faço para utilizar.

    A GetConnection da minha aplicação, foi eu que criei, mas eu não peguei ela do forum. Abaixo segue como ela esta montada, lembrando que ela esta em uma classe de Conexao.

            public static OleDbConnection GetConnection()
            {
                OleDbConnection vConexao = new OleDbConnection(RecuperaStringConexao());
                try
                {
                    vConexao.Open();
                }
                catch 
                {
                    Geral.Erro.GeraErro(1017);    
                }
                return vConexao;
            }

            private static string RecuperaStringConexao()
            {
                return ConfigurationManager.ConnectionStrings["OleBdConn"].ConnectionString; 
            }

    Aguardo a sua resposta sobre o Connection Pooling no Oracle, desde já obrigado.
    Wednesday, October 14, 2009 4:18 PM
  • Leonardo,

    O ADO.NET automaticamente habilita connection pooling. Talvez seja esse o seu problema. Como você sabe que a conexão se mantém ativa?

    Segue um link de ajuda:

    OLE DB, ODBC, and Oracle Connection Pooling (ADO.NET)
    http://msdn.microsoft.com/en-us/library/ms254502.aspx

    Att.

    Ari C. Raimundo
    Wednesday, October 14, 2009 5:32 PM
  • Raimundo,

    Na hora que eu estou testando a aplicação e fico monitorando as conexões no oracle.  Eu executo o SELECT * FROM V$SESSION e verifico como a aplicação esta abrindo e fechando as conexões.

    Observei que o Status da conexão fica INACTIVE depois do dispose(), porém a conexão continua presa no oracle.
    Pesquisando na internet achei alguns casos semelhantes veja o link abaixo:

    http://translate.google.com.br/translate?hl=pt-BR&langpair=en|pt&u=http://www.lazydba.com/oracle/0__91933.html&prev=/translate_s%3Fhl%3Dpt-BR%26q%3DOracle%2B%252B%2Bole%2Bdb%2B%252B%2Bv%2524session%26tq%3DOracle%2Bole%2Bdb%2B%252B%2B%252B%2Bv%2B%2524%2Bsession%26sl%3Dpt%26tl%3Den%26start%3D20

    Depois de verificar esse link, procurei outros link's falando sobre detecção de conexão morta-(DCD)  do oracle e achei um administrador de banco que usa esse recuso, pois o seu servidor oracle tem 50 bases ativas e ele usa esse recurso de 5 em 5 minutos.

    Segue abaixo o link explicado esse recurso do oracle:

    http://translate.google.com.br/translate?hl=pt-BR&sl=en&u=http://decipherinfosys.wordpress.com/2007/01/31/dead-client-detection-dcd-in-oracle/&ei=PmzYSsbEBo2kuAfnp5WIDg&sa=X&oi=translate&resnum=1&ct=result&ved=0CAcQ7gEwAA&prev=/search%3Fq%3DDCD%2B%252B%2Boracle%26hl%3Dpt-BR%26rlz%3D1R2ADBF_pt-BRBR330%26sa%3DG


    Lembrando que a minha aplicação roda em sql server e oracle, e só no oracle o erro acontece.

    Vou tentar o pool agora.
    Monday, October 19, 2009 1:53 PM