증상

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.8

839801 수정: 핫픽스 MDAC 2.8에 사용할 수 있는MDAC 2.7 S P 1

836799 수정: 핫픽스 MDAC 2.7 서비스 팩 1에 사용할 수 있는

상태

Microsoft는 이 문제가 '적용 대상' 섹션에 나열된 Microsoft 제품의 문제임을 확인했습니다.

자세한 내용

동작을 재현 하는

  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 SystemImports System.Data.OleDb

    Visual C#.NET 코드

    using System.Data.OleDb;
  6. Main프로시저에 다음 코드를 추가 합니다.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#.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 * 또한 콘솔 창에 표시 되는 명령을 실행 합니다.

  10. ENTER 키를 누릅니다. 콘솔 창에서 "현상" 절에서 설명한 예외가 나타날 수 있습니다.

참조

Microsoft OLE DB 공급자 oracle에 대 한 자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트를 방문 하십시오.

http://msdn2.microsoft.com/en-us/library/ms810685.aspx자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료에서 해당 문서를 확인하십시오.

Microsoft 소프트웨어 업데이트를 설명 하는 데 사용 되는 표준 용어에 대 한 824684 설명이 문서에 나와있는 다른 공급업체 제품들은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이러한 제품의 성능 또는 안정성에 대해 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.