이글의 출처 : PHPSCHOOL

OPENLINK ODBC 를 이용한 LINUX (SUN) 웹서버 에서 NT의 MS-SQL 서버 접속하기 


www.openlinksw.com 에서 필요한 프로그램를 다운 받는다. 

아마 등록이 필요할지 모른다. 무료니 부담없이.... 

- linux 클라이언트 쪽에서는 install.sh 설치 스크립트 와 l2kozzzz.taz (SUN solaris25 는 smkozzzz.taz)를 받아야 한다. 
- NT 서버는 ntadm65z.zip 라는 리퀘스트 브로커가 필요하다 이 녀석은 서비스로 떠 있다가 
LINUX 에서 odbc로 접속을 시도하면 SQL 서버와 연결을 시켜준다. 이게 없으면 접속이 안된다. 

설치는 LINUX 쪽과 NT 쪽으로 나뉘어 진다. 

================================================= 
LINUX 에서 OPENLINK ODBC 클라이언트 라이브러리 설치 
================================================= 

1. 임시디렉토리(/tmp 혹은 적당한 곳)에 
install.sh 설치 스크립트 와 l2kozzzz.taz 를 다운 받는다. 

===== 
잠깐! : linux 용 ODBC 드라이버는 문제가 있는 듯 했다. 
SUN에서는 잘 되었다. 이후에 나오는 것은 SUN에서만 
---- 
* l2kozzzz.taz : glibc2 용 - 아직 버그가 있는 듯 , sag.. fault 에러남 
* likozzzz.taz : libc5 용 - 문제없음 , 단 다음처럼 복사 필요 
cp /usr/i486-linux-libc5/lib/libc.so.5 /usr/local/openlink/odbcsdk/lib/ 
그러나 아파치컴파일후 Segmentation fault 에러 발생 
===== 

2. openlink 디렉토리를 생성한다. 

[root@acro /tmp]# 

3. 위의 두파일을 만들어진 디렉토리로 복사한다. 

[root@acro /tmp]# cp install.sh l2kozzzz.taz /usr/local/openlink/ 

4. openlink 디렉토리로 이동한다. 

[root@acro /tmp]# cd /usr/local/openlink/ 
[root@acro openlink]# 

5. install.sh 스크립트를 실행 시킨다. 이 스스립트는 
odbcsdk 디렉토리를 생성해서 압축을 풀고 
odbc.ini 파일을 지정된 사용자의 홈디렉토리로 복사해 준다. 

[root@acro openlink]# sh install.sh 
Extracting (l2kozzzz.taz) ... 
Creating scripts ... 
Enter the name of the user that will own the programs: root 
Enter the name of the group that will own the programs: root 
Changing ownership ... 
End of installation 
[root@acro openlink]# 

만일 odbc.ini 파일이 홈디렉토리에 없을 경우 
odbc.ini 파일을 홈디렉토리로 복사해 준다.. 

[root@acro openlink]# cp /usr/local/openlink/odbcsdk/doc/odbc.ini ~/.odbc.ini 


============================= 
NT 에서 OPENLINK 미들웨어 설치 
============================= 

1. ntadm65z.zip 파일을 NT 서버의 적당한 디렉토리에 설치한다. 

2. 압축을 푼다. 

3. disk1 디렉토리로 이동한다. 

4. setup.exe 를 실행시키고 자신의 서버에 맞는 설정을 해준다. 

5. 제어판의 서비스를 열어 Openlink Request Broker 를 띄운다. 


====================== 
ODBC 접속 테스트 
====================== 


1. NT 의 openlink 가 설치된 디렉토리 의 bin 에 있는 udbc.ini 를 LINUX 서버의 
/etc/ 에 복사하고 적절하게 설정을 변경한다. 

[root@acro examples]# cp /tmp/udbc.ini /etc/ 


필자의 경우 
[dsn_sql6] 을 복사해 SQL 7.0용 으로 만들었다. 

[dsn_sql7] 
Description = Sample MS SQLServer 7 DSN 
Host = 203.226.112.*** 
ServerType = SQLServer 7 
ServerOptions = 
Database = pubs 
FetchBufferSize = 30 
;Database = 
;ServerOptions = 
;ConnectOptions = 
;Options = 
UserName = sa 
Password = ******** 
;ReadOnly = yes 


2. LD_LIBRARY_PATH 에 
/usr/local/openlink/odbcsdk/lib/ 를 추가한다. 

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openlink/odbcsdk/lib/ 

또는 

setenv LD_LIBRARY_PATH /usr/local/openlink/odbcsdk/lib/ 


3. ~/.odbc.ini 파일을 수정한다. 
( 주의 ! odbc.ini 가 아니라 .odbc.ini 이다 이것때문에 계속 접속에 실패했다. ) 


[OpenLink] 
Driver = /usr/local/openlink/odbcsdk/lib/oplodbc.so.1 
... 
[Default] 
Driver = /usr/local/openlink/odbcsdk/lib/oplodbc.so.1 



4. openlink 의 예제디렉토리로 이동 LINUX 서버에서 NT 로의 접속을 시도해 보자 


먼저 반드시 환경변수에 다음이 추가되어 있어야 한다. 

주의 사항 : 시작 스크립트에 넣을 때 
csh 인지 bsh 인지 반드시 확인해서 

setenv 또는 export 를 적절히 구사! 
========================================================== 
setenv LD_LIBRARY_PATH /usr/local/openlink/odbcsdk/lib 
setenv UDBCINI /etc/udbc.ini 
setenv ODBCINI /root/.odbc.ini 
setenv DebugFile /tmp/udbc.out 
=========================================================== 


[root@acro openlink]# cd /usr/local/openlink/odbcsdk/examples/ 
[root@acro examples]# ./odbctest 
OpenLink ODBC Demonstration program 
This program shows an interactive SQL processor 


Enter ODBC connect string (? shows list): ? 

DSN | Description 
--------------------------------------------------------------- 
OpenLink | Sample OpenLink MT DSN 

여기서 나오는 것은 ~/.odbc.ini 에 정의된 것이다. 
/etc/udbc.ini 에 정의된 것도 사용할 수 있다. 


Enter ODBC connect string (? shows list): dsn=dsn_sql7 

반드시 dsn=dsn_sql7 의 형식으로 입력한다. 
앞부분의 dsn= 를 빼먹지 않도록 주의 한다. 

SQL> 프롬프트가 떨어지면 접속에 성공한 것이다. 

SQL>select pub_id , type, title from titles ; 
pub_id|type |title 
------+------------+-------------------------------------------------------------------------------- 
1389 |business |The Busy Executive's Database Guide 
1389 |business |Cooking with Computers: Surreptitious Balance Sheets 
0736 |business |You Can Combat Computer Stress! 
1389 |business |Straight Talk About Computers 
0877 |mod_cook |Silicon Valley Gastronomic Treats 
0877 |mod_cook |The Gourmet Microwave 
0877 |UNDECIDED |The Psychology of Computer Cooking 
1389 |popular_comp|But Is It User Friendly? 
1389 |popular_comp|Secrets of Silicon Valley 
1389 |popular_comp|Net Etiquette 
0877 |psychology |Computer Phobic AND Non-Phobic Individuals: Behavior Variations 
0736 |psychology |Is Anger the Enemy? 
0736 |psychology |Life Without Fear 
0736 |psychology |Prolonged Data Deprivation: Four Case Studies 
0736 |psychology |Emotional Security: A New Algorithm 
0877 |trad_cook |Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean 
0877 |trad_cook |Fifty Years in Buckingham Palace Kitchens 
0877 |trad_cook |Sushi, Anyone? 
18 row(s) fetched. 

SQL>exit 

Have a nice day. 
[root@acro examples]# 



====================== 
PHP 컴파일 
===================== 

1. php 디렉토리로 이동 setup 을 실행한다 

[root@acro php-3.0.11]# ./setup 
.. 
OpenLink ODBC support? (`yes', `no' or dir) [no] : y 
Enter OpenLink install directory [/usr/local/openlink] : 
... 
... 
checking for OpenLink ODBC support... yes 

2. 그 이후의 인스톨 방법은 About APM과 동일하다. 

 


위의 스크립트를 실행시키면 중간에 다음과 같은 부분이 나오면 
ODBC 를 지원하는 것이다. 

 
Unified ODBC Support active (compiled with unknown library) 
allow_persistent: -1 
max_persistent: -1 
max_links: -1 

3. 아래의 소스를 실행 시킨다. 

=================================== 

"; if($result_id=odbc_do($conn_id, $sql)) { echo "executing '$sql'

"; $num_fields=odbc_num_fields($result_id); if($num_fields>0){ echo "Number of fields: $num_fields
"; for($i=1;$i<=$num_fields;$i++){ $field_name[$i-1]=odbc_field_name($result_id,$i); } $num_rows=0; while(odbc_fetch_row($result_id)){ for($i=1;$i<=$num_fields;$i++){ $result[$num_rows][$field_name[$i-1]]=odbc_result($result_id,$i); } $num_rows++; } echo "Number of rows: $num_rows
"; }else{ echo "not a field returned.

"; } echo "Results:
"; for($i=0;$i"; } } echo "freeing result

"; odbc_free_result($result_id); }else{ echo "can not execute '$sql'

"; } echo "closing connection $conn_id"; odbc_close($conn_id); }else{ echo "can not connect to DSN: $dsn

"; } ?> =================================== 만일 아래와 같은 경고가 나오면 웹서버가 /root/.odbc.ini 파일에 접근하지 못해서 생기는 문제이므로 .odbc.ini 를 적당한 디렉토리로 이동하고 퍼미션을 변경해 준다 Warning: SQL error: [iODBC][Driver Manager]Data source name not found and no default driver specified. Driver could not be loaded, SQL state IM002 in SQLConnect in /usr/local/apache/htdocs/mssql.php on line 17 can not connect to DSN: dsn=dsn_sql6 저의 경우는 LINUX 서버에서 접속은 실패했지만 ... SUN 에서는 성공했습니다. LINUX 에서 성공하신 분들은 글 올려주세요