Oracle ORA-12705 오류 원인과 해결 방법 완벽 가이드

ORA-12705
2026년 09월 16일 | DBMS Error 가이드

이 글에서 다루는 내용

ORA-12705 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.

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

ORA-12705는 Oracle 데이터베이스가 NLS(National Language Support) 데이터 파일에 접근하지 못하거나, 환경 변수에 유효하지 않은 NLS 설정값이 지정되었을 때 발생하는 에러입니다. 주로 Oracle 클라이언트 또는 서버 환경에서 NLS_LANG, NLS_TERRITORY, NLS_CHARACTERSET 등의 환경 변수가 잘못 설정되었거나, Oracle Home 경로가 올바르지 않을 때 발생합니다. 이 에러는 데이터베이스 연결 자체를 차단하기 때문에, 애플리케이션 서비스 장애로 직결될 수 있는 매우 중요한 에러입니다.


주요 발생 원인

1. NLS_LANG 환경 변수의 잘못된 설정

가장 빈번하게 발생하는 원인으로, NLS_LANG 환경 변수에 Oracle이 인식할 수 없는 언어(Language), 지역(Territory), 또는 캐릭터셋(Character Set) 값이 지정된 경우입니다. 예를 들어 NLS_LANG=KOREAN_KOREA.KO16KSC5601처럼 철자 오류나 지원하지 않는 캐릭터셋이 설정되어 있으면 Oracle은 해당 NLS 데이터 파일을 찾지 못해 즉시 에러를 반환합니다. 특히 OS 레벨의 환경 변수와 Oracle 클라이언트 설정 간의 불일치가 원인이 되는 경우가 많습니다.

2. Oracle Home 경로 오류 또는 NLS 데이터 파일 누락

ORACLE_HOME 환경 변수가 잘못 설정되거나, Oracle 소프트웨어 설치가 불완전하여 $ORACLE_HOME/nls/data 디렉토리 아래의 NLS 관련 데이터 파일들이 누락된 경우에도 이 에러가 발생합니다. Oracle은 초기화 단계에서 해당 디렉토리를 참조하는데, 파일이 존재하지 않으면 연결 자체가 불가능해집니다. 잘못된 Oracle 클라이언트 버전이 설치되어 있거나 여러 버전의 Oracle이 혼재하는 환경에서 특히 자주 발생합니다.

3. Windows 레지스트리 또는 tnsnames.ora의 잘못된 NLS 설정

Windows 환경에서는 레지스트리(HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient)에 NLS_LANG 값이 등록되어 있으며, 이 값이 잘못 수정된 경우 ORA-12705가 발생할 수 있습니다. 또한 sqlnet.ora 파일에 NLS_LANG 관련 파라미터가 잘못 기재된 경우에도 동일한 문제가 생깁니다. 다중 Oracle 클라이언트 버전이 설치된 Windows 서버에서 특히 이 문제가 빈번히 관찰됩니다.


해결 방법

해결 방법 1: NLS_LANG 환경 변수 확인 및 수정

먼저 현재 설정된 NLS_LANG 값과 데이터베이스의 NLS 설정을 확인합니다.

-- 데이터베이스의 현재 NLS 파라미터 확인
SELECT name, value
FROM v$nls_parameters
WHERE name IN ('NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET');

-- 유효한 NLS_LANGUAGE 값 목록 확인
SELECT value
FROM v$nls_valid_values
WHERE parameter = 'LANGUAGE'
ORDER BY value;

-- 유효한 NLS_TERRITORY 값 목록 확인
SELECT value
FROM v$nls_valid_values
WHERE parameter = 'TERRITORY'
ORDER BY value;

-- 유효한 CHARACTER SET 값 목록 확인
SELECT value
FROM v$nls_valid_values
WHERE parameter = 'CHARACTERSET'
ORDER BY value;

확인 후, OS 레벨에서 올바른 값으로 수정합니다.

# Linux/Unix 환경에서 NLS_LANG 설정 (예시)
export NLS_LANG=KOREAN_KOREA.AL32UTF8

# 또는 영문 환경에서 가장 안전한 기본값
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

# 설정 확인
echo $NLS_LANG

해결 방법 2: Oracle Home 경로 및 NLS 데이터 파일 점검

# ORACLE_HOME 설정 확인
echo $ORACLE_HOME

# NLS 데이터 파일 존재 여부 확인 (Linux)
ls -la $ORACLE_HOME/nls/data/

# 파일 수 확인 (정상적으로 수백 개의 파일이 존재해야 함)
ls $ORACLE_HOME/nls/data/ | wc -l

NLS 데이터 파일이 누락된 경우, Oracle Universal Installer를 통해 재설치하거나 누락된 파일을 복구해야 합니다.

-- 데이터베이스 서버에서 NLS 관련 파라미터 전체 조회
SELECT *
FROM nls_database_parameters
ORDER BY parameter;

-- 세션 레벨 NLS 설정 확인
SELECT *
FROM nls_session_parameters
ORDER BY parameter;

-- 인스턴스 레벨 NLS 설정 확인
SELECT *
FROM nls_instance_parameters
ORDER BY parameter;

해결 방법 3: Windows 레지스트리 수정

Windows 환경에서는 레지스트리 값을 직접 확인하고 수정합니다.

-- 접속 전 sqlplus 환경에서 NLS_LANG 명시적 설정 후 테스트
-- Windows CMD에서 실행
-- set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
-- sqlplus user/password@TNS_ALIAS

-- 접속 후 세션 레벨에서 NLS 파라미터 임시 변경
ALTER SESSION SET NLS_LANGUAGE = 'KOREAN';
ALTER SESSION SET NLS_TERRITORY = 'KOREA';
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

해결 방법 4: sqlnet.ora 파일 점검

-- sqlnet.ora 파일에서 아래 항목 제거 또는 올바른 값으로 수정
-- 파일 위치: $ORACLE_HOME/network/admin/sqlnet.ora

-- 잘못된 예
-- NLS_LANG = INVALID_LANGUAGE.INVALID_CHARSET

-- 올바른 예 (sqlnet.ora에서는 보통 NLS_LANG을 제거하는 것이 권장됨)
-- 환경 변수로만 관리하고 sqlnet.ora에는 명시하지 않는 것이 Best Practice

예방 방법

1. 표준화된 NLS_LANG 설정 및 배포 정책 수립

모든 개발, 운영 서버의 NLS_LANG 환경 변수를 표준화하고, 이를 .bash_profile 또는 /etc/profile.d/oracle.sh와 같은 시스템 프로파일에 명시적으로 관리합니다. 애플리케이션 배포 시 환경 변수 체크리스트를 운영하여 신규 서버나 클라이언트 설치 시 반드시 검증 단계를 거치도록 프로세스화합니다. 권장 설정은 NLS_LANG=AMERICAN_AMERICA.AL32UTF8이며, 한국어 환경에서는 KOREAN_KOREA.AL32UTF8을 사용합니다.

2. 정기적인 Oracle 환경 변수 모니터링 및 구성 관리

운영 환경에서는 정기적으로 Oracle 환경 변수와 NLS 설정이 올바른지 자동화된 스크립트로 점검하는 루틴을 운영합니다. 특히 OS 업그레이드, Oracle 패치 적용, 클라이언트 소프트웨어 업데이트 후에는 반드시 NLS 환경을 재검증해야 합니다. Ansible, Chef와 같은 구성 관리 도구를 활용하여 서버 전체에 일관된 Oracle 환경 변수를 유지하면 이러한 문제를 원천적으로 예방할 수 있습니다.


관련 에러

  • ORA-12541: TNS no listener — NLS 설정 외에 리스너 구성 문제로 연결이 실패할 때 발생하며, ORA-12705와 함께 연결 장애 트러블슈팅 시 함께 확인해야 합니다.
  • ORA-00604: Error occurred at recursive SQL level — NLS 파라미터 초기화 중 내부 SQL 실행 오류로 발생할 수 있으며, ORA-12705와 연쇄적으로 나타나는 경우가 있습니다.
  • ORA-12154: TNS could not resolve the connect identifier — NLS 환경 오류와 더불어 tnsnames.ora 설정 문제가 복합적으로 작용할 때 함께 발생할 수 있습니다.
  • ORA-00600: Internal error code — NLS 데이터 파일 손상이 심각한 경우 내부 에러로 이어질 수 있으므로, ORA-12705 발생 시 즉각적인 조치가 필요합니다.

DBMS 에러 코드 시리즈

주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.

본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.

댓글 남기기