SQL Server Oracle 데이터베이스에 연결된 서버 설정 및 문제 해결

이 문서에서는 Microsoft SQL Server 실행하는 컴퓨터에서 Oracle 데이터베이스로 연결된 서버를 설정하는 방법을 설명하고 Oracle 데이터베이스에 연결된 서버를 설정할 때 발생할 수 있는 일반적인 오류에 대한 기본 문제 해결 단계를 제공합니다.

원래 제품 버전: Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition
원본 KB 번호: 280106

요약

이 문서에서는 Microsoft SQL Server 실행하는 컴퓨터에서 Oracle 데이터베이스로 연결된 서버를 설정하는 방법을 설명하고 Oracle에 연결된 서버를 설정할 때 발생할 수 있는 일반적인 오류에 대한 기본 문제 해결 단계를 제공합니다. 이 문서의 대부분의 정보는 MSDAORA(Microsoft OLEDB Provider for Oracle)를 사용하도록 구성된 환경에 적용됩니다. 새 개발 작업에서 이 기능을 사용하지 말고 현재 이 기능을 사용하는 애플리케이션을 수정할 계획입니다. 대신 Oracle의 OLE DB 공급자를 사용합니다.

Oracle의 OLEDB 공급자를 사용하여 연결된 서버를 구성하는 방법에 대한 자세한 내용은 Oracle 및 연결된 서버를 사용하여 시작하고 실행하는 방법을 참조하세요.

중요

현재 버전의 Microsoft ODBC Driver for Oracle은 ODBC 2.5 사양을 준수하는 반면 Oracle용 OLE DB 공급자는 네이티브 Oracle 7 OCI API 공급자입니다. 드라이버와 공급자는 모두 SQL*Net Client(또는 Oracle 8x용 Net8 클라이언트) 및 OCI(Oracle 호출 인터페이스) 라이브러리 및 기타 Oracle 클라이언트 구성 요소를 사용하여 Oracle 데이터베이스에 연결하고 데이터를 검색합니다. Oracle 클라이언트 구성 요소는 중요하며 드라이버와 공급자를 모두 사용하여 Oracle 데이터베이스에 성공적으로 연결하려면 올바르게 구성되어야 합니다.

MICROSOFT MDAC(데이터 액세스 구성 요소) 버전 2.5 이상 버전에서 Microsoft ODBC 드라이버와 OLE DB 공급자는 모두 다음과 같은 제한 사항이 있는 Oracle 7 및 Oracle 8i만 지원합니다.

  • CLOB, BLOB, BFILE, NCHAR, NCLOB 및 NVARCHAR2 같은 Oracle 8.x 관련 데이터 형식은 지원되지 않습니다.

  • Oracle 7.x 및 8.x 서버에 대한 유니코드 기능은 지원되지 않습니다.

  • 여러 Oracle 클라이언트 인스턴스 또는 여러 Oracle 홈은 SYSTEM PATH 변수에서 Oracle 홈이 처음 발생하므로 지원되지 않습니다.

  • 저장 프로시저 또는 일괄 처리 SQL 문에서 여러 결과 집합을 반환하는 것은 ADO 또는 OLEDB를 사용하여 지원되지 않습니다.

  • 중첩된 외부 조인은 지원되지 않습니다.

  • XML 지속성은 지원되지 않습니다.

  • 8i보다 큰 버전은 이러한 드라이버를 사용하여 지원되지 않습니다.

참고

이 문서에서 설명하는 타사 제품은 Microsoft와 무관한 제조업체의 제품입니다. Microsoft는 이들 제품의 성능이나 신뢰성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

Oracle에 연결된 서버를 설정하는 단계

  1. 연결된 서버가 설정된 SQL Server 실행 중인 컴퓨터에 Oracle 클라이언트 소프트웨어를 설치해야 합니다.

  2. SQL Server 실행 중인 컴퓨터에 원하는 드라이버를 설치합니다. Microsoft는 Microsoft OLE DB Provider for Oracle 및 Microsoft ODBC Driver for Oracle만 지원합니다. 타사 공급자 또는 타사 드라이버를 사용하여 Oracle에 연결하는 경우 공급자 또는 드라이버를 사용하여 발생할 수 있는 문제에 대해서는 해당 공급업체에 문의해야 합니다.

  3. Microsoft OLE DB Provider for Oracle 및 Microsoft ODBC Driver for Oracle을 사용하는 경우 다음을 고려합니다.

    • OLE DB 공급자와 MDAC(Microsoft Data Access Components)에 포함된 ODBC 드라이버에는 SQL*Net 2.3.x 이상 버전이 필요합니다. 클라이언트 컴퓨터에 Oracle 7.3.x 클라이언트 소프트웨어 또는 이후 버전을 설치해야 합니다. 클라이언트 컴퓨터는 SQL Server 실행 중인 컴퓨터입니다.

    • SQL Server 실행 중인 컴퓨터에 MDAC 2.5 이상 버전이 설치되어 있는지 확인합니다. MDAC 2.1 또는 이전 버전에서는 Oracle 8을 사용하는 데이터베이스에 연결할 수 없습니다. x 이상 버전입니다.

    • MDAC 2.5 이상 버전을 사용하도록 설정하려면 다음 표와 같이 SQL Server 실행 중인 클라이언트 컴퓨터에서 레지스트리를 수정해야 합니다.

      Oracle
      Client               Microsoft Windows 2000 and later versions
      --------------------------------------------------------------------------
      
      7.x                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa73.dll"
                           "OracleSqlLib"="SQLLib18.dll"
                           "OracleOciLib"="ociw32.dll"
      
      8.0                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa80.dll"
                           "OracleSqlLib"="sqllib80.dll"
                           "OracleOciLib"="oci.dll"
      
      8.1                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="oraclient8.dll"
                           "OracleSqlLib"="orasql8.dll"
                           "OracleOciLib"="oci.dll"
      
  4. Oracle 클라이언트 소프트웨어를 설치한 후 SQL Server 실행 중인 컴퓨터를 다시 시작합니다.

  5. SQL Server 실행 중인 컴퓨터에서 다음 스크립트를 사용하여 연결된 서버를 설정합니다.

    -- Adding linked server (from SQL Server Books Online):
    /* sp_addlinkedserver [@server =] 'server'[, [@srvproduct =] 'product_name']
     [, [@provider =] 'provider_name']
     [, [@datasrc =] 'data_source']
     [, [@location =] 'location'] [, [@provstr =] 'provider_string'] 
     [, [@catalog =] 'catalog']
    */
    
    EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817'
    
    -- Adding linked server login:
    /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'[,[@useself =] 'useself']
     [,[@locallogin =] 'locallogin']
     [,[@rmtuser =] 'rmtuser']
     [,[@rmtpassword =] 'rmtpassword']
    */
    
    EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger'
    
    -- Help on the linked server:
    EXEC sp_linkedservers
    EXEC sp_helpserver
    select * from sysservers
    

    참고

    Microsoft ODBC Driver for Oracle을 사용하는 경우 매개 변수를 @datasrc 사용하여 DSN 이름을 지정할 수 있습니다. DSN이 없는 연결의 경우 공급자 문자열은 @provstr 매개 변수를 통해 제공됩니다. Microsoft OLE DB Provider for Oracle 사용하여 @datasrc 매개 변수에 대해 TNSNames.Ora 파일에 구성된 Oracle 서버 별칭을 사용합니다. 자세한 내용은 온라인 SQL Server 설명서의 "sp_addlinkedserver" 항목을 참조하세요.

일반적인 오류 메시지 및 문제 해결 방법

중요

이 절, 방법 또는 작업에는 레지스트리를 수정하는 방법에 대한 단계가 포함되어 있습니다. 그러나 레지스트리를 잘못 수정하면 심각한 문제가 발생할 수 있습니다. 따라서 다음 단계를 주의하여 수행해야 합니다. 추가된 보호를 위해 레지스트리를 수정하기 전에 백업하세요. 그런 다음 문제가 발생할 경우 레지스트리를 복원할 수 있습니다. 레지스트리를 백업하고 복원하는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료: 322756 Windows에서 레지스트리를 백업 및 복원하는 방법 문서를 확인합니다.

다음 두 가지 방법 중 하나를 사용하여 분산 쿼리를 실행할 때 발생하는 오류에 대한 확장 정보를 검색할 수 있습니다.

  • 방법 1

    SQL Server Management Studio 사용하여 SQL Server 연결하고 다음 코드를 실행하여 추적 플래그 7300을 켭니다.

    DBCC Traceon(7300)
    
  • 방법 2

    SQL Profiler의 "오류 및 경고" 이벤트 범주에 있는 "OLEDB 오류" 이벤트를 캡처합니다. 오류 메시지 형식은 다음과 같습니다.

    인터페이스::메서드가 16진수 오류 코드로 실패했습니다.

    MDAC SDK(소프트웨어 개발 키트)에 포함된 Oledberr.h 파일에서 16진수 오류 코드를 조회할 수 있습니다.

다음은 오류 메시지 문제를 해결하는 방법에 대한 정보와 함께 발생할 수 있는 일반적인 오류 메시지 목록입니다.

참고

SQL Server 2005 이상 버전을 사용하는 경우 이러한 오류 메시지는 약간 다를 수 있습니다. 그러나 이러한 오류 메시지의 오류 ID는 이전 버전의 SQL Server 것과 동일합니다. 따라서 오류 ID로 식별할 수 있습니다. 성능 관련 문제는 SQL Server 온라인 설명서에서 분산 쿼리 최적화 항목을 검색합니다.

  • 메시지 1

    오류 7399: 연결된 서버 "%ls"에 대한 OLE DB 공급자 "%ls"이(가) 오류를 보고했습니다. %ls

    추적 플래그 7300을 켜거나 SQL Profiler를 사용하여 OLEDB Errors 이벤트를 캡처하여 확장된 OLEDB 오류 정보를 검색합니다.

  • 메시지 2a

    "ORA-12154: TNS:서비스 이름을 resolve 수 없습니다."

  • 메시지 2b

    "Oracle(tm) 클라이언트 및 네트워킹 구성 요소를 찾을 수 없습니다. 이러한 구성 요소는 Oracle Corporation에서 제공하며 Oracle 버전 7.3.3 이상 클라이언트 소프트웨어 설치의 일부입니다."

    이러한 오류는 Oracle 서버에 연결 문제가 있을 때 발생합니다. 추가 문제 해결을 위해 아래 Oracle 서버에 대한 연결 문제를 해결하려면 기술을 검토하세요.

  • 메시지 3

    오류 7302: 연결된 서버 "%ls"에 대한 OLE DB 공급자 'MSDAORA'의 instance 만들 수 없습니다.

    MSDAORA.dll 파일이 올바르게 등록되었는지 확인합니다. (MSDAORA.dll 파일은 Oracle용 Microsoft OLE DB 공급자 파일입니다.) RegSvr32.exe 사용하여 Microsoft OLE DB Provider for Oracle 등록합니다.

    참고

    타사 Oracle 공급자를 사용하고 Oracle 공급자가 SQL Server 프로세스 외부에서 실행할 수 없는 경우 공급자 옵션을 변경하여 In Process를 실행하도록 설정합니다. 공급자 옵션을 변경하려면 다음 방법 중 하나를 사용합니다.

    • 방법 1 다음 레지스트리 키를 찾습니다. 그런 다음, AllowInProcess(DWORD) 항목의 값을 1로 변경합니다. 이 레지스트리 키는 해당 공급자 이름 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName아래에 있습니다.

    • 방법 2 다음 단계에 따라 SQL Server Management Studio(SSMS)를 사용하는 공급자에 대한 inprocess 허용 옵션을 설정합니다.

    1. SSMS를 열고 SQL Server instance 연결합니다.
    2. 개체 탐색기서버 개체>연결된 서버>공급자로 이동합니다.
    3. 구성하려는 공급자를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
    4. 공급자 옵션 창에서 inprocess 허용 옵션에 대해 사용 상자를 검사.
  • 메시지 4

    오류 7303: 연결된 서버 "%ls"에 대한 OLE DB 공급자 'MSDAORA'의 데이터 원본 개체를 초기화할 수 없습니다. [OLE/DB 공급자가 반환한 메시지: ORA-01017: 잘못된 사용자 이름/암호, 로그온 거부됨] OLE DB 오류 추적 [OLE/DB 공급자 'MSDAORA' IDBInitialize::initialize returned 0x80040e4d].

    이 오류 메시지는 연결된 서버에 올바른 로그인 매핑이 없음을 나타냅니다. 저장 프로시저를 sp_helplinkedsrvlogin 실행하여 로그인 정보를 올바르게 설정할 수 있습니다. 또한 연결된 서버 구성에 대한 올바른 매개 변수를 지정했는지 확인합니다.

  • 메시지 5

    오류 7306: 연결된 서버 "%ls"에 대한 OLE DB 공급자 'MSDAORA'에서 테이블 '%ls'을(를) 열 수 없습니다. 지정된 테이블이 없습니다. [OLE/DB 공급자가 반환한 메시지: 테이블이 없습니다.] [OLE/DB 공급자가 반환한 메시지: ORA-00942: 테이블 또는 뷰가 없습니다.] OLE DB 오류 추적 [OLE/DB 공급자 'MSDAORA' IOpenRowset::OpenRowset 반환 0x80040e37: 지정된 테이블이 없습니다.].

    오류 7312: 연결된 서버 "%ls"에 대해 OLE DB 공급자 '%ls'에 스키마 및/또는 카탈로그를 잘못 사용했습니다. 네 부분으로 구성된 이름이 제공되었지만 공급자는 카탈로그 및/또는 스키마를 사용하는 데 필요한 인터페이스를 노출하지 않습니다.

    오류 7313: 연결된 서버 "%ls"의 공급자 "%ls"에 대해 잘못된 스키마 또는 카탈로그가 지정되었습니다.

    오류 7314: 연결된 서버 "%ls"에 대한 OLE DB 공급자 "%ls"에 테이블 "%ls"이(가) 없습니다. 테이블이 없거나 현재 사용자에게 해당 테이블에 대한 권한이 없습니다.

    이러한 오류 메시지가 표시되면 Oracle 스키마에 테이블이 없거나 해당 테이블에 대한 권한이 없을 수 있습니다. 대문자를 사용하여 스키마 이름을 입력했는지 확인합니다. 테이블 및 열의 사전순 사례는 Oracle 시스템 테이블에 지정된 대로 지정해야 합니다.

    Oracle 쪽에서는 큰따옴표 없이 만든 테이블 또는 열이 대문자로 저장됩니다. 테이블 또는 열이 큰따옴표로 묶이면 테이블 또는 열이 있는 그대로 저장됩니다.

    다음 호출은 테이블이 Oracle 스키마에 있는지를 보여 줍니다. 이 호출은 정확한 테이블 이름도 표시합니다.

    sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
    
  • 메시지 6

    오류 7413: 연결된 서버 '%ls'(OLE DB 공급자 '%ls')에 연결할 수 없습니다. 위임을 사용하도록 설정하거나 현재 사용자에 대한 원격 SQL Server 로그인을 사용합니다. Msg 18456, 수준 14, 상태 1, 줄 1 로그인이 사용자 ''에 실패했습니다.

    이 오류 메시지는 명시적 로그인 매핑 없이 Microsoft Windows 인증 로그인에 대해 분산 쿼리가 시도되고 있음을 나타냅니다. 보안 위임이 지원되지 않는 운영 체제 환경에서 인증된 Windows NT 로그인을 사용하여 sp_addlinkedsrvlogin만든 원격 로그인 및 암호에 대한 명시적 매핑이 필요합니다.

  • 메시지 7

    오류 7391: 연결된 서버 "%ls"에 대한 OLE DB 공급자 'MSDAORA'가 분산 트랜잭션을 시작할 수 없기 때문에 작업을 수행할 수 없습니다. OLE DB 오류 추적 [OLE/DB 공급자 'MSDAORA' ITransactionJoin::JoinTransaction 반환 0x8004d01b]

    이 문서의 앞부분에서 설명한 대로 OCI 버전이 올바르게 등록되었는지 확인합니다.

    참고

    레지스트리 항목이 모두 올바르면 MtxOCI.dll 파일이 로드됩니다. MtxOCI.dll 파일이 로드되지 않은 경우 Microsoft OLE DB Provider for Oracle 사용하거나 Oracle용 Microsoft ODBC Driver를 사용하여 Oracle에 대해 분산 트랜잭션을 수행할 수 없습니다. 타사 공급자를 사용 중이고 오류 7391이 표시되는 경우 사용 중인 OLE DB 공급자가 분산 트랜잭션을 지원하는지 확인합니다. OLE DB 공급자가 분산 트랜잭션을 지원하는 경우 MSDTC(Microsoft Distributed Transaction Coordinator)가 실행 중이고 네트워크 액세스가 사용하도록 설정되어 있는지 확인합니다.

  • 메시지 8

    오류 7392: 연결된 서버 "%ls"에 대한 OLE DB 공급자 'MSDAORA'에 대한 트랜잭션을 시작할 수 없습니다. OLE DB 오류 추적 [OLE/DB 공급자 'MSDAORA' ITransactionLocal::StartTransaction 반환 0x8004d013: ISOLEVEL=4096].

    OLE DB 공급자는 이 세션에 대해 하나의 트랜잭션만 활성화할 수 있으므로 오류 7392를 반환했습니다. 이 오류는 연결이 명시적 또는 암시적 트랜잭션에 있고 OLE DB 공급자가 중첩된 트랜잭션을 지원하지 않을 때 OLE DB 공급자에 대해 데이터 수정 문이 시도되고 있음을 나타냅니다. SQL Server 특정 오류 조건에서 트랜잭션을 계속하면서 데이터 수정 문의 영향을 종료할 수 있도록 이 지원이 필요합니다.

    ON인 경우 SET XACT_ABORT SQL Server OLE DB 공급자의 중첩 트랜잭션 지원이 필요하지 않습니다. 따라서 암시적 또는 명시적 트랜잭션의 원격 테이블에 대해 데이터 수정 문을 실행하기 전에 를 실행 SET XACT_ABORT ON 합니다. 사용 중인 OLE DB 공급자가 중첩 트랜잭션을 지원하지 않는 경우 이 작업을 수행합니다.

Oracle 서버에 대한 연결 문제를 해결하는 기술

Oracle용 Microsoft ODBC 드라이버 또는 Microsoft OLE DB Provider for Oracle Oracle 연결 문제를 디버그하려면 다음 단계를 수행합니다.

  1. Oracle SQL Plus 유틸리티(명령줄 기반 쿼리 유틸리티)를 사용하여 Oracle에 연결하고 데이터를 검색할 수 있는지 확인합니다.

    참고

    Oracle에 연결하고 데이터를 검색할 수 없는 경우 Oracle 클라이언트 구성 요소의 잘못된 설치 또는 구성이 있거나 SQL*Net Easy Configuration 또는 Oracle Net8 Easy Configuration 유틸리티를 사용할 때 Oracle 서버에 대한 TNS(투명한 네트워크 기판) 서비스 별칭을 올바르게 만들지 못했습니다. Oracle DBA(데이터베이스 관리자)에게 문의하여 필수 Oracle 구성 요소가 올바르게 설치 및 구성되어 있는지 확인합니다.

  2. 컴퓨터에 설치된 Oracle 클라이언트(SQL*Net 버전)의 버전을 확인합니다. Oracle용 Microsoft ODBC 드라이버와 Microsoft OLE DB Provider for Oracle 모두 클라이언트 컴퓨터에 SQL*Net 버전 2.3 이상을 설치해야 합니다.

    SQL Plus(Oracle 클라이언트 쿼리 도구)의 연결이 작동하는 것처럼 보일 수 있지만 ODBC/OLE DB 연결이 제대로 작동하려면 컴퓨터를 다시 시작해야 합니다.

    참고

    Oracle 8i를 사용하면 .rgs 파일이 비어 있습니다.

  3. Oracle 클라이언트가 설치되어 있고 Oracle 클라이언트 구성 요소 7.3 이상을 컴퓨터에 설치해야 한다는 오류가 표시되는 경우 클라이언트 컴퓨터의 환경 변수 PATH에 oracle 클라이언트가 설치된 폴더( 예: Oracle_Root\Bin)가 포함되어 있는지 확인합니다. 이 폴더를 찾을 수 없는 경우 PATH 변수에 폴더를 추가하여 오류를 resolve.

  4. Ociw32.dll 파일이 Oracle_Root\bin 폴더에 있는지 확인합니다. 이 .dll 파일은 클라이언트 컴퓨터의 다른 위치에 있을 수 없습니다. Oracle 클라이언트 구성 요소 DLL(예: Core40.dll 파일 및 Ora*.dll 파일)이 Oracle_Root 폴더 또는 하위 폴더 외부에 없는지 확인합니다.

  5. 단일 Oracle 클라이언트 버전이 컴퓨터에 설치되어 있는지 확인합니다. 여러 버전의 SQL*Net은 방해가 있고 중요한 작업(예: TNS 및 별칭 조회)이 있는 동일한 클라이언트 컴퓨터에 존재할 수 없습니다.

  6. Microsoft는 Oracle 클라이언트를 로컬로 설치하고 컴퓨터에 원격 Oracle 클라이언트를 매핑한 다음 ODBC/OLE DB를 통해 Oracle에 연결하기 위해 시스템의 경로에 포함하지 않는 것이 좋습니다. 그러나 공급자와 드라이버는 네트워크 공유가 아닌 로컬로 설치된 Oracle 클라이언트로 테스트됩니다.

참고 항목