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

ORA-12154 조치 방법
작성자 : 13 김영철
등록날짜 : 2009.01.29 16:49
4,425
출처: 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

번호 제목 글쓴이 날짜 조회
3225 내장 그래픽카드 죽이는 법 M 최고의하루 12.04 4494
3224 배너제작 프로그램 댓글9 17 미니 04.27 4473
3223 포토샵/일러스트레이터 초기화 시키기 2 천진난만 02.20 4440
3222 chgrp 명령어 사용법 13 김영철 01.29 4427
열람중 ORA-12154 조치 방법 13 김영철 01.29 4426
3220 [팁] XMLHttpRequest를 사용할 때 한글 파라미터의 인코딩 처리 방법 13 김영철 01.29 4414
3219 ntdll.dll 오류 해결방법 M 최고관리자 01.12 4403
3218 php 설치관련 문의내용 정리 13 김영철 01.14 4328
3217 윈도우XP의 숨겨진 기능 60가지-1 M 최고의하루 12.24 4316
3216 TextArea 자동으로 늘리기 99 단국강토 02.16 4315
3215 IP 주소를 빠르게 변경시켜주는 프로그램 - FreshIP_v1.0 댓글12 2 비비드바비 04.29 4288
3214 헤더 M 최고의하루 12.20 4280
3213 제약조건(1) M 최고의하루 12.20 4277
3212 [JavaScript] 자바스크립트에서 정규식을 사용한 체크 99 단국강토 02.02 4243
3211 윈도우XP의 숨겨진 기능 60가지-2 M 최고의하루 12.24 4237
3210 이미지 워터마크 삭제프로그램 17 미니 04.27 4196
3209 네이트온 방화벽 뚫기 - SSH를 이용한 방화벽 우회하기 M 최고의하루 12.19 4195
3208 간단한 리룩스명령어 13 김영철 01.13 4192
3207 자바스크립트 라이브러리와 PHP함수 라이브러리 13 김영철 01.14 4189
3206 Daum의 Ajax 개발 사례 13 김영철 01.29 4185
3205 msxml 사용준비~!(checklist& 설정사항) 13 김영철 01.29 4181
3204 SQL Injection 기법 정리(MSSQL) 13 김영철 01.24 4178
3203 [AIX]유용한 find 명령어에 대해서... 13 김영철 01.29 4169
3202 PHP 답변형 게시판 / 자료실 /PHP강좌 13 김영철 01.13 4163
3201 세션정보를 DB에 넣고 중복로그인 막고 사이트 통합로그인 13 김영철 01.13 4148
3200 MySQL, SQL문의 분류, Eclipse 셋팅, JDBC, 방명록 13 김영철 01.29 4121
3199 ASV 4.0 (Action Script Viewer 4.0) 99 단국강토 01.08 4090
3198 외부아이피 확인 댓글1 2 가이버김 09.14 4081
3197 TV를 모니터로 사용하기 M 운영자 12.23 4079
3196 이것은 AI파일 미리보기입니다. 댓글2 M 최고의하루 01.15 4071
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취