일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Eclipse
- 한글
- 성능
- 에러
- 데이터베이스
- 톰캣
- JavaScript
- 튜닝
- oracle
- Excel
- miplatform
- 이클립스
- 기타소득
- 함수
- 마이플랫폼
- 자바
- Tomcat
- Book
- 오류
- DB
- JEUS
- Report Designer
- 오라클
- java
- MIP
- 엑셀
- error
- 태그를 입력해 주세요.
- 회계
- 도서
Archives
- Today
- Total
어느 가을날의 전환점
ORACLE|서로 다른 캐릭터셋의 ORACLE DB간 DB_LINK 시 한글 호환 방안(편법?) 본문
- 이진 전송을 이용한 편법(?)
<< 조회 시 - SELECT >>
1. 먼저 오라클은 서버와 클라이언트의 문자셑이 일치하면 문자셑 변환을 시도 하지 않고 문자열의 이진 이미지 그대로를 저장합니다.
이 말이 무엇이냐면 예를 들어 US7ASCII로 설정된 서버와 클라이언트가 있는데... 이때 '썊' 같은 지원되지 않는 문자를 입력해도 ... 잘 입력되고 조회된다는 말입니다.단 위의 님들 말처럼 서버 내부에서는 저 놈을 문자로 안 봅니다.length('썊') 하면 2가 나옵니다.
즉 서버와 클라이언트가 동일한 문자셑을 가지면 그때 입력한 자료는 그놈이 US7ASCII의 문자셑일 때 입력한 자료나 KO16KSC5601 일 때 입력한 자료나 KO16MSWIN949 일 때 입력한 자료나 다 동일한 저장 이미지를 갖는다는 것입니다.생각해 보십시오. 단지 sys.props$의 값만 바꾼다고 문자셑이 바뀌는 이유도 다 이때문이죠.
2. 두대의 서버가 있고 각각의 서버에 접근하는 클라이언트는 각각 서버의 문자셑을 따른다고 가정하면 문제는 서버간의 문자 전송 역시 문자셑변환을 일으키지 않도록 하면 되지 않는가!라는 아이디어 이지요..
방법이 있죠 utl_raw.cast_to_raw를 써서 이진 포맷으로 속이는 겁니다. 마찬가지로 받는 쪽에서는 utl_raw.cast_to_varchar2로 살리구요..
소스 서버에 뷰를 생성 한글 컬럼은 utl_raw.cast_to_raw()함수로 캐스팅하여 이진화하여 보여줌.
타켓 서버에서는 소스 서버의 뷰를 조회하여 한글 컬럼을 utl_raw.cast_to_varchar2()함수로 캐스팅하여 본다.
<< 저장 시 - INSERT >>
PROCEDURE를 이용.
환경 A DB : KO16KSC5601
B DB : US7ASCII
원하는 방식 A db -> B db INSERT
1. DBLINK를 만들고
2. B DB에 PROCEDURE 생성
CREATE OR REPLACE PROCEDURE PRO_3 ( AAA IN raw) IS
BEGIN
tmpVar := 0;
INSERT INTO NAME1
SELECT utl_raw.cast_to_varchar2(AAA) FROM dual;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END PRO_3;
3. A DB 연결해서 아래 SP 실행
BEGIN
SENDBILL.PRO_3@DBLINK ( UTL_RAW.CAST_TO_RAW('대한민국'));
COMMIT;
END;
** 올바른 캐릭터셋 선택 방법 **
(1) 한국어만 저장하고 사용할 경우에는 KO16MSWIN949 추천 (KSC5601의 수퍼셋이므로 기존 완성형코드까지 포함함)
(2) 한국어를 대부분 사용하지만 일부 타국어(중국어 , 일본어등)을 지원해야할 경우... KO16MSWIN949 를 기본으로쓰고 National Characterset UTF8(NVARCHAR, NCHAR등을 쓰시기 바랍니다.)
(3) 한국어 포함해서 타국어까지 다양하게 섞어쓸 경우...
(이 경우 유니코드 말고는 대안이 없습니다.)
# 참조
2) http://database.sarang.net/?inc=read&aid=37088&criteria=oracle
'Database > Oracle' 카테고리의 다른 글
ORACLE|ora-14551:질의 안에 DML 작업을 수행할 수 없습니다(message displayed when calling an Oracle Stored Function) (0) | 2012.02.07 |
---|---|
ORACLE|ORA-02085: database link AAAA connects to BBBB (DB Link 오류) (0) | 2011.11.30 |
JAVA|JDBC 클라이언트 프로그램에서 NLS_LANG관련 설정 변경하는 방법 (0) | 2011.08.10 |
ORACLE|권한(Grant) 자동화 (0) | 2011.08.05 |
ORACLE|Oracle Instant Client (0) | 2011.08.03 |
Comments