내맘대로긍정이 알려주는
Oracle 23ai 신기능
무료 세미나 발표자료
다운로드
trending_flat
OS환경 : Windows Server 2019 (64bit)
DB 환경 : Oracle Database 19.3.0.0
에러 : sqlplus 에서 일부문자가 ???로 나올 때 해결 방법(윈도우 환경)
리눅스 환경의 경우 아래 게시글 참조
https://positivemh.tistory.com/751
db를 구성 할 때 캐릭터셋은 KO16MSWIN949로 설정했지만
아래와 같이 Default languge와 Defalut territory를 Korean, Korea로 했을 경우
sqlplus 에서 한글 테이블 생성시 에러가 발생하고
한글 데이터 삽입 시 한글이 ???로 표시됨
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
|
CMD> sqlplus / as sysdba
SQL> create table 테스트 (컬럼1 varchar2(10));
create table 테스트 (컬럼1 varchar2(10))
*
1행에 오류:
ORA-00911: ?????? ????????????
SQL> create table test (col1 varchar2(10)); );
테이블이 생성되었습니다.
SQL> insert into test values ('TEST1');
1 개의 행이 만들어졌습니다.
SQL> insert into test values ('테스트1');
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select * from test;
COL1
----------
TEST1
???1
|
해결 방법 : os 유저로 NLS_LANG 설정
설치 시 어떤 캐릭터셋을 선택했는지 모르는 경우 nls_database_parameters 뷰 확인
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
|
SQL>
set lines 200 pages 1000
col PARAMETER for a30
col VALUE for a30
select * from nls_database_parameters;
PARAMETER VALUE
------------------------------ ------------------------------
NLS_RDBMS_VERSION 19.0.0.0.0
NLS_NCHAR_CONV_EXCP FALSE
NLS_LENGTH_SEMANTICS BYTE
NLS_COMP BINARY
NLS_DUAL_CURRENCY ?
NLS_TIMESTAMP_TZ_FORMAT RR/MM/DD HH24:MI:SSXFF TZR
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_FORMAT RR/MM/DD HH24:MI:SSXFF
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_SORT BINARY
NLS_DATE_LANGUAGE KOREAN
NLS_DATE_FORMAT RR/MM/DD
NLS_CALENDAR GREGORIAN
NLS_NUMERIC_CHARACTERS .,
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET KO16MSWIN949
NLS_ISO_CURRENCY KOREA
NLS_CURRENCY ?
NLS_TERRITORY KOREA
NLS_LANGUAGE KOREAN
20 행이 선택되었습니다.
|
nls_database_parameters 뷰를 조회해서 나온 NLS_LANGUAGE, NLS_TERRITORY, NLS_CHARACTERSET 값을 아래처럼 입력하면됨
sqlplus 를 접속하는 유저로 NLS_LANG 설정
1
2
|
예시 CMD> export NLS_LANG="NLS_LANGUAGE"_"NLS_TERRITORY"."NLS_CHARACTERSET"
CMD> set NLS_LANG=KOREAN_KOREA.KO16MSWIN949
|
sqlplus 접속 후 한글 테이블 생성 및 데이터 삽입 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
SQL> create table 테스트 (컬럼1 varchar2(10));
테이블이 생성되었습니다.
SQL> insert into 테스트 values ('테스트1');
1 개의 행이 만들어졌습니다.
SQL> insert into 테스트 values ('test1');
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select * from 테스트;
컬럼1
----------
테스트1
test1
|
한글이 정상적으로 삽입되고 조회됨
sqlplus 접속 후 기존 테이블 데이터 확인 및 삽입
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
SQL> select * from test;
COL1
----------
TEST1
???1
SQL> insert into test values ('테스트2');
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select * from test;
COL1
----------
TEST1
???1
테스트2
|
기존에 삽입했던 한글 데이터는 여전히 ???로 나오고
새로 삽입하는 한글 데이터만 정상적으로 삽입됨
원인 : 오라클 NLS 설정과 OS NLS_LANG 설정의 차이때문에 발생한 문제
db 생성 시 캐릭터셋을 ko16mswin949로 설정한 뒤 위와 같이 Default languge와 Defalut territory를 Korean, Korea로 설정한 경우 set 명령으로 NLS_LANG를 설정해주어야함
참조 : https://positivemh.tistory.com/751
'ORACLE > Trouble Shooting' 카테고리의 다른 글
WARNING: inbound connection timed out (ORA-3136) (0) | 2021.11.24 |
---|---|
ORA-03135: connection lost contact (0) | 2021.11.23 |
/bin/ld: warning: -z nolazyload ignored. (0) | 2021.10.20 |
chmod: changing permissions of `$ORACLE_HOME/bin/extjobO (0) | 2021.10.20 |
오라클 19c RAC ora.proxy_advm 리소스 offline (0) | 2021.10.16 |