이글의 출처 : 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 에서 성공하신 분들은 글 올려주세요