Microsoft로 로그인
로그인하거나 계정을 만듭니다.
안녕하세요.
다른 계정을 선택합니다.
계정이 여러 개 있음
로그인할 계정을 선택합니다.

증상

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 제품과 서비스를 개선하는 데 사용됩니다. IT 관리자는 이 데이터를 수집할 수 있습니다. 개인정보처리방침

의견 주셔서 감사합니다!

×