일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- PostgreSQL Parameter
- dblink 삭제
- PostgreSQL Install
- PostgreSQL 아키텍처
- ogg 구성
- pg_dumpall
- Linux
- Database 생성 삭제 조회 변경
- sql문 전체 출력 방법
- 19c tde
- OGG
- Goldengate
- pgcrypto
- pg_basebackup
- ogg 설치 방법
- table lock 조치 방법
- PostgreSQL 테이블스페이스 생성 삭제
- db upgrade
- PostgreSQL 스키마 관리
- 다른계정에서 dblink 삭제방법
- oracle
- 아카이브로그 삭제
- PostgreSQL 테이블스페이스 관리
- multitenant
- PostgreSQL Parameter 설정 방법
- oracle error
- PostgreSQL Backup and Recovery
- sql문 짤릴 때
- PostgreSQL Admin
- psql 복구
- Today
- Total
인성장
[Oracle][ORA-01756] 한글 데이터 Insert 시 관련 오류 본문
Error Message
ORA-01756: quoted string not properly terminated.
원인
위 오류는 작은 따옴표( ' ) 가 빠졌을 때 발생하는 오류이나, 작은 따옴표를 잘 썼는데도 불구하고 sqlplus에서 한글 데이터를 Insert 할 경우에도 발생됩니다. 이유는 OS 상의 NLS_LANG 환경변수 설정값이 원인인데, 일반적으로 NLS_LANG 설정값과 DB CharacterSet 설정값이 다르면 해당 오류가 나타나는 것으로 많이들 알고 있습니다.
그러나, 아래와 같이 OS 상 NLS_LANG 값과 DB의 CharacterSet 값을 일치시켜주었는데도 불구하고 한글데이터를 넣을 때 ORA-01756 오류가 발생하였습니다.
1. DB CharacterSet 정보 확인
SQL> set line 200
set pages 300
col name for a30
col value$ for a40
col comment$ for a60
select * from sys.props$ where name like 'NLS%';
NAME VALUE$ COMMENT$
------------------------------ ---------------------------------------- ------------------------------------------------------------
NLS_CSMIG_SCHEMA_VERSION 5 Character set migration utiltiy schema version #
NLS_LANGUAGE AMERICAN Language
NLS_TERRITORY AMERICA Territory
NLS_CURRENCY $ Local currency
NLS_ISO_CURRENCY AMERICA ISO currency
NLS_NUMERIC_CHARACTERS ., Numeric characters
NLS_CHARACTERSET KO16MSWIN949 <--- DB 캐릭터셋 Character set
NLS_CALENDAR GREGORIAN Calendar system
NLS_DATE_FORMAT DD-MON-RR Date format
NLS_DATE_LANGUAGE AMERICAN Date language
NLS_SORT BINARY Linguistic definition
NLS_TIME_FORMAT HH.MI.SSXFF AM Time format
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM Time stamp format
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR Time with timezone format
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR Timestamp with timezone format
NLS_DUAL_CURRENCY $ Dual currency symbol
NLS_COMP BINARY NLS comparison
NLS_LENGTH_SEMANTICS BYTE NLS length semantics
NLS_NCHAR_CONV_EXCP FALSE NLS conversion exception
NLS_NCHAR_CHARACTERSET AL16UTF16 NCHAR Character set
NLS_RDBMS_VERSION 11.2.0.4.0 RDBMS version for NLS parameters
21 rows selected.
2. OS 상 NLS_LANG 변수값 확인
$ echo $NLS_LANG
AMERICAN_AMERICA.KO16MSWIN949
3. 한글 데이터 입력 테스트
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 11 15:06:47 2024
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> insert into test values ('한글테스트');
ERROR:
ORA-01756: quoted string not properly terminated <--- 오류 발생
이와 같이 DB CharaterSet, OS NLS_LANG 두 값이 동일한 캐릭터셋을 가지는데도 해당 오류가 발생했습니다.
해결방법
DB CharacterSet 값에 상관없이 OS NLS_LANG 환경변수 값은 AL32UTF8 또는 UTF8로 설정해주시면 됩니다.
$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
이 후, sqlplus에서 한글 데이터가 정상적으로 들어가는 것을 확인 할 수 있습니다.
$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 11 15:12:30 2024
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> insert into test values ('한글테스트');
1 row created.
SQL> select * from test;
NAME
----------------------
한글테스트
Summary
OS NLS_LANG 환경변수 설정값은 반드시 DB CharacterSet과 동일할 필요가 없습니다. DB의 데이터는 사용자로 전달될 때, NLS_LANG에 설정된 CharacterSet에 기반에 적절히 변환되어 전달됩니다. (반대의 경우도 동일)
OS 상 NLS_LANG 변수는 DB에게 사용자의 환경을 알려주는 인식표와 같아, 서버 운영체제의 문자셋, 언어셋 환경에 맞춰 설정해주시면 됩니다. 별도 LANG 변수 설정 없을 시, 대부분의 리눅스 서버(한국 기준)의 LANG 변수값은 *.UTF-8 로 설정되어 있을 것입니다.
서버 인코딩 설정 확인
$ echo $LANG
ko_KR.UTF-8
'Oracle > Error' 카테고리의 다른 글
[Oracle][DBT-05802] ASM DISKGROUP 관련 오류 (2) | 2024.01.04 |
---|---|
[Oracle][INS-06006] RAC 설치 관련 오류 (Passwordless SSH) (0) | 2024.01.04 |
[Oracle][INS-41104] RAC 설치 관련 오류 (1) | 2024.01.04 |
[Oracle][INS-30024] RAC 설치 관련 오류 및 수동 삭제 방법 (3) | 2024.01.04 |