Причини
Підключення до бази даних Oracle за допомогою до постачальника Microsoft OLE DB, Oracle (MSDAORA), і, то в кінцевому підключення на сервері. Під час відкриття нового підключення до бази даних Oracle застосунок, з'являється таке повідомлення про помилку винятку:
System.Data.OleDb.OleDbException: Невідома помилка.ORA-01012: не ввійшли
Причина
Після завершення підключення до бази даних Oracle на сервері під час використання MSDAORA, пошкоджені підключення повертається до пулу підключення. Код підключення пулу, неправильно, взаємодіє з ResetConnection властивість MSDAORA. Під час цієї властивості не підтримується постачальником, пулу код неправильно обробляє підключення буде скинуто, а також чи є допустимим підключення. Після того, як клієнт-код, відкриється нове підключення, можна відновити пошкоджені підключення, які було повернуто пул підключення. Таким чином, що з'являється повідомлення про помилку, описане в розділі "Ознаки".
Вирішення
Відомості про виправлення
Корпорація Майкрософт випустила підтримуване виправлення доступна. Проте призначена для вирішення проблеми, описаної в цій статті. Він придатний лише для систем, які зазнають цієї конкретної проблеми. Те, що це виправлення може потребувати додаткового тестування. Таким чином, якщо ви не завдає значної, ми рекомендуємо почекати до виходу чергового пакета оновлень, що містить це виправлення.Щоб негайно вирішити цю проблему, зверніться до служби підтримки Microsoft, щоб отримати виправлення. Повний перелік телефонів служби підтримки користувачів корпорації Майкрософт а також відомості про вартість обслуговування відвідайте веб-сайт корпорації Майкрософт:
http://support.microsoft.com/contactus/?ws=supportПримітка. В окремих випадках оплату звернення до служби підтримки може бути скасовано якщо технічної підтримки Майкрософт визначить, що телефонів служби. Плата стягується на додаткові питання і проблеми, які не пов'язані з оновленням.
Відомості про файли
Англійська версія цього виправлення на комп'ютері має атрибути файлів (або новіші атрибути файлів), подані в нижченаведеній таблиці. Значення дати й часу для цих файлів наведено за всесвітнім координованим часом (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.8MDAC 2.7 SP1
836799 -FIX: виправлень, доступні для MDAC 2.7 SP1
Стан
Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".
Додаткові відомості
Відтворення проблеми
-
Запустіть Microsoft Visual Studio .NET.
-
У меню " файл " виберітьСтворитиі натисніть кнопку проекту. З'явиться діалогове вікно Нового проекту .
-
У розділі Проекту типівклацніть Visual Basic проектіві виберіть Застосунок для консолішаблони.
-
Введіть у полі " ім'я ",MyAppа потім натисніть кнопку OK. За промовчанням створюється файл Module1.vb.Якщо використовується Microsoft Visual C# .NET створюється файл Class1.cs.
-
На початку, додайте наведений нижче код:Microsoft Visual Basic .NET код
Imports SystemImports System.Data.OleDb
Visual C# веб-код
using System.Data.OleDb;
-
Основніпорядку, додайте наведений нижче код:Visual Basic .NET код
Dim cn As OleDbConnectionDim cmd As OleDbCommandDim r As OleDbDataReaderDim sid As StringDim orlcmd As StringDim 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 TryCatch ex As OleDbException Console.WriteLine(ex.ToString())End TryConsole.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();
Примітка. Змінити рядок підключення відповідно до вашого середовища.
-
У меню створити виберіть пункт " Побудувати рішення".
-
У меню налагодження командуНа початку. Ви бачите, що команди відображається у вікні консолі.
-
У Oracle SQL * Крім того, виконання команди, яка відображається у вікні консолі.
-
Натисніть клавішу ENTER. У вікні консолі відображається за винятком, описане в розділі "Ознаки".
Посилання
Щоб отримати додаткові відомості про до Microsoft OLE DB Provider для Oracle відвідайте веб-сайт Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms810685.aspxЩоб отримати додаткові відомості клацніть номер статті в базі знань Microsoft Knowledge Base:
824684 Опис стандартну термінологію, яка використовується для опису оновлень програмних продуктів МайкрософтПродукти сторонніх виробників, які розглядаються в цій статті, розроблені компаніями, що не залежать від корпорації Майкрософт. Корпорація Майкрософт не надає жодних гарантій, неявних або інших, стосовно продуктивності або надійності цих продуктів.