증상
Microsoft OLE DB 공급자에 대 한 Oracle (MSDAORA)를 사용 하 여 Oracle 데이터베이스에 연결 하 고 서버 쪽에서 연결을 종료 하십시오. 응용 프로그램에서 Oracle 데이터베이스에 대 한 새 연결을 열 때 다음과 같은 예외 오류 메시지가 나타납니다.
System.Data.OleDb.OleDbException: 지정 되지 않은 오류
ORA-01012:이 로그온 하지 않은원인
MSDAORA 사용 하는 동안 서버 쪽 Oracle 데이터베이스에 대 한 연결을 종료 하는 경우 연결이 끊어진된 연결 풀으로 반환 됩니다. 연결 풀링 제대로 작용 하지 MSDAORA의 ResetConnection 속성을 사용 하 여. 공급자가이 속성이 지원 되지 않습니다, 풀링 코드가 잘못 해석 하지 연결 다시 설정 하 고 연결이 유효한 지. 클라이언트 코드는 새 연결을 열면 연결 풀으로 반환 된 연결이 끊어진된 가져올 수 있습니다. 따라서 "현상" 절에 나와 있는 오류 메시지가 나타납니다.
해결 방법
핫픽스 정보
지원 되는 핫픽스를 Microsoft에서 출시 되었습니다. 그러나이 문서에서 설명 하는 문제를 해결 하는 데 사용 됩니다. 이러한 특정 문제가 발생 한 시스템에만 적용 됩니다. 이 핫픽스는 추가 테스트가 필요할 수 있습니다. 따라서이 문제로 심각 하 게 영향을 받지 않습니다이 핫픽스가 포함 된 다음 서비스 팩이 나올 때까지 기다리는 것이 좋습니다.
이 문제를 즉시 해결 하려면 핫픽스를 얻으려면 Microsoft 고객 지원 서비스에 문의 합니다. Microsoft 고객 기술 지원부 전화 번호 및 지원 비용에 대 한 정보를 전체 목록은 다음 Microsoft 웹 사이트를 방문.http://support.microsoft.com/contactus/?ws=support참고: 특별 한 경우에 Microsoft 기술 지원 전문가가 특정 업데이트로 문제를 해결할 수 있는지 결정 하는 경우 일반적으로 지원 요청에 따른 비용이 취소 될 수도 있습니다. 추가 지원 질문과 특정 업데이트가 필요 하지 않은 문제에는 일반 지원 비용이 적용 됩니다.
파일 정보
이 핫픽스의 영어 버전은 다음 표에 열거된 파일 특성 (또는 그 이후의 파일 특성)을 가지고 있습니다. 이러한 파일의 시간과 날짜는 협정 세계시(UTC)로 나열되었습니다. 파일 정보를 볼 때는 로컬 시간으로 변환됩니다. 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
이 핫픽스를 사용할 수 누적 핫픽스 패키지 일부로. Microsoft 고객 기술 지원부에서이 핫픽스를 받을 때 핫픽스 패키지에 나와 있는 문서 번호는 MDAC 2.8을 839801 또는 836799 MDAC 2.7 s p 1에 대 한 됩니다. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조 하십시오.
MDAC 2.8839801 수정: 핫픽스 MDAC 2.8에 사용할 수 있는 MDAC 2.7 S P 1
836799 수정: 핫픽스 MDAC 2.7 서비스 팩 1에 사용할 수 있는
상태
Microsoft는 이 문제가 '적용 대상' 섹션에 나열된 Microsoft 제품의 문제임을 확인했습니다.
자세한 내용
동작을 재현 하는
-
Microsoft Visual Studio.NET을 시작 합니다.
-
파일 메뉴에서 가리킨
새로만들기를 누른 다음 프로젝트를 클릭 합니다. 새 프로젝트 대화 상자가 나타납니다. -
프로젝트 형식 Visual Basic 프로젝트를 클릭 한 다음 템플릿에서 콘솔 응용 프로그램을 클릭 합니다.
-
이름 상자에 입력
MyApp를 선택한 다음 확인을 누릅니다. 기본적으로 Module1.vb 파일이 만들어집니다. Microsoft Visual C#.NET을 사용 하는 경우 Class1.cs 파일이 만들어집니다. -
맨 위쪽에 다음 코드를 추가 합니다.
Microsoft Visual Basic.NET 코드Imports System
Imports System.Data.OleDbVisual C#.NET 코드
using System.Data.OleDb;
-
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();참고: 환경에 맞게 연결 문자열을 수정 합니다.
-
빌드 메뉴에서 솔루션 빌드를 클릭 합니다.
-
디버그 메뉴에서 클릭
시작합니다. 명령 콘솔 창에 표시 되도록 표시 됩니다. -
Oracle SQL * 또한 콘솔 창에 표시 되는 명령을 실행 합니다.
-
ENTER 키를 누릅니다. 콘솔 창에서 "현상" 절에서 설명한 예외가 나타날 수 있습니다.
참조
Microsoft OLE DB 공급자 oracle에 대 한 자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트를 방문 하십시오.
http://msdn2.microsoft.com/en-us/library/ms810685.aspx자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료에서 해당 문서를 확인하십시오.
Microsoft 소프트웨어 업데이트를 설명 하는 데 사용 되는 표준 용어에 대 한 824684 설명 이 문서에 나와있는 다른 공급업체 제품들은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이러한 제품의 성능 또는 안정성에 대해 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.