반응형

머...

제우스... 잼나는 프로그램....

변경된 파일이 있으면 인지를 해줘야 하는데... 인지를 정상적으로 못하고...

보통 호스명_servlet_콘테이너명/WEBMain.xml

파일안에

 <encoding>
            <request-encoding>
                <default>EUC-KR</default>
                <forced>EUC-KR</forced>
            </request-encoding>
            <response-encoding>
                <default>EUC-KR</default>
                <forced>EUC-KR</forced>
            </response-encoding>
            <postdata-encoding>
                <default>EUC-KR</default>
                <forced>EUC-KR</forced>
            </postdata-encoding>
        </encoding>

이 옵션을 통해 euc-kr 설정이 가능한데....

쩝... 캐쉬되어 있는것이 있다면 오류가 발생한다....

캐쉬 삭제 -> <jsp-work-dir>/home/jeus5/webhome/test_monitor</jsp-work-dir>

cd /home/jeus5/webhome/test_monitor
rm -rf * 

아래는 JEUSMain.xml 파일안에 command-option 부분에서 응답 헤더를 euc-kr로 주는 방법이다.

 -Djeus.servlet.response.header.encoding=EUC-KR
반응형
반응형

1. 기존의 데이터를 수정하지는 않는다.

2. 다음 쿼리를 통해 캐릭터셋이 2개 이상 조회된다면 (같은 케릭터셋이 2개의 타입이라면..) 데이터를 주고 받을 때 정상적이지 않을수 있다 ~.

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);


3. 시스템 환경을 케릭터 셋으로 변경한다.(/as sysdba)
   ※ 반드시 백업받고 수행한다
   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;
   COL VALUE NEW_VALUE CHARSET
   SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
   COL VALUE NEW_VALUE NCHARSET
   SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
   ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
   ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
   SHUTDOWN IMMEDIATE;
   STARTUP;
   -- yes, 2 times startup/shutdown . This is not a typo
   SHUTDOWN IMMEDIATE;
   STARTUP;



절차

 SQL> SHUTDOWN IMMEDIATE;
<do a full backup>
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET KO16KSC5601;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;



참고 사이트 : http://www.oracle.com/technology/global/kr/pub/columns/oracle_nls_2.html
반응형
반응형

EXP-00008: ORACLE 오류 6552가 발생했습니다
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: 알 수 없는 문자 집합 이름입니다

 

즉, 아래의 형태의 문제가 발생했을 경우

 

Problem description
===================
You receive the following error when (re)compiling or calling a piece of pl/sql:

ORA-06550: line <num>, column <num>: ....
or
ORA-06552: PL/SQL: Compilation unit analysis terminated

followed by
   
ORA-06553: PLS-553: character set name is not recognized

이것은 export 시 발생할 수 도 있고, Catproc.sql를 실행하다가..또는 다른 경우에도 발생할 수 있는데

그 원인은 character set 이 섞였기 때문이다.

 

그럼..검증을 해보자 검증하려면 아래의 쿼리를 수행하고 그 결과를 보면 된다.

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                               NCHAR
AL16UTF16                               NVARCHAR2
AL16UTF16                               NCLOB
AL32UTF8                                CHAR
AL32UTF8                                VARCHAR2
AL32UTF8                                CLOB


위처럼이 아니라

 

CHARACTERSET                            TYPES_USED_IN
-----------------------------------------------------
AL16UTF16                               NCHAR
AL16UTF16                               NVARCHAR2
AL16UTF16                               NCLOB
US7ASCII                                CHAR
US7ASCII                                VARCHAR2
WE8DEC                                  VARCHAR2
US7ASCII                                CLOB


이런 식으로 하나의 varchar2 에 대해 2개의 characterset 이 나온다면 mix 된 것이다.

 

이 문제에 대한 처리는 아래처럼 하도록 한다.

 

a) INIT.ORA 안에 있는 parallel_server parameter 가 false 거나 아예 세팅되어있지 않은지 확인한다
   SQL>show parameter parallel_server

b) 다음스크립트를 SQLPLUS 에서 "as sysdba"로 수행한다.
   (물론 백업을 해두는 것도 있지 말자!)

   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;
   COL VALUE NEW_VALUE CHARSET
   SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
   COL VALUE NEW_VALUE NCHARSET
   SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
   ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
   ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
   SHUTDOWN IMMEDIATE;
   STARTUP;
   -- yes, 2 times startup/shutdown . This is not a typo
   SHUTDOWN IMMEDIATE;
   STARTUP;

c) 만약 parallel_server parameter 를 고쳤다면 다시 원상복구한다.

 

This script doesn't change anything for the data that is already stored, but it
re-enforces database character set to be known in all places where it should be
stored

 

위 스크립트는 이미 저장된 데이터들을 바꾸지는 않는다. 단지 database 의 character set 을 그것이 저장되어지는 모든 장소에 다시 강제적으로 세팅할 뿐이다.

출처 : http://cafe.naver.com/happysharing.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=19



반응형
반응형

Pc에 mysql  설치한후 bin 디렉토리에서 실행또는 호스팅서버에 텔넷접속후 실행

mysql -h ip -u id -p password  <--db 원격 접속: 

mysql>\s

--------------
mysql  Ver 12.22 Distrib 4.0.16, for pc-linux (i686)

Connection id:          1612
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Server version:         4.0.16-Max
Protocol version:       10
Connection:             Localhost via UNIX socket
Client characterset:    latin1
Server characterset:    latin1

UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 9 hours 47 min 20 sec

Threads: 6  Questions: 506708  Slow queries: 0  Opens: 16  Flush tables: 1  Open tables: 10  Queries per second avg: 14.379

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

설정하기

아래 euckr을 utf-8 로 변경해서 입력

mysql> SET character_set_client = euckr;
mysql> SET character_set_results = euckr;
mysql> SET character_set_connection = euckr;
mysql> ALTER DATABASE [DB명] DEFAULT CHARACTER SET euckr;
commit;

 

이렇게 하면 한글 잘됩니다.

환경은 Linux + MySQL 4.1.8입니다. ^^

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

환경설정화일에 직접 설정하기<----서버운용자가 반대할수있겠죠

my.ini 를 열고 편집

[mysqld]

default-character-set=euckr
character-set-client-handshake = FALSE
---------------------------------------------------------------------

반응형

'Database > MYSQL' 카테고리의 다른 글

MariaDB SHA2 512 방식으로 암호화 예제  (0) 2019.10.25
Mysql & MariaDB 튜닝 쉘  (0) 2019.08.14
MySQL 백업용 쉘스크립트입니다.  (0) 2010.01.18
무료 접속 툴 (Free Tool)  (0) 2009.03.06
C를 이용한 성적관리 예제  (0) 2009.03.06

+ Recent posts