티스토리 뷰

그냥 제가 개발하면서나

아니면 심심할때 가지고 놀려고 CentOS하고 우분투에 오라클을 설치해서 쓰고 있었는데

이 두 개의 데이터베이스에서 익스포트/임포트 하려니 두 오라클 캐릭터셋이 시망으로...

한글 데이터가 이상하게 보이고 하여서 centos의 오라클의 데이터셋을 변경하게 되었습니다.

네이버나 구글에서 보니 뭐 업데이트를 이용한 방법도 있고 하던데... 전 잘 안되더군요...

그래서 그것으로 해봤는데 안되는 분들은 한번 확인해보시기 바랍니다.


선 한번 확인을 해봐야겠죠?

아래의 쿼리를 실행하여 보시면 됩니다.

SELECT DISTINCT(NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,

           DECODE(TYPE#, 1, DECODE(CHARSETFORM, 1, 'VARCHAR2', 2, 'NVARCHAR2','UNKOWN'),

                         9, DECODE(CHARSETFORM, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),

                        96, DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),

                       112, DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN

       FROM SYS.COL$ WHERE CHARSETFORM IN (1,2) AND TYPE# IN (1, 9, 96, 112);

실행 후 아래와 같이 뭔가 좀 정상적으로 나온 느낌(?) 이 든다면.. 안바꾸셔도 됩니다.ㅋㅋ

       

CHARACTERSET                             TYPES_USED_IN

---------------------------------------- -------------

AL16UTF16                                NVARCHAR2     

AL16UTF16                                NCHAR 

AL16UTF16                                NCLOB         

KO16MSWIN949                             VARCHAR2      

KO16MSWIN949                             CHAR          

KO16MSWIN949                             CLOB          


비정상적인 느낌(?)은 이런 식으로 나오는 경우입니다.ㅋㅋ 그냥 봐도 뭔가 좀 이상하시죠?ㅋㅋ

처] 오라클 캐릭터 셋CHARACTERSET                  CHARACTERSET      

                      TYPES_USED_IN

-----------------------------------------------------

AL16UTF16                               NCHAR

AL16UTF16                               NVARCHAR2

AL16UTF16                               NCLOB

US7ASCII                                CHAR

US7ASCII                                VARCHAR2

WE8DEC                                  VARCHAR2

US7ASCII                                CLOB

          TYPES_USED_IN

-----------------------------------------------------

AL16UTF16                               NCHAR

AL16UTF16                               NVARCHAR2

AL16UTF16                               NCLOB

US7ASCII                                CHAR

US7ASCII                                VARCHAR2

WE8DEC                                  VARCHAR2

US7ASCII                                CLOB

변경|작성자 형기

CHARACTERSET                            TYPES_USED_IN

-----------------------------------------------------

AL16UTF16                               NCHAR

AL16UTF16                               NVARCHAR2

AL16UTF16                               NCLOB

US7ASCII                                CHAR

US7ASCII                                VARCHAR2

WE8DEC                                  VARCHAR2

US7ASCII                                CLOB


제가 사용하고자 하는 "KO16MSWIN949" 캐릭터셋이 저렇게 3가지로 멀쩡하게 나오면 괜찮구여..

뭔가 중복되는게 있거나 다른 캐릭터셋이 하나 끼어 있거나 하다면 문제가 있는 겁니다.


저도 데이터베이스의 사용자의 입장에 있고 설치나 설정은 잘 모르기 때문에

이런저런 구차한 설명을 장황하게 해드릴수 있을것 같지 않고....

 그냥 과정을 보겠습니다.ㅋㅋㅋㅋ

oracle@hanuli7:/home/oracle>sqlplus "/as sysdba"


SQL*Plus: Release 11.2.0.3.0 Production on Thu Jun 5 16:45:42 2014


Copyright (c) 1982, 2011, Oracle.  All rights reserved.



Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production


SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.


Total System Global Area 5094195200 bytes

Fixed Size                  2191400 bytes

Variable Size             922750936 bytes

Database Buffers         4160749568 bytes

Redo Buffers                8503296 bytes

Database mounted.

SQL> alter system enable restricted session;


System altered.


SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;


System altered.


SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;


System altered.


SQL> ALTER DATABASE OPEN;


Database altered.


SQL> COL VALUE NEW_VALUE CHARSET

SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';


VALUE

--------------------------------------------------------------------------------

KO16MSWIN949


SQL> COL VALUE NEW_VALUE NCHARSET

SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_NCHAR_CHARACTERSET';


VALUE

--------------------------------------------------------------------------------

AL16UTF16


SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;

old   1: ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET

new   1: ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949


Database altered.


SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;

old   1: ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET

new   1: ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16


Database altered.


SQL> SHUTDOWN IMMEDIATE;

STDatabase closed.

Database dismounted.


ORACLE instance shut down.

SQL>

SQL> STARTUP;

ORACLE instance started.


Total System Global Area 5094195200 bytes

Fixed Size                  2191400 bytes

Variable Size             922750936 bytes

Database Buffers         4160749568 bytes

Redo Buffers                8503296 bytes

Database mounted.

Database opened.

SQL> SHUTDOWN IMMEDIATE;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> STARTUP;

ORACLE instance started.


Total System Global Area 5094195200 bytes

Fixed Size                  2191400 bytes

Variable Size             922750936 bytes

Database Buffers         4160749568 bytes

Redo Buffers                8503296 bytes

Database mounted.

Database opened.

SQL>


이렇게 했을 때 저는 위에서 정상적으로 보이는 경우처럼 잘 나오더군요...

아.. 혹시나 위의 과정을 보시기 전에 오라클의 설정에서 'parallel_server' 값을 확인해서

false상태이거나 아예 없는지 확인을 해보시기 바랍니다.

이 설정은 오라클 설정 디렉토리에서 "INIT.ORA" 파일을 찾아 보시거나

SQL> show parameter parallel_server;

으로 확인 가능하십니다. 

이 값이 만약 true 이라면 false으로 변경 후 위의 과정을 모두 정상 클리어 하시고

다시 값을 원래대로 복원하시기 바랍니다.



그럼 모두 열심히 IT 발전을 위하여 노력하세요!! ^^



댓글