'IIS7'에 해당되는 글 3건

  1. 2014.04.08 iis 7.0 한글깨짐 with ORACLE
ORACLE2014. 4. 8. 18:15
출처 Teyo 질문 개시판
데브피아 사이트에서 이글을 발견했습니다. 
혹시 저와 같은 문제에 처하신 분들이 있을까봐 옮겨 적습니다.
제질문에 대한 결론은 nls가 us7ascii는 지원을 하지 못한다는 것이었습니다. 꼭 사용을 해야된다면
oledb를 사용하여야 한다고 하는군요... 아래글을 보고 참고하세요...

Windows 2000 혹은 2003에서 ASP.NET을 위한 오라클 연동은 몇가지 방법이 있습니다.
1. OleDb Provider 사용 (VS.NET 2002/2003)
2. ODBC Provider 사용 (VS.NET 2003 내장, 2002는 microsoft에서 다운로드)
3. OracleClient 사용 (VS.NET 2003 내장-사용시 참조추가해야함, 2002는 microsoft.com에서 다운로드)
4. ODP.NET Provider 사용 (oracle.com에서 다운로드)
기본 사용방법은 대동소이하며, 다만 트랜잭션의 지원여부 차이가 있고, 속도에 차이가 있지만
중요한것은 안정성과 한글 인코딩 문제입니다.

환경에 따라 여러가지 변수가 있지만....
학습용이라면 OleDb를 권장합니다.
사이트 전문 개발이라면... 안타깝게도 그 상황에 따라 대처법이 틀려집니다.
(오라클과 MS 양사에 직접 문의 한 결과로는 ASP.NET에 오라클을 사용하는 것은 2 회사 모두 부정적이었습
니다. 이유는 영어권 이외의 언어에서는 호환이 전혀 안되기 때문입니다.)

연결을 위해 사전 준비 작업은
Oracle 9i혹은 Oracle 8i에 해당하는 Client를 설치하여 Net Assistant를 설정해야 합니다.
또한, ODBC를 사용할 경우 MDAC 2.7 이상을 설치하셔야 합니다.
대부분 같은 비슷한 사용환경을 지원하지만,
ConnectionString만 조금 다를 뿐입니다.
OleDb의 ConnectionString은 위와 같은 준비를 끝낸 후 닷넷 통합환경에서 (보통 왼쪽에 있는)
서버 연결을 통해 오라클을 설정한 후 프로바이더 연결 문자를 복사해서 쓰시면 됩니다.
기본적으로 Password=구문은 빠지므로, Password=[Password]는 직접 입력하셔야 합니다.
ODBC는
Driver={Microsoft ODBC for Oracle}; Server=[Net 연결설정명]; uid=[user]; pwd=[pwd]
입니다.
Driver의 문자열에 다른 드라이버를 사용한 결과 모두 에러가 났습니다. 꼭 MS 제공용 ODBC 드라이버를 사용
하셔야 할 듯합니다.

OracleClient는
Server=[Net 연결설정명]; uid=[user]; pwd=[pwd]으로 하시면 됩니다.

ODP.NET은 oracle.com에서 사용법을 참고 하시면 됩니다.

처리 속도는 1. odp, 2. oracleclient, 3. odbc, 4. oledb순입니다.

그렇지만 한글 지원문제에 대해 오라클 서버의 NLS가 US7ASCII로 설정되어 있다면..
반드시 odbc 또는 oledb를 사용하십시오. 2bytes 체계의 코드는 전혀 지원을 못합니다.

실무에서는 보통 Oracle은 Unix에 설치되어 있기 때문에 학습시에 Windows 2000/2003에 오라클을 설치하여
사용하시는 것은 좋은 경험이라 할 수 없을 듯 합니다.
그렇기 때문에 학습시에는 OleDb를 활용하시기 바랍니다.
 
==
저도 같은 경험이 있어서... 몇자 적습니다. 
문제는 DB(오라클) 와 Web Server(IIS) Charset 이 같아야 합니다.

1) DB(오라클) 쪽 Charset 확인하세요.
방법:
SQLPLUS로 System유저로 접속한뒤 아래와 같이 쿼리하시면 중간에 Characterset이 나옵니다.

SQL> select * from v$nls_parameters;
.
.
NLS_CHARACTERSET KO16KSC5601
.
.
2) IIS 에서 Charset 확인방법
regedit(레지스트리 편집기)를 실행한여
HKEY_LOCAL_MACHINE / SOFTWARE / ORACLE / HOME0 의 Key 중에서 NLS_LANG의 값을 확인하세요
NLS_LANG의 값이 DB의 값과 틀릴경우 DB의 Charset 값(KO16KSC5601)과 같게 수정해 주세요.

참고: 버전에 따라 값이 달라요...~~
(oracle 8i) KO16KSC5601
(oracle 9i) KO16MSWIN949
 
 
==
 
서버와 클라이언트 모두 charset을 us7ascii로 쓰고있는데요... 
charset이 KO16KSC5601 인경우에는 web.config값을 아래와 같이 두면 된다고 생각하는데요..
requestEncoding="ks_c_5601-1987"
responseEncoding="ks_c_5601-1987"

그렇다면, US7ASCII일때에는
requestEncoding = ?
responseEncoding = ?
위 부분에 들어가는게 다르지 않을까요?
 
==
 
한글이 깨지는 경우는 두가지 중에 하나입니다... 

1. 데이터베이스 자체에 저장되는 한글 데이터가 깨지는 경우,
2. 데이터베이스에는 제대로 들어있으나 웹으로 가져오면서 깨지는 경우

첫번� 경우라면 데이터베이스에 한글이 제대로 들어가도록 무언가 설정하셔야 합니다.
그 경우는 오라클을 잘하시는 분의 도움을 얻어보시구요...

두번째의 경우라면... 아마도 OS가 한글 OS가 아닌 듯 하니...
페이지의 제일 상단에 <%@ CodePage="949" %> 를 추가해 보도록 하세요

그럼 아마도 해결이 되지 않을까 싶네요 ^^
 
==


Posted by 댓거리사랑