ORA-12705: Cannot access NLS data files or invalid environment specified

스폰서 링크
Oracle DB
스폰서 링크

한글 버전 Windows2012R2 Server에서 Oracle Database를 설치해 orcl인스턴스를 기동해서 접속하면 모든 메시지의 기본 언어는 한글로 표시 됩니다. 이 메시지를 영문으로 표시하고 싶어서 ‘set NLS_LANG=AMERICAN_AMERICA.ASCII로 환경 변수를 변경하고 sqlplus로 서버에 orcl인스턴스에 접속했더니 다음과 같이 오류가 발생했습니다. 이유로는 단순 실수로 Character set에 지정을 정의 목록에 있는US7ASCII를 없는ASCII로 잘못 입력한 결과 인데, NLS_LANG가 어떤 역할을 하는지 궁금하게 되어 조사한 내용을 이 글에서 소개합니다.

C:\>set NLS_LANG=AMERICAN_AMERICA.ASCII
C:\>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sat Jun 5 19:05:41 2021
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
ERROR:
ORA-12705: Cannot access NLS data files or invalid environment specified
Enter user-name:
스폰서 링크

NLS_LANG란?

NLS_LANG은 <Language>_<Territory>.<Character set>의 3가지 요소로 구성되어있습니다. 설정 예는 다음과 같습니다. 주의할 사항으로는 Territory를 위한 구분자 underscore (_) 하고 Character set를 위한 구분자 period (.) 를 생략하게 되면 존재하지 않은 Language의 정의로 인식되어 ORA-12705오류가 발생할 수 있습니다.

  • 설정 예
Windows regedit.exe 또는 cmdset NLS_LANG=KOREAN_KOREA.KO16MSWIN949
Unix/Linuxexport NLS_LANG=KOREAN_KOREA.KO16MSWIN949
  • Language는 메시지에 사용되는 언어, 정령(sort), 요일 이름 및 월 이름과 같은 규칙을 지정합니다. 지정되어 있지 않은 경우 기본 값은 AMERICAN입니다.
  • Territory는 기본 날짜, 통화 및 숫자 형식의 규칙을 지정합니다. 지정되어 있지 않은 경우 Language의 값에 연결된 기본 값이 지정됩니다. AMERICAN은 AMERICA, KOREAN은 KOREA 와 같이 서로 기본 값이 지정되어 있습니다.
  • Character set는 클라이언트 응용프로그램에서 사용하는 Character set을 지정합니다. 사용자의 터미널 또는 OS의 Character set에 대응해서 US7ASCII , WE8ISO8859P1 , WE8DEC , WE8MSWIN1252 , or KO16MSWIN949와 같은 별칭이 있으며 각Language에는 기본 값이 지정되어 있습니다.

영문 메시지 NLS_LANG 설정 예

다음은 sql명령 실행 시 표시되는 모든 메시지를 영어로 표시하는 NLS_LANG설정 예입니다.

C:\>set NLS_LANG=AMERICAN_AMERICA.US7ASCII
C:\>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sun Jun 6 13:38:24 2021
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL> show user
USER is "SYS"
SQL>

한글 메시지 NLS_LANG 설정 예

다음은 sql명령 실행 시 표시되는 모든 메시지를 한글로 표시하는 NLS_LANG설정 예입니다.

C:\>set NLS_LANG=KOREAN_KOREA.KO16MSWIN949
C:\>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 일 6월 6 13:46:57 2021
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
다음에 접속됨:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL> show user
USER은 "SYS"입니다
SQL>

한글 OS에서 Japanese_Japan.JA16SJIS같이 메시지를 일본어로 표시하고 싶어도 OS가 표시할 수 없는 언어는 다음과 같이 깨져서 나옵니다.

C:\>set NLS_LANG=Japanese_Japan.JA16SJIS
C:\>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 볷 6뙉 6 15:39:54 2021
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
궸먝뫏궠귢귏궢궫갃
SQL> 

환경 변수 우선순위

참고로 Windows는 Oracle Database를 설치해 특정 Instance를 만들 때 레지스트리에 NLS_LANG와 같은 관련 환경 변수를 설정합니다. 이를 regedit.exe명령을 실행해 확인 하면 다음과 같습니다.

[Windows키Windows Key] + [R] 키를 눌러 “실행”대화 상자를 열고 “regedit”를 입력 실행 해서 [레지스트리 편집기] 화면을 표시합니다.

[컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1]을 선택 하면 오른쪽 영역에 환경 변수 NLS_LANG가 설정되어 있음을 확인 할 수 있습니다.

Windows OS의 환경 변수는 “레지스트리 설정” 이외에 “Windows 화면(환경 변수 설정 화면) 설정”, “MS-DOS 명령 프롬프트 창(배치 파일) 설정”하는 방법이 있습니다. 이 3곳에 환경 변수를 모드 설정했을 때 우선 적용 순서가 있습니다. 자세한 내용은 다음 글을 참조하십시오.

눈깨비 정보창고 - 분기탱천
마우스 영역 지정 이미지 캡처를 문자 인식 및 번역하기 버튼 클릭 만으로  을 실행 해 주는 소프트웨어를 작성 했습니다. 자세한 도움말은 여기를 참조 하십시오. 웹 서비스 구축 눈깨비가 본업으로 하고 있는 기술적인 ...
제목과 URL을 복사했습니다