강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

ORA-12154 조치 방법
작성자 : 13 김영철
등록날짜 : 2009.01.29 16:49
4,422
출처: http://hasucoder.tistory.com/category/DataBase

BULLETIN CATEGORY
BULLETIN TOPIC
: SQL*NET 
: SQL*NET V2사용시 ORA-12154 조치 방법

ORA-12154의 원인은 tnsnames.ora 파일의 Alias처럼 정의된 Connect String으로 사용하는 db_alias를 찾지 못할 경우 발생한다. 
WINDOWS, OS/2 CLIENT PART 
  1. Login Box를 통해 접속을 할 경우에는 Connect String의 Field에서 @ 기호로 시작하지 않는다. @ 기호는 패스워드뒤에 공란없이 바로 Connect String (예: username/password@db_alias)을 지정하는 경우에 사용한다. 
    Connect String을 입력하는 Field에서 아래와 같이 기술한다. 
       tns:db_alias 
       또는 
        db_alias 
  2. TNSNAMES.ORA 파일은 반드시 Client PC의 ORACLE_HOMEnetworkadmin 디렉토리에 있어야  하며, 사용자가 지정한 Connect string은 TNSNAMES.ORA 파일에  정의된  db_alis명이 기술 되어 있어야 한다. 
         
  3. TNSNAMES.ORA 파일의 괄호(괄호쌍)를 제대로 열고 닫았는지 확인한다. 
  4. 만일 사용자가 TCP/IP를 사용하고 있다면 TNSNAMES.ORA 파일에 기술되어 있는 HOST=HOSTNAME을 HOST=IP ADDRESS로 변경한다. 
  5. SQLNET.ORA 파일을 점검하여 'names.default_zone=' 파라메타를 확인한다. 만일 SQLNET.ORA 파일에 이 파라메타가 존재하면 '#'으로 막는다. 
       #names.default_zone=[world] 
  6. 하나의 단일 Community에서 이용한다면 TNSANMES.ORA에 기술되어 있는 'COMMUNITY' 파라메타를 '#' 으로 막는다. 
      [db_alias] =
        (DESCRIPTION =
          (ADDRESS_LIST =
          (ADDRESS =
        #     (COMMUNITY = SAMPLE_COMMUNITY)
            (PROTOCOL = TCP)
           (HOST = [SERVER])
             (PORT = 1521)
           )
          )
         (CONNECT_DATA =
           (SID = [SID])
         )
       ) 
    [주의] 상기의 <...>에 기술된 내용의 db_alias는 사용자 정의 필드이고, Server는 현재 사용자가 사용중인 server의 host_alias name 또는 IP Address를, SID는 설치된 ORACLE Instance 명을 기술하여야 하며, db_alias 명은 SID와 동일해서는 안된다. 접속 기술자로 사용되는 db_alias의 경우 접속시 대.소문자 구분을 한다. 
  7. SQLNET.ORA 파일을 점검하여 본다. 만일 파일내에 names.default_domain= 파라메타가 있다면 TNSNAMES.ORA의 db_alias 이름의 확장자로서 .을 가지고 있어야 한다. 그렇지 않으면 SQL*NET V2 접속을 할때 ora-12154 에러가 발생한다. 
    만일 TNSNAMES.ORA 파일에 db_alias명에 .[string]을 포함하고 있고 사용자가 확장자 없이 db_alias로 접속을 시도시에 ora-12154 에러가 발생하였다면 SQLNET.ORA 파일에 names.default_domain=[string] 을 추가해야만 한다.  [ 예제 : SQLNET.ORA ] 
    TRACE_LEVEL_CLIENT = OFF
    sqlnet.expire_time = 1
    names.default_domain = world
    name.default_zone = world
    [ 예제 :  TNSNAMES.ORA ] 
    NT_SRV.world =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS =
            (COMMUNITY = NTCommun.world)
            (PROTOCOL = TCP)
            (Host = 152.68.31.100)
            (Port = 1521)
          )
        )
       (CONNECT_DATA = (SID = ORCL)
       )
      )
    [ 예제 :  LISTENER.ORA ] 
    LISTENER =
      (ADDRESS_LIST =
        (ADDRESS=
          (PROTOCOL=IPC)
          (KEY= oracle.world)
        )
          (ADDRESS=
          (PROTOCOL=IPC)
          (KEY= ORCL)
        )
          (ADDRESS =
          (COMMUNITY = NTCommun.world)
        (PROTOCOL = TCP)
          (Host = 152.68.31.100)
          (Port = 1521)
        )
      ) 
    STARTUP_WAIT_TIME_LISTENER = 0
    CONNECT_TIMEOUT_LISTENER = 10
    TRACE_LEVEL_LISTENER = ADMIN
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = ORCL)
        )
      )
UNIX CLIENT PART 
  1. 상기의 WINDOWS, OS/2 Client의 1, 2 번 참조 
  2. 환경 변수로 TNSNAMES.ORA나 LISTENER.ORA 파일이 위치하고 있는 디렉토리가 TNS_ADMIN에서 제대로 지정하고 있나 확인한다. 
      Cshell을 사용한다면 : 
        % env | grep TNS_ADMIN 
    정확한 디레토리를 지정하고 있지 않으면  다음과 같이 TNS_ADMIN 환경변수에 정확한 디렉토리를 설정한다. 
      % setenv TNS_ADMIN 
  3. 사용자의 Configuration 파일들에 혹시 CTRL-M의 문자가 라인의 끝에 삽입되어 있나 확인한다. 
  4. 사용자의 Connect String이 정확하다면 TNSNAMES.ORA의 db_alias 이름을 SID명과 동일하게 주었는지 확인한다. 
    SID와 db_alias는 다르게 기술해야 하며, 혹 Host명과 동일하게 주는 경우도 있는데, 이렇게 기술하면 Error를 발생시킬 수도 있다. 
       Sample V2 Connect String :
       sqlplus [user]/[passwd]@[tnsnames.ora에 있는 db_alias]
       Example   :  sqlplus scott/tiger@V715tcp
       TNSNAMES.ORA 파일의 예제 :
       V715tcp =
         (DESCRIPTION =
           (ADDRESS_LIST =
             (ADDRESS =
              (protocol = TCP)
              (host = korea)
              (port = 2000)
            )
           )
          (CONNECT_DATA =
            (SID = V715)
          )
        ) 
  5. TNSNAMES.ORA File이 여러곳에 있는지 확인한다. TNSNAMES.ORA 파일은 3곳중 한곳에 있을 수 있다. 
    SQL*NET V2의 Search Path Priority. 
    여기서는 SQL*NET V2 구성파일(LISTENER.ORA와 TNSNAMES.ORA)을 찾는 순위에 대해 기술한다. ORACLE에서는 구성파일을 다음과 같은 순서로 찾는다.
     
    1. 만일 TNS_ADMIN 환경변수가 설정되어 있고 또한 디렉토리를 지정하고 있으면 확인한다. 
    2. /etc 디렉토리를 확인한다. 
    3. $ORACLE_HOME/network/admin을 확인한다. 

Oracle Korea Customer Suppo  

 

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
3135 브라우저객체 - screen 객체 13 김영철 01.29 2864
3134 오른쪽 막기 소스 13 김영철 01.29 2828
3133 EMBED의 모든것!! 13 김영철 01.29 2806
열람중 ORA-12154 조치 방법 13 김영철 01.29 4423
3131 [엑셀과 mysql의 데이터이동] 13 김영철 01.14 3084
3130 액티브X IE 패치에 따른 자동 자바스크립트 출력 소스 (회피법) 13 김영철 01.14 3052
3129 익스플로러(IE)플러그인ActiveX액티브엑스활성화특허침해에따른 설계변경패치에대한 개발코딩간편변경방법 13 김영철 01.14 2991
3128 PHP has encountered an Access Violation at 에러 구문 13 김영철 01.14 3001
3127 PHP.INI 설정에 따른 변수 이름 바꾸기 13 김영철 01.14 2834
3126 휴대폰 하이픈 처리 함수 13 김영철 01.14 2927
3125 POST , GET 으로 변수 전달 안될때 13 김영철 01.14 3253
3124 라이오 버튼 디버깅용 체크여부 확인 13 김영철 01.14 2683
3123 특정부분만 프린트하기 13 김영철 01.14 2741
3122 위지에디터 모음 13 김영철 01.14 3189
3121 자바스크립트 관련 페이지 이동 함수 13 김영철 01.14 2781
3120 다중업로드소스 - 검증완료 13 김영철 01.14 2888
3119 현재접속자 구하기 13 김영철 01.14 2758
3118 $_SERVER 변수의 모든것 13 김영철 01.14 2876
3117 php mail 함수는 sendmail 을 사용 13 김영철 01.14 3458
3116 업로드시 그림 파일명이 한글일경우 이름 자동 변경하기 13 김영철 01.14 3603
3115 php.ini register_globals 13 김영철 01.14 2769
3114 php전역변수 13 김영철 01.14 2892
3113 자바스크립트 라이브러리와 PHP함수 라이브러리 13 김영철 01.14 4188
3112 register_globals = on /off 차이점 13 김영철 01.14 2679
3111 PHP.INI 내용과 각 옵션의 기능(PHP4 기준) 13 김영철 01.14 2925
3110 HTML 내에 PHP 삽입과 특수문자 출력 13 김영철 01.14 3425
3109 개행문자없애기 13 김영철 01.14 2826
3108 테이블 유뮤 확인하는 방법 13 김영철 01.14 2645
3107 쿠키사용 13 김영철 01.14 2592
3106 HTTP_REFERER 사용하기 13 김영철 01.14 2823
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취