ВИПРАВЛЕННЯ: З'являється повідомлення про помилку "ORA-01012" під час підключення до бази даних Oracle, за допомогою MSDAORA


Причини


Підключення до бази даних Oracle за допомогою до постачальника Microsoft OLE DB, Oracle (MSDAORA), і, то в кінцевому підключення на сервері. Під час відкриття нового підключення до бази даних Oracle застосунок, з'являється таке повідомлення про помилку винятку:
System.Data.OleDb.OleDbException: Невідома помилка.
ORA-01012: не ввійшли

Причина


Після завершення підключення до бази даних Oracle на сервері під час використання MSDAORA, пошкоджені підключення повертається до пулу підключення. Код підключення пулу, неправильно, взаємодіє з ResetConnection властивість MSDAORA. Під час цієї властивості не підтримується постачальником, пулу код неправильно обробляє підключення буде скинуто, а також чи є допустимим підключення. Після того, як клієнт-код, відкриється нове підключення, можна відновити пошкоджені підключення, які було повернуто пул підключення. Таким чином, що з'являється повідомлення про помилку, описане в розділі "Ознаки".

Вирішення


Відомості про виправлення

Корпорація Майкрософт випустила підтримуване виправлення доступна. Проте призначена для вирішення проблеми, описаної в цій статті. Він придатний лише для систем, які зазнають цієї конкретної проблеми. Те, що це виправлення може потребувати додаткового тестування. Таким чином, якщо ви не завдає значної, ми рекомендуємо почекати до виходу чергового пакета оновлень, що містить це виправлення.

Щоб негайно вирішити цю проблему, зверніться до служби підтримки Microsoft, щоб отримати виправлення. Повний перелік телефонів служби підтримки користувачів корпорації Майкрософт а також відомості про вартість обслуговування відвідайте веб-сайт корпорації Майкрософт:Примітка. В окремих випадках оплату звернення до служби підтримки може бути скасовано якщо технічної підтримки Майкрософт визначить, що телефонів служби. Плата стягується на додаткові питання і проблеми, які не пов'язані з оновленням.

Відомості про файли

Англійська версія цього виправлення на комп'ютері має атрибути файлів (або новіші атрибути файлів), подані в нижченаведеній таблиці. Значення дати й часу для цих файлів наведено за всесвітнім координованим часом (UTC). Переглядаючи відомості про файл, час конвертується у місцевий час. Щоб визначити різницю між UTC і місцевим часом, скористайтеся вкладкою часового поясу , у засобі "Дата й час", на панелі керування.
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 пакета 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
Пропонується це виправлення в рамках пакет сукупних виправлень. Коли з'явиться це виправлення, зі служби підтримки продуктів Microsoft, номер, перелічених у пакет виправлень буде 839801, для MDAC 2.8 або 836799, для MDAC 2.7 SP1. Щоб отримати додаткові відомості див. в такій статті бази знань Microsoft Knowledge Base:



MDAC 2.8
839801 -FIX: термінові виправлення, які доступні для MDAC 2.8

MDAC 2.7 SP1
836799 -FIX: виправлень, доступні для MDAC 2.7 SP1

Стан


Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".

Додаткові відомості


Відтворення проблеми

  1. Запустіть Microsoft Visual Studio .NET.
  2. У меню " файл " виберіть
    Створитиі натисніть кнопку проекту. З'явиться діалогове вікно Нового проекту .
  3. У розділі Проекту типівклацніть Visual Basic проектіві виберіть Застосунок для консолі шаблони.
  4. Введіть у полі " ім'я ",
    MyAppа потім натисніть кнопку OK. За промовчанням створюється файл Module1.vb.

    Якщо використовується Microsoft Visual C# .NET створюється файл Class1.cs.
  5. На початку, додайте наведений нижче код:

    Microsoft Visual Basic .NET код
    Imports System
    Imports System.Data.OleDb
    Visual C# веб-код
    using System.Data.OleDb;
  6. Основніпорядку, додайте наведений нижче код:

    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# веб-код
    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 * Крім того, виконання команди, яка відображається у вікні консолі.
  10. Натисніть клавішу ENTER. У вікні консолі відображається за винятком, описане в розділі "Ознаки".

Посилання


Щоб отримати додаткові відомості про до Microsoft OLE DB Provider для Oracle відвідайте веб-сайт Microsoft Developer Network (MSDN):Щоб отримати додаткові відомості клацніть номер статті в базі знань Microsoft Knowledge Base:
824684 Опис стандартну термінологію, яка використовується для опису оновлень програмних продуктів Майкрософт

Продукти сторонніх виробників, які розглядаються в цій статті, розроблені компаніями, що не залежать від корпорації Майкрософт. Корпорація Майкрософт не надає жодних гарантій, неявних або інших, стосовно продуктивності або надійності цих продуктів.