데이터를 AS-IS → TO-BE 로 이전하면서 가장 많이 발생하는 문제 중 하나가 데이터의 변경과 손실이다.
데이터 이관 후 조회했을 때 글자가 다 깨져서 알아볼 수 없는 상황이 발생하는 이유는
서로의 Character Set이 일치하지 않아서가 거의 대부분의 이유이다.
- Character Set이란 데이터베이스 내부에 데이터가 저장될 때 참조되는 글자의 종류를 적어 놓은 일종의 사전이다.
사용자가 어떤 데이터를 Insert 하게 되면 Server Process가 Insert할 때 Character Set을 보고 글자를 확인하고 입력 해 주는 원리이다.
만약 사용자가 입력한 글자가 Character Set에 없는 글자라면 Server Process는 무슨 글자인지 몰라서 그냥 ?로 저장하게 된다.
이 Character Set은 처음 DB 설치 시, 환경세팅 때 설정하게 되는데 이 부분을 잘못 설정할 경우 데이터베이스를 다시 만들어야 할 수도 있으므로 주의해야 한다.
select * from v$nls_parameters;
SQLPLUS SYSDBA 접속해야 한다. 그 과정을 살펴보자
노란색 부분에 자기 oracle 컨테이너ID 입력
sqlplus /nolog 입력
conn sys/oracle as sysdba 입력
update sys.props$ set value$='UTF8' WHERE name = 'UTF8';
Commit 해준다.
Characterset 변경 후에는 DB를 내렸다 올리는게 좋다
shutdown immdediate;
startup
참고) 이러고 바로 자신의 웹 어플리케이션이든 뭐든 한글깨짐현상을 확인하려 하면,
### Cause: java.sql.SQLRecoverableException: 소켓에서 읽을 데이터가 없습니다
이 에러가 날 수 있다.
원인은 Connection 객체는 JVM에 살아 있고 실제 네트워크는 끊어져서 생기는 에러이다. (DB Shutdown 했었으니깐)
Connection Pool 사용할 때 abandon 설정이 소켓 timeout보다 크거나 커넥션 객체의 연결 유지 확인 설정이 되었는지 등을 확인해보자.
'Database' 카테고리의 다른 글
[Oracle에서의 네트워크 이해] Oracle Server 로 접속하는 과정 (0) | 2020.12.27 |
---|---|
컴퓨터 사이의 통신 원리 (같은 네트워크간 / 다른 네트워크간) (1) | 2020.12.26 |
IP Address 와 MAC Address란 (0) | 2020.12.26 |
[ORACLE] LISTAGG가 오라클 버전 문제로 에러날 때 -> WM_CONCAT 이용하자 (0) | 2020.12.21 |
[Oracle] 프로시저 / ORA-06553 - 호출 시 인수의 갯수나 유형이 잘못되었습니다 해결법 (1) | 2020.09.05 |