FreeTDS 및 UnixODBC 사용. 연결할 수 있지만 isql 또는 RODBC에서 SQL 명령을 실행할 수 없음

JoeC

이것은 정말로 나를 괴롭히기 시작했습니다. Ubuntu 12.04를 실행 중이고 MS SQL Server 2012를 실행하는 상자에 연결하려고합니다. 먼저 설정에 대한 몇 가지 정보를 제공하겠습니다.

내 freetds.conf :

[EXNAME]
    host = IP
    port = 1433
    tds version = 7.0
    client charset = UTF-8

freetds.conf를 설정 한 후 먼저 예상 (및 환영) 프롬프트를 생성 한 tsql과의 연결을 테스트합니다.

 ...
 using default charset "UTF-8"
 1> 

따라서 내 FreeTDS 설정이 제대로 작동하는 것 같습니다. 다음으로 odbc.ini 및 obdcinst.ini를 설정합니다.

odbc.ini :

 [EXNAME]
 Driver = FreeTDS
 ServerName = EXNAME
 UID = Me
 PWD = Pass

odbcinst.ini :

 [FreeTDS]
 Description = FreeTDS Driver
 Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
 Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
 UsageCount = 1

이 설정에 따라 osql을 실행하여 확인합니다. 예상되는 모든 응답을 출력하고, 예를 들어 ondcb.ini에서 드라이버와 올바른 단락을 찾을 수 있습니다.

 [EXNAME] found in /etc/odbc.ini
 found this section:
     [EXNAME]
     Driver = FreeTDS
     ServerName = EXNAME
     UID = Me
     PWD = Pass

     looking for driver for DSN [EXNAME] in /etc/odbc.ini
     found driver line: "   Driver = FreeTDS"

그리고 다음까지 계속됩니다.

     DSN [EXNAME] has servername "" (from /etc/odbc.ini)

osql이 odbc.ini에서 서버 이름을 감지하지 못하는 것 같습니다.

이 확인 후 isql을 통해 연결할 수 있지만 SQL 명령을 실행할 수 없습니다. 다음과 같은 오류가 발생합니다.

 SQL> SELECT name FROM master..sysdatabases;
 [37000][unixODBC][FreeTDS][SQL Server]Could not find stored procedure 'SELECT'.
 [ISQL]ERROR: Could not SQLExecute

내가 시도한 것 :

A.) freetds.conf 및 .ini 파일 모두에서 생각할 수있는 거의 모든 구성 및 명명 규칙입니다. 변경 사항 게시 위의 동일한 테스트를 수행하고 동일한 결과에 도달합니다.

B.) isql 외부에서 오류 재현. ROBC는 나에게 똑같은 오류를주었습니다. 물론 이것은 예상되지만 그 이유는

C.) MS SQL Server 이외의 SQL 변형. 나는 누군가가 나에게 잘못 알려주는 경우를 대비하여 MySQL 명령을 시도했습니다. 이것은 SQL 문제 일 수 있지만 확실하지 않습니다.

D.) osql이 뱉은 것과 비슷한 오류 (내가 추측하는 좋은 결과)를 찾는 데 가장 가깝 습니다 . 마지막 게시물에서 제안했듯이 문제는 적어도 osql의 응답과 관련된 한 awk. 제안했듯이 awk변수를 만들고 서버 이름을 구문 분석하여 테스트 합니다.

$ SERVER_LINE='ServerName = SERVER'
$ echo ${SERVER_LINE} | awk -F '=[[:space:]]*' '{print $2}'

결과적으로 SERVER""가 표시됩니다.

그게 내가 가진 전부입니다. 요약하면 OSQL이 odbc.ini에서 서버 이름을 찾지 못하는 것 같으며 이로 인해 ISQL 또는 ROBC에서 명령을 실행할 수 없거나 실행하지 못할 수도 있습니다. 나는 이러한 문제가 서로 관련이 없다고 생각하기 시작했지만 어떤 도움이라도 대단히 감사하겠습니다.

수정 : 2014 년 7 월 31 일이 모든 것이 작동합니다. 내가 강조한 것 외에도 다른 문제가 발생했습니다. 결국 Mac과 Linux 상자 모두에서 유사한 연결을 설정해야했습니다. 둘 다에 대한 지침은 다음과 같습니다. http://www.joecjr.com/2014/07/27/install-and-use-freetds-unixodbc-and-rodbc-or-pyodbc/

햄본

TDS를 사용하여 unixODBC를 올바르게 구성하는 데 오랜 시간이 걸렸지 만 그만한 가치가있는 점에 대해이 지침 세트는 저의 구원의 은혜였으며 마침내 작동하도록 허용했습니다.

http://www.unixodbc.org/doc/FreeTDS.html

이 명령을 참조하는 두 번째 항목에 특히주의하십시오.

odbcinst -i -s -f tds.datasource.template 

내 가장 큰 문제가 있었던 곳입니다. 무슨 일이 있었는지 내가 루트로하고 있었는데 (괜찮습니다),주의 깊게 읽으면 드라이버를 사용하는 모든 사용자가이 명령을 실행하여 사용자 ID에 대한 연결을 '등록'해야 함을 나타냅니다. 다른 사용자에게 동일한 명령을 실행하면 실제 코드가 루트로 실행되지 않기 때문에 모든 것이 잘 작동했습니다.

한 가지 다른 생각은 ... 연결이 실제로 TDS에서 작동하는지 확인하는 빠르고 쉬운 테스트 (ODBC 조각을 시도하기 전에도)는 bcp를 실행하고 아주 작은 테이블을 내보내는 것입니다.

TDS 설치가 문제가되는 것을 배제하기 위해 다음과 같이 시도하십시오.

freebcp <database>.dbo.<tablename> out $HOME/foo.out -c -t '|' \
    -S <hostname>:<port> -U <userid> -P <password>

마이크로 소프트와 유닉스가 더 잘 어울리지 않는 것은 안타까운 일이다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관