일과 삶, 그것의 조화

ORA-29275 부분 다중 바이트 문자 Error

insummus 2009. 1. 8. 09:43

ORA-29275 부분 다중 바이트 문자 Error

어느날 갑자기 만나게 된 에러 코드 ora-29275..
머가 안맞을까.. 싶었는데.
아마도 암호화 시킨 문자들이 해당 CHARACTERSET 으로는 표현이 안되나보다. (2BYTE 문자... 한글이겠지?)
포멧전에는 잘 되었던건데..

그래서 찾아보니..
오라클 서버의 CHARACTERSET 과 클라이언트의 CHARACTERSET 값이 다를 경우 발생한다.


그래서.. CHARACTERSET 을 변경 해 줘야 하는데..
우선,

서버와 클라이언트의 CHARACTERSET 이 다른지 비교를 해 보자.


1. 서버의 CHARACTERSET

SQL> select parameter, value from nls_database_parameters where parameter like '%CHARACTERSET%'

PARAMETER                                        VALUE
------------------------------------------------------------
NLS_NCHAR_CHARACTERSET             AL16UTF16
NLS_CHARACTERSET                         KO16KSC5601 


위와 같은 결과 값이 나온다.

우리가 확인해야 할 부분은 NLS_CHARACTERSET 의 값인 KO16KSC5601
서버에서 사용중인 CHARACTERSET 은  KO16KSC5601 이다.


그러면 이제는 클라이언트의 CHARACTERSET 을 알아보자.



2. 클라이언트의 CHARACTERSET

실행>regedit 
레지스트리 창을 띄워서 "NLS_LANG" 검색을 한다. 
대충 위치가..
KEY_LOCLA_MACHINE\SOFTWARE\ORACLE\어딘가에..
      NLS_LANG 값이 KOREAN_KOREA.KO16MSWIN949 이거로 되어있다.


3. 서버와 클라이언트의 CHARACTERSET 비교, 변경
나의 경우를 보면 서버는 KO16KSC5601 , 클라이언트는 KO16MSWIN949 로 되어있는것을 확인 할 수 있다.
두개의 CHARACTERSET 이 다르기때문에 나타나는 에러코드였으므로, CHARACTERSET 을 변경해준다.
단 주의해야 할 점은,
서버의 CHARACTERSET 을 변경하게 되면 서버에 접속하는 모든 클라이언트의 CHARACTERSET 을 변경해줘야 한다.
그러므로 왠만하면, 클라이언트를 서버에 맞추는것을 추천한다!!
그래서 레지스트리의 값을 서버의 CHARACTERSET 으로 변경해주고, 다시 실행하면 OK!!!