증상

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 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 * 또한 콘솔 창에 표시 되는 명령을 실행 합니다.

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

참조

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

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

Microsoft 소프트웨어 업데이트를 설명 하는 데 사용 되는 표준 용어에 대 한 824684 설명

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

추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

번역 품질에 얼마나 만족하시나요?

사용 경험에 어떠한 영향을 주었나요?

추가 피드백이 있으신가요? (선택 사항)

소중한 의견에 감사드립니다.

×