개발자의 팩션골드의 지식베이스 입니다.



변경 조건

WE8MSWIN1252 => AL32UTF8

 

1.     기존 데이터 백업
기존의 NLS_LANG을 변경 후, export 한다.

export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

exp 아이디/비번 file=백업명.dmp

 

2.     기존 데이터 삭제
깨끗하게, 계정을 새로 생성한다.

drop user 아이디 cascade;

create user 아이디 identified by 비번;

grant connect, resource to 아이디;

grant create view to 아이디;

 

3.     인코딩을 AL32UTF8로 변경

update sys.props$ set value$='AL32UTF8' where name='NLS_CHARACTERSET';

update sys.props$ set value$='AL16UTF16' where name='NLS_NCHAR_CHARACTERSET';

commit;

shutdown immediate;

startup mount;

alter system enable restricted session;

alter system set job_queue_processes=0;

alter system set aq_tm_processes=0;

alter database open;

alter database character set AL32UTF8;

shutdown immediate;

startup;

 

4.     기존 데이터 복원

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

imp 아이디/비번 file=백업명.dmp

 

 

Comment +1

회사에서 이것때문에 정말 고생했던 정보입니다.^^

[문제점]
서버 이동 후, 웹페이지에서 한글이 깨지고, OCI 연결 옵션에서 인코딩을 넣어주면, 정상으로 나올 경우
* 단, 이 방법은 DB에는 정상적인 인코딩으로 데이터가 들어가 있는 경우이다. 데이터가 깨져서 IMP 를 한 경우에는, 
  DB 언어를 재 설정 혹은, 데이터 변환이 필요하다. 

[원인]
이는 DB에는 정상적으로 데이터가 import되었지만, NLS_LANG이 US7ASCII 혹은 NULL 값으로 되어있는 경우
한글을 읽을 수 없기 때문이다. (자세한 내용은 아래의 참조 사이트들을 참조하라. 노력하지 않는자 쓸모없다.ㅋㅋ)

[해결]
1. 아파치 stop

2. 시스템에 NLS_LANG 설정 
export NLS_LANG=KOREAN_KOREA.KO16MSWIN949
=> /etc/profile 에 위의 내용을 추가하면 자동으로 적용 시킬수 있다.

3. 아파치 재실행

여기서 제일 중요한 내용은 
아파치를 실행하는 user의 NLS_LANG 값을 지정해줘야된다는 것이다.

그 이유는 NLS_LANG이 적용되는 순서가 
SESSION > CLIENT > SERVER 
이기 때문이다.



[참조사이트들]
http://www.oracle.com/technology/global/kr/pub/columns/oracle_lns_1.html

Comment +0