.NET

Oracle ManagedDataAccess 에서 접속 오류 해결

김모작자 2016. 12. 14. 23:18

과거에는 Oracle ODP.net 을 사용하려면 Instant Client 가 필요했었다.
Instant Client 는 C 로 빌드된것으로 아키텍쳐에 따라 구분해서 사용했는데
이번에 다른 프로젝트를 만들다보니 새 버전이 나왔더라..
완전히 .net 으로 코딩된 새버전!

일단 아래 처럼 흔하디 흔한 시작 문자열을 가지고 시작했는데

using Oracle.ManagedDataAccess.Client;

....

....

        public OracleConnector(CONNECT_INFO info)
        {
            string src = string.Format("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={3}))(CONNECT_DATA=(SERVICE_NAME={4})));User Id={1};Password={2};", info.IP, info.LoginID, info.LoginPWD, info.PORT, info.ServiceID);
            con = new OracleConnection();
            con.ConnectionString = src;
            con.Open();
        }

자꾸

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): Oracle 통신: 서버에 접속하는 데 실패했거나 접속 문자열을 구문 분석하는 데 실패했습니다. ---> OracleInternal.Network.NetworkException (0x80004005): Oracle 통신: 서버에 접속하는 데 실패했거나 접속 문자열을 구문 분석하는 데 실패했습니다. ---> System.Security.Authentication.AuthenticationException: SSPI를 호출하지 못했습니다. 내부 예외를 참조하십시오. ---> System.ComponentModel.Win32Exception: 보안 패키지에 사용할 수 있는 인증서가 없습니다

에러가 나더라..  실제로 위와 같은 상황에서는 sqlplus 로 하면

ORA-12638: 신용 검색에 실패했습니다

주로 해당 PC 에 오라클이 기본 상태로 설치된 경우에 발생하는것 같다..

 

-------------------------

해결 방법?

 

1. 독립적인 환경 구성을 위해 TNS 관리자 경로를 자기 자신으로 설정한다
  --> app.config 또는 web.config 에 아래처럼 sqlnet.ora 경로를 추가로 써주면 된다. 실행 파일과 같은 경로에 있을 시 . 을 설정해주면 ㅇㅋ

  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <!--<dataSource alias="ExtOracle" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xxxxx)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=eeee))) "/> -->
      </dataSources>
      <settings>
        <setting name="TNS_ADMIN" value="." />
      </settings>
    </version>
  </oracle.manageddataaccess.client>

 

2. sqlnet.ora 파일 생성

 

sqlnet.authentication_services=(none)
NAMES.DIRECTORY_PATH=(TNSNAMES, EZCONNECT)

참고로 이 파일을 만든 후 파일 속성(Properties, Alt+F4)에 가서 "Overwrite if newer" 또는 "Copy Always" 를 선택해서 빌드된 경로로 복사되도록 한다.  

위 내용은 TNS 설정이름과  EzConnect 형태로 접속 문자열을 사용할 수 있도록 하는게 목적. SSPI 관련 문제는 위에 내용으로 대부분 커버가 되는것 같다. 

혹 이미 오라클 설치중이라면 admin 폴더를 찾아 위 파일을 변경하는게 좋긴 함..