Entrar com a conta da Microsoft
Entrar ou criar uma conta.
Olá,
Selecionar uma conta diferente.
Você tem várias contas
Escolha a conta com a qual você deseja entrar.

Sintomas

Você se conectar a um banco de dados Oracle usando o provedor Microsoft OLE DB para Oracle (MSDAORA) e, em seguida, você encerra a conexão no lado do servidor. Quando você abre uma nova conexão ao banco de dados Oracle de seu aplicativo, você recebe a seguinte mensagem de erro de exceção:

System.Data.OleDb.OleDbException: Erro não especificado
ORA-01012: não conectado

Causa

Quando você finalizar a conexão ao banco de dados Oracle no lado do servidor ao usar MSDAORA, a conexão interrompida é retornado para o pool de conexão. O código de pooling de conexão incorretamente interage com a propriedade ResetConnection do MSDAORA. Quando o provedor não dá suporte a esta propriedade, o código pooling interpreta incorretamente que a conexão é redefinida e a conexão é um arquivo válido. Quando o código do cliente abre uma nova conexão, a conexão interrompida que foi retornado para o pool de conexão pode ser recuperado. Portanto, você recebe a mensagem de erro mencionada na seção "Sintomas".

Resolução

Informações sobre o hotfix

Um hotfix suportado está disponível agora na Microsoft. No entanto, destina-se a corrigir somente o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem esse problema específico. Esta correção poderá ser submetida a testes adicionais. Portanto, se esse problema não o prejudicar, recomendamos que você aguarde o próximo service pack que contém esse hotfix.

Para resolver esse problema imediatamente, contate o Atendimento Microsoft para obter o hotfix. Para obter uma lista completa dos números de telefone do Serviço de Atendimento ao Cliente Microsoft e informações sobre custos de suporte, visite o seguinte site da Microsoft:

http://support.microsoft.com/contactus/?ws=supportObservação: em alguns casos, as taxas cobradas para chamadas de suporte podem ser canceladas caso um profissional de Suporte da Microsoft determine que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados para questões de suporte adicionais e problemas que não se qualificam à atualização específica em questão.

Informações sobre o arquivo:

A versão em inglês deste hotfix possui os atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas na Hora Universal Coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para localizar a diferença entre o UTC e a hora local, use a guia fuso horário na ferramenta Data e hora no painel de controle.

Microsoft Data Access Components (MDAC) 2.8
   Date         Time   Version         Size     File name
---------------------------------------------------------
10-Mar-2004 04:22 2.80.1036.0 225,280 Msdaora.dll
10-Mar-2004 04:22 2000.85.1036.0 24,576 Odbcbcp.dll
10-Mar-2004 04:21 2.80.1036.0 442,368 Oledb32.dll
10-Mar-2004 04:21 2000.85.1036.0 401,408 Sqlsrv32.dll
MDAC 2.7 Service Pack 1
   Date         Time   Version         Size     File name
---------------------------------------------------------
10-Mar-2004 02:19 2000.81.9046.0 61,440 Dbnetlib.dll
10-Mar-2004 02:20 2.71.9046.0 221,184 Msdaora.dll
10-Mar-2004 02:15 2.71.9046.0 126,976 Msdart.dll
10-Mar-2004 02:15 3.520.9046.0 204,800 Odbc32.dll
10-Mar-2004 02:20 2000.81.9046.0 24,576 Odbcbcp.dll
10-Mar-2004 02:20 3.520.9046.0 98,304 Odbccp32.dll
10-Mar-2004 02:16 2.71.9046.0 417,792 Oledb32.dll
10-Mar-2004 02:19 2000.81.9046.0 471,040 Sqloledb.dll
10-Mar-2004 02:19 2000.81.9046.0 385,024 Sqlsrv32.dll

Esse hotfix está disponível como parte de um pacote de hotfix cumulativo. Quando você receber esse hotfix da Microsoft Product Support Services, no número de artigo que está listado no pacote de hotfix será 839801 para o MDAC 2.8 ou 836799 para MDAC 2.7 SP1. Para obter mais informações, consulte o seguinte artigo da Base de dados de Conhecimento da Microsoft:



MDAC 2.8

Corrigir 839801 : Hotfixes estão disponíveis para o MDAC 2.8

MDAC 2.7 SP1

Corrigir 836799 : Hotfixes estão disponíveis para o MDAC 2.7 Service Pack 1

Status

A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Mais informações

Etapas para reproduzir o comportamento

  1. Inicie o Microsoft Visual Studio .NET.

  2. No menu arquivo , aponte para
    Novoe em seguida, clique em Project. A caixa de diálogo New Project é exibida.

  3. Em Project Types, clique em Projetos do Visual Basice, em seguida, clique em Aplicativo de Consoleem modelos.

  4. Na caixa nome , digite
    MyAppe, em seguida, clique em Okey. Por padrão, o arquivo Module1 vb é criado.

    Se você estiver usando o Microsoft Visual C# .NET, o arquivo Class1. cs é criado.

  5. Adicione o seguinte código na parte superior:

    Código do Microsoft Visual Basic .NET

    Imports System
    Imports System.Data.OleDb

    Código do Visual C# .NET

    using System.Data.OleDb;
  6. Adicione o seguinte código ao procedimento principal:

    Código do Visual Basic .NET

    Dim cn As OleDbConnection
    Dim cmd As OleDbCommand
    Dim r As OleDbDataReader
    Dim sid As String
    Dim orlcmd As String
    Dim connString As String = "Provider=MSDAORA;DataSource=<data source>;User ID=<user name>;Password=<password>;"
    Try
    'Create a new connection to the Oracle database by using MSDAORA.
    cn = New OleDbConnection
    cn.ConnectionString = connString
    cn.Open()
    cmd = New OleDbCommand
    cmd.CommandText = "SELECT SID , SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)"
    cmd.Connection = cn
    r = cmd.ExecuteReader()
    sid = ""
    If (r.Read()) Then
    sid = r.GetValue(0).ToString() + "," + r.GetValue(1).ToString()
    End If
    orlcmd = "Alter System Kill Session '" + sid + "' Immediate;"
    Console.WriteLine("Open the SQL Plus window, run the following command, and then press ENTER:")
    Console.WriteLine(orlcmd)
    Console.ReadLine()
    r.Close()
    cmd.CommandText = "SELECT count(*) from TAB"
    Try
    'Expecting this command to fail because connection has been killed
    r = cmd.ExecuteReader()
    Catch orlex As OleDbException
    Console.WriteLine(orlex.Message)
    cmd.Dispose()
    'Close the bad connection.
    cn.Close()
    System.Threading.Thread.Sleep(1000)
    cn.ConnectionString = connString
    cn.Open()
    cmd = New OleDbCommand
    cmd.CommandText = "SELECT count(*) FROM TAB"
    cmd.Connection = cn
    'This command will fail, but it will work when a new connection is used.
    r = cmd.ExecuteReader()
    If (r.Read()) Then
    Console.WriteLine(r.GetValue(0))
    End If
    End Try
    Catch ex As OleDbException
    Console.WriteLine(ex.ToString())
    End Try
    Console.WriteLine("Press ENTER to exit...")
    Console.ReadLine()

    Código do Visual C# .NET

    OleDbConnection cn;
    OleDbCommand cmd;
    OleDbDataReader r;
    String sid;
    String orlcmd;
    String connString="Provider=MSDAORA;DataSource=<data source>;User ID=<user name>;Password=<password>;";
    try
    {
    //Create a connection to the Oracle database by using MSDAORA.
    cn= new OleDbConnection();
    cn.ConnectionString=connString;
    cn.Open();
    cmd=new OleDbCommand();
    cmd.CommandText="SELECT SID , SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)";
    cmd.Connection=cn;
    r=cmd.ExecuteReader();
    sid="";
    if(r.Read())
    {
    sid=r.GetValue(0).ToString()+","+r.GetValue(1).ToString();
    }
    orlcmd="Alter System Kill Session '"+sid+"' Immediate;";
    Console.WriteLine("Open the SQL Plus window, run the following command, and then press ENTER:");
    Console.WriteLine(orlcmd);
    Console.ReadLine();
    r.Close();
    cmd.CommandText="SELECT count(*) from TAB";
    try
    {
    //Expecting this to fail because the connection is killed.
    r=cmd.ExecuteReader();
    }
    catch(OleDbException orlex)
    {
    Console.WriteLine(orlex.Message);
    cmd.Dispose();
    //Close the bad connection.
    cn.Close();
    System.Threading.Thread.Sleep(1000);
    cn.ConnectionString=connString;
    cn.Open();
    cmd=new OleDbCommand();
    cmd.CommandText="SELECT count(*) FROM TAB";
    cmd.Connection=cn;
    //This command will fail, but it will work when a new connection is used.
    r=cmd.ExecuteReader();
    if(r.Read())
    {
    Console.WriteLine(r.GetValue(0).ToString());
    }
    }
    }
    catch(OleDbException ex)
    {
    Console.WriteLine(ex.ToString());
    }
    Console.WriteLine("Press ENTER to exit...");
    Console.ReadLine();

    Observação: Modificar a sequência de caracteres de conexão de acordo com o seu ambiente.

  7. No menu Build , clique em Build Solution.

  8. No menu Debug , clique em
    Iniciar. Você verá que um comando é exibido na janela do console.

  9. No Oracle SQL * Plus, execute o comando que é exibido na janela do console.

  10. Pressione ENTER. Na janela do console, você vê a exceção que é mencionada na seção "Sintomas".

Referências

Para obter mais informações sobre o provedor Microsoft OLE DB para Oracle, visite o seguinte site da Microsoft Developer Network (MSDN):

http://msdn2.microsoft.com/en-us/library/ms810685.aspxPara obter informações adicionais, clique no número abaixo para ler o artigo na Base de Conhecimento Microsoft:

824684 descrição da terminologia padrão usada para descrever as atualizações de software

Os produtos de terceiros descritos neste artigo são fabricados por empresas que são independentes da Microsoft. A Microsoft não dá nenhuma garantia, implícita ou não, em relação ao desempenho ou confiabilidade desses produtos.

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.

As comunidades ajudam você a fazer e responder perguntas, fazer comentários e ouvir especialistas com conhecimento avançado.

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?
Ao pressionar enviar, seus comentários serão usados para aprimorar os produtos e serviços da Microsoft. Seu administrador de TI poderá coletar esses dados. Política de Privacidade.

Agradecemos seus comentários!

×