Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Симптомы

Подключение к базе данных Oracle с помощью поставщика Microsoft OLE DB для Oracle (MSDAORA), а затем завершить подключение на стороне сервера. При открытии нового подключения к базе данных Oracle из приложения появляется следующее сообщение об ошибке исключения:

System.Data.OleDb.OleDbException: Неизвестная ошибка
ORA-01012: не вошел в систему

Причина

При завершении подключения к базе данных Oracle на стороне сервера при использовании MSDAORA неработающие подключение возвращается в пул подключений. Код пула подключения неправильно взаимодействует со свойством ResetConnection MSDAORA. Если это свойство не поддерживается поставщиком, код пула неправильно интерпретирует, что сброс подключения, и что подключение является правильной. Когда клиентский код открывает новое соединение, могут получить физический разрыв соединения, который был возвращен в пул подключений. Таким образом появляется сообщение об ошибке, описанное в разделе «Проблема».

Решение

Сведения об исправлении

Исправление от корпорации Майкрософт доступно. Тем не менее он предназначен только для устранения проблемы, описанной в этой статье. Предлагаемое исправление должно применяться исключительно в системах, в которых обнаружена эта специфическая неполадка. Это исправление может проходить дополнительное тестирование. Таким образом Если вы не подвержены серьезно эту проблему, рекомендуется дождаться следующего пакета обновления, содержащего это исправление.

Для немедленного решения этой проблемы обратитесь в службу поддержки пользователей Майкрософт для получения исправления. Полный список телефонов службы поддержки клиентов корпорации Майкрософт и сведения о стоимости поддержки посетите следующий веб-сайт корпорации Майкрософт:

http://support.microsoft.com/contactus/?ws=supportПримечание. В особых случаях оплата, предусмотренная за обращение в службу поддержки может быть отменена, если специалист службы технической поддержки Майкрософт определит, что обновление будет решением проблемы. Затраты на обычные услуги службы поддержки будут применяться к дополнительным вопросам и проблемам, которые не охватываются конкретным обновлением.

Сведения о файлах

Английская версия данного исправления содержит атрибуты файла (или более поздние атрибуты файлов), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, откройте вкладку часовой пояс «Дата и время» панели управления.

Компоненты доступа к данным Microsoft (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 Пакет обновления 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

Это исправление доступно как часть накопительный пакет исправлений. При получении этого исправления от служб поддержки продуктов Майкрософт, номер статьи, включенного в пакет исправлений будет 839801 для компонентов MDAC 2.8 или 836799 для MDAC 2.7 с пакетом обновления 1. Дополнительные сведения см. ниже статьи базы знаний Майкрософт:



MDAC 2.8

ИСПРАВИТЬ 839801 : исправления для компонентов MDAC 2.8

КОМПОНЕНТЫ MDAC 2.7 С ПАКЕТОМ ОБНОВЛЕНИЯ 1

ИСПРАВИТЬ 836799 : исправления доступны для Пакет обновления 1 для MDAC 2.7

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Дополнительные сведения

Действия по воспроизведению проблемы

  1. Запустите Microsoft Visual Studio .NET.

  2. В меню файл укажите на пункт
    Создатьи выберите команду проект. Откроется диалоговое окно Новый проект .

  3. В области Типы проектоввыберите Проекты Visual Basicи в списке Шаблонывыберите Консольное приложение.

  4. В поле имя введите
    MyApp, а затем нажмите кнопку ОК. По умолчанию создается файл Module1.vb.

    При использовании Microsoft Visual C# .NET создается файл Class1.cs.

  5. Добавьте следующий код в начало:

    Код Microsoft Visual Basic .NET

    Imports System
    Imports System.Data.OleDb

    Код Visual C# .NET

    using System.Data.OleDb;
  6. Процедура Mainдобавьте следующий код:

    Код 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()

    Код 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();

    Примечание. Измените строку подключения в соответствии с вашей средой.

  7. В меню Построение выберите команду Построить решение.

  8. В меню Отладка выберите команду
    Для запуска. Можно увидеть, что команда отображается в окне консоли.

  9. В Oracle SQL * Plus, выполнить команду, которая отображается в окне консоли.

  10. Нажмите клавишу ВВОД. В окне консоли отображается исключение, описанное в разделе «Проблема».

Ссылки

Дополнительные сведения о поставщик Microsoft OLE DB для Oracle посетите следующий веб-узел Microsoft Developer Network (MSDN):

http://msdn2.microsoft.com/en-us/library/ms810685.aspxДля получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:

Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Продукты независимых производителей, обсуждаемые в этой статье, производятся компаниями, независимыми от корпорации Майкрософт. Корпорация Майкрософт не дает никаких гарантий, явных или подразумеваемых, относительно производительности или надежности этих продуктов.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×