반응형
FreeTDS
1. TDS
(1) TDS(Tabular Data Stream)
1) 개념 및 역사
  TDS는 Tabular Data Stream의 약자로 데이터베이스 서버와 클라이언트 사이에서 데이터를 전송하는데 사용되는 응용 계층 프로토콜이다. 데이터의 테이블들을 뜻하는 구조화된 바이트 스트림을 서버로 보내기 때문에 Tabular Data Stream이라는 이름이 붙여졌다.
  TDS는 1984년 처음으로 Sybase 회사에서 개발되고 설계되었다. 네트워크 프로토콜을 통해 두 컴퓨터 사이에 데이터를 전송하는 netlib, 클라이언트 프로그램에게 API를 제공하고 netlib을 통해 서버와 통신하는 DB-LIB으로 구성되어 있었다. 또한, 데이터베이스 테이블로 데이터를 더 빠르게 불러올 수 있는 blk(bulk copy) 라이브러리도 제공하였다.
1990년 Sybase 코드에 기반을 둔 MSSQL에 대해 마이크로소프트 기술 동의 협정을 채결하였다. 마이크로 소프트는 DB-LIB API를 유지하면서 ODBC를 추가 하였고 Sybase는 Open Client의 라이브러리인 DB-LIB, CT-LIB을 개발하였다. DB-LIB은 권장하지 않지만(deprecated) 널리 사용되고 있다.
2) TDS 프로토콜
TDS 프로토콜은 다양하게 나왔는데 대부분은 문서가 공개되지 않았다. 예외적으로 Sybase가TDS 5.0 프로토콜 문서를 이용가능 하도록 했다.
TDS 4.2 Sybase와 Microsoft
Sybase/Microsoft를 나누어서 사용하는 버전
TDS 5.0 Sybase
Sybase에서 소개. TDS 5.0은 프로토콜이 확장될 수 있기 때문에 Sybase의 새로운 TDS 버전을 보기는 힘들 것이다.
TDS 7.0 Microsoft
SQL 서버 7.0에서 소개. SQL 서버 7.0의 확장된 데이터 타입을 지원. (255자 이상의 char/varchar 필드) 또한, 유니코드를 지원.
TDS 8.0 Microsoft
SQL 서버 2000에서 소개. 64비트 정수와 “variant” 데이터 타입을 지원.

(2) 관련 용어
1) netlib
두 컴퓨터 사이에 데이터를 전송하는 역할을 한다. 이를 위해 기반이 되는 네트워크 프로토콜을 다루어야 했다. 요즘처럼 TCP/IP가 어디에서든 쓰이지 않았기 때문에 netlib은 TCP/IP 외에도 DECnet, IPX/SPX, NetBEUI 같은 통신망에서도 작동하였다.
2) DB-LIB
DB-LIB은 Sybase의 첫 번째 버전 라이브러리이다. 단점으로는 많은 데이터베이스 비일관성을 보인다. 그래서 새로운 Open Client 개발을 하려면 CT-LIB을 사용하는 것이 더 좋다.
참고주소 : http://www.freetds.org/userguide/dblib.api.summary.htm
3) CT-LIB
CT-LIB은 90년대 초기 발표된 Open Client의 재작성 버전이다. API는 DB-LIB과 완전히 다르지만 더 최신 것이며 데이터베이스의 일관성(Consistency)을 보여준다. 그래서 DB-LIB을 이용한 응용 프로그램은 CT-LIB을 사용하여 컴파일이 어렵고 포팅하기 위해 상당한 노력이 필요하다. DB-LIB은 더 이상 개발되지 않을 것이기 때문에 결국 새로운 응용프로그램은 CT-LIB을 사용하는 것이 좋다.
참고주소 : http://www.freetds.org/userguide/ctlib.api.summary.htm
4) ODBC
DBMS를 사용하기 위한 표준 소프트웨어 API 메소드를 제공한다. 각 데이터베이스의 차이는 ODBC 드라이버에 의해서 흡수되기 때문에 유저는 ODBC에 정해진 순서에 따라서 프로그램을 쓰면 어떠한 데이터베이스 관리 시스템에 관리되고 있는지 의식할 필요 없이 데이터베이스에 접근 할 수 있다.

2. FreeTDS
(1) FreeTDS
 TDS 프로토콜을 다시 구현한 무료 소프트웨어 라이브러리이다. DB-LIB이나 CT-LIB을 대신하여 사용할 수 있고 ODBC 라이브러리를 포함한다. 일반적으로 LGPL 라이선스가 적용되어 소스로부터 라이브러리를 컴파일하여 다른 응용프로그램이 FreeTDS 라이브러리를 링크하여 사용할 수 있도록 한다.
 스크립트 언어를 위해 FreeTDS는 펄, 파이썬, 루비, PHP등과 같은 언어의 모듈과 결합할 수 있다. 또한, jTDS는 FreeTDS의 자바 구현 버전이며 소스포지에서 사용가능하며 jBCP는 jTDS에서 BCP(Bulk Copy Program) 기능을 포함한다.
 현재 TDS 4.2, 5.0, 7.0, 8.0이 구현되었고 Sybase 뿐만 아니라 MSSQL 서버와도 통신할 수 있다. JDBC 드라이버도 BSD 라이선스에 의해 배포되며 다운로드 페이지(http://www.freetds.org/software.html)에서 받을 수 있다.
 FreeTDS는 다양한 용도로 사용할 수 있다. 유닉스/리눅스 웹서버를 통해 웹으로 SQL 서버에 저장된 데이터를 표현할 수 있고, NT에서 Unix로 SQL 서버 데이터베이스 코드를 이식할(port) 수 있고, 유닉스 소스로부터 SQL 서버로 데이터를 가지고 올 수 있으며, native 드라이버 없이 플랫폼에 대한 데이터베이스 접근을 제공한다.
(2) freetds.conf 파일 설정
1) 역할
파일 형식은 win.ini와 비슷하다. 하는 일은 데이터서버 이름(당신의 프로그램)을 기계이름(네트워크)으로 관련시킨다. 
configure 옵션의 –syscondir에 의해 freetds.conf의 위치가 결정된다. configure의 default 위치는 ‘/usr/local/etc/’ 이다.
freetds.conf는 2개의 섹션으로 구성된다. [global] 섹션은 모든 데이터 서버에 영향을 주지만 [dataserver] 섹션에서 오버라이딩할 수 있다.


2) 설정 값의 뜻
tds version= (4.2, 5.0, 7.0, 8.0) 
접속할 때 프로토콜 버전.
host= (호스트이름이나 IP주소)
데이터서버가 실행 중인 호스트.
port= (1433, 2638, 5000)
데이터서버가 사용할 포트 번호. 
FreeTDS는 TDS 프로토콜 버전에 따라 default 포트를 정한다. 5000은 TDS 5.0, 1433은 
다른 프로토콜에 사용.
참고주소 : http://www.freetds.org/userguide/freetdsconf.htm

(1)   DB-LIB을 이용하여 컴파일 하기

1)     빌드하기 위해 필요한 파일들

#include <sqlfront.h> /* sqlfront.h always comes first */

#include <sybdb.h>    /* sybdb.h is the only other file you need */

libsybdb.a 또는 libsybdb.so ( /usr/local/lib 폴더에 있습니다.)

 

2)     빌드 방법

cc -I /usr/local/include -Wl,-L/usr/local/lib -Wl,-R/usr/local/lib (소스파일) -lsybdb -o (실행파일)

-Idir : 헤더 파일이 검색되기 위한 리스트의 디렉터리를 추가한다.

-llibrary : 링킹할 때 library의 이름을 가진 라이브러리를 찾는다.

-Ldir : -l()에 대해 검색되기 위한 리스트의 디렉터리를 추가한다.

-ofile : 출력파일을 정하기 위해 file명을 적어줄 수 있다. (없으면 default로 출력파일은 a.out)

참고주소 : http://www.freetds.org/userguide/samplecode.htm

반응형

+ Recent posts