리눅스 DB서버에 ODBC설치하여 사용 문제
안녕하세요.
그동안 윈도우 계열쪽에서만 개발을 하다가 업무일로 리눅스쪽에서
DB 처리를 수행하는 프로그램을 개발을 하고 있습니다.
개발하는 프로그램이 DB서버가 돌아가는 동일한 장비에 설치되어 DB서버에 select 쿼리를 날리게 되는데
ODBC를 지원하는 모든 DB서버를 지원하려 합니다.
윈도우에서는 주로 MSSQL에서 개발을 했었는데, MSSQL 디비서버에는 이미 관련 ODBC 드라이버가 설치되어 있어
추가적으로 ODBC 드라이버를 설치할 필요가 없었는데, (물론 로컬이나 다른 장비에서는 드라이버를 깔아야 하지요)
리눅스쪽에서 odbc로 DB서버에 접근하려고 알아보니 DB서버가 설치되어 돌아가고 있어도
별도로 ODBC 드라이버를 깔아야 하는것 같던데 명확하지가 않아서 이렇게 글을 씁니다.
예를들어, 오라클에 ODBC로 접속하는 경우
unixODBC , 오라클 클라이언트 뭐 이렇게 설치해야 한다고 몇몇 자료들에서 본것 같습니다.
질문을 요약하면
1. DBMS가 설치되었더라도 DB서버에 ODBC 드라이버를 추가로 깔아야 하는가?(동일한 서버내에 프로그램이 존재하므로)
2. unixODBC는 어떤 역할을 하고, unixODBC만으로 DB서버에 쿼리를 날릴 수 없는가?
3. unixODBC만으로 ODBC API를 이용하여 쿼리를 날릴 수 없다면 항상 쌍으로 설치해야 하는가?
(unixODBC-오라클 클라이언트, unixODBC-MySQL 드라이버, unixODBC-PostgreSQL 드라이버 등)
두서없이 작성한 것 같은데 조언 부탁드립니다.
감사합니다.
저랑 비슷한 작업을 하고 계시는군요.
1. 상황에 따라 필요할 수도 있지만 보통 필요없겠죠.
2. 안 됩니다. Driver가 필요하며, unixODBC 는 이 driver 를 관리하는 역할을 합니다.
Windows 의 ODBC 관리자(odbcad32.exe) 와 같다고 보시면 됩니다.
3. Driver 는 보통 Client 쪽에 필요한 것입니다.
ODBC 의 주요역할은 Client 의 DB programming API 통일에 있고,
DBMS 와 함께 제공되는 Client 는 ODBC 를 안 쓸 수도 있습니다.
예를 들면 MySQL Client Driver 는 각 언어별로 있고, 거기에 ODBC 가 있죠.
MySQL WorkBench 나 command line client 는 ODBC 말고 다른 녀석을 썼을 거라고 봅니다.
Driver 없이 동작하거든요.
답변 감사드립니다.
두서 없는 질문에 정성껏 답변 달아주셔서 감사드립니다.
답변 해주신 내용에 대해 의문사항이 있어 다시한번 문의드립니다.
1. ODBC 드라이버가 보통 필요없다는 말은 일반적으로는 리눅스에 DBMS를 설치할 때
ODBC 드라이버가 설치패키지에 포함되어 같이 깔린다는 말씀이신지, 아니면 관리자가 항상 함께
별도로 설치한다는 말씀인지 궁금합니다.
현재 저의 경우 CentOS PostgreSQL 서버에서 테스트중인데
gcc 컴파일 시 #include < sql.h > 같은 ODBC API 헤더파일을 알 수 없다고 오류가 나고 있습니다.
2. unixODBC가 윈도우의 ODBC 관리자의 역할이라면 현재 제가 ODBC API의
SQLDriverConnect()를 통해 ODBC 관리자의 등록된 DSN을 쓰지않고 ODBC 연결문자열을 구성하여
직접 접근하므로 unixODBC와 같은 ODBC 관리자 역할 프로그램이 필요없지 않나 싶습니다.
혹시나 제가 잘못 알고있어 ODBC 연결문자열을 이용하여 SQLDriverConnect()를 쓰더라도
ODBC관리자가 무조건 필요한 것 인지는 잘 모르겠습니다.
3. 위 2번의 내용이 제가 틀렸다면 DB서버에 ODBC드라이버가 설치되지 않았다면
항상 ODBC관리자 역할의 unixODBC와 같은 프로그램과 해당 DBMS의 ODBC 드라이버를 설치해야 할 것 같습니다.
(DB서버에서 개발하는 프로그램이 실행되므로)
감사합니다.
흠...
1. 보통 별도로 설치합니다. 다시 말씀드리지만 ODBC 는 보통 Client 와 관련된 사항입니다.
DBMS Server 와는 관계가 적습니다.
gcc 로 compile 을 할 때 되지 않았다는 것은 ODBC library 와 header 가 제대로 설치되지 않았다는 소리네요.
2. 네, 제가 좀 틀리게 말하기는 했는데 ODBC 관리자의 역할은 단지 DSN 을 등록하고,
이 DSN 을 조회하는 역할만 있는 것은 아닙니다. ODBC Driver 관리가 중요한 역할을 합니다.
연결 문자열의 Driver 문자열 값을 기준으로 ODBC 관리자에 의해 해당 Driver library 가 연결됩니다.
ODBC Driver 들의 목록을 조회할 수도 있는 것으로 아는데 이런 것이 ODBC 관리자의 역할이죠.
3. 모든 Client 에 설치해야 합니다.
저는 Windows Client app 을 유지보수하고 있고, ADO를 사용 중입니다.
DBMS가 Linux 쪽에 있을 때를 위한 이식작업을 하고 있죠.
Client app 이 Windows 에만 있는 이상 Linux 쪽은 unixODBC 와 MySQL/ODBC Driver 가 필요없죠.
그렇군요..
답변 감사합니다.
궁금한 내용들이 정리가되어 잘 이해가 되었습니다.
unixODBC 및 해당 DB의 ODBC 드라이버를 설치하고
삽질을 열심히 해야 겠네요.. ㅠㅠ ^^;
제 경험에 의하면...
MS-SQL의경우 ODBC를 설치하는 client OS가 32bit면... windows에서 공식적으로 지원하는 드라이버는 사용할수가 없었습니다.
물론 오픈소스 드라이버가 있겠지만...
==========================
'다르다'는 것은 '틀리다'는 것이 아닙니다.
==========================
댓글 달기