FIX: MSDAORA 사용하여 Oracle 데이터베이스에 연결할 때 ORA-01012 오류 메시지가 나타날

기술 자료 번역 기술 자료 번역
기술 자료: 834905 - 이 문서가 적용되는 제품 보기.
알림
이 핫픽스를 사용할 수 누적 핫픽스 패키지 일부로. Microsoft 기술 지원 서비스에 이 핫픽스는 핫픽스 패키지에 나와 있는 문서를 MDAC 2.8을 839801 또는 836799 MDAC 2.7 SP1에 대한 수 있습니다. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.

MDAC 2.8
839801FIX: 핫픽스 MDAC 2.8을 사용할 수 있습니다.
MDAC 2.7 SP1에
836799FIX: 핫픽스 MDAC 2.7 서비스 팩 1을 사용할 수 있습니다.
모두 확대 | 모두 축소

이 페이지에서

현상

Oracle (MSDAORA에 대한), Microsoft OLE DB 공급자를 사용하여 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는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열된 Microsoft 제품에서 이 문제를 확인했습니다.

추가 정보

Windows Mobile 기반 스마트폰에 GPRS 연결이 구성되어 있는지 확인합니다

  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. Enter 키를 누릅니다. 콘솔 창에서 "현상" 절에서 언급한 예외를 참조하십시오.

참조

Oracle에 대한 Microsoft OLE DB 공급자에 대한 자세한 내용은 다음 MSDN) Microsoft 개발자 네트워크 (웹 사이트를 방문하십시오.
http://msdn2.microsoft.com/en-us/library/ms810685.aspx
자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
824684Microsoft 소프트웨어 업데이트를 설명하는 데 사용되는 표준 용어에 대한 설명
이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft 는 이러한 제품의 성능 및 신뢰성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

속성

기술 자료: 834905 - 마지막 검토: 2007년 11월 15일 목요일 - 수정: 3.6
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Data Access Components 2.8
  • Microsoft Data Access Components 2.7 서비스 팩 1
키워드:?
kbmt kbhotfixserver kbqfe kbbug kbprovider kbconnectivity kbdatabase kboracle kbfix kbqfe KB834905 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com