2014-07-18 19 views
2

이 항목이 실제로 저를 괴롭히기 시작합니다. 우분투 12.04를 실행하고있어 MS SQL 서버 2012 먼저 내 설치에 대한 몇 가지 정보를 제공 할 수 있습니다 실행 상자에 연결을 시도하고있다 :FreeTDS 및 UnixODBC 사용. 연결할 수는 있지만 isql 또는 RODBC의 SQL 명령을 실행할 수 없습니다.

내 freetds.conf : 설정 한 후

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

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

그래서 내 FreeTDS를 설치 괜찮 작업 것으로 보인다 내 freetds.conf 내가 먼저 예상 (및 환영) 프롬프트를 생산 TSQL 내 연결을 테스트합니다. 다음으로 설정 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" 

을 등등까지 : OSQL이 될 것 같지 않습니다

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

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 문제가 될 수 있지만 확실하지 않습니다.

디) 가장 가까운 나는 osql이 뱉어 낸 것과 비슷한 오류 (잘 추측 한 결과)를 찾는데왔다. here이다. 마지막 게시물에서 제안했듯이 문제는 osql의 응답과 관련이있는 경우 적어도 awk과 관련 될 수 있습니다. "

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

이것은 SERVER 발생한다 대신 나는"얻을 : 제안한 것처럼 나는 변수를 만들고 서버 이름을 구문 분석을 시도하여 awk을 테스트합니다.

그게 전부입니다. 요약하면 OSQL은 odbc.ini에서 서버 이름을 찾지 못하는 것일 수 있으며, 이로 인해 ISQL 또는 ROBC에서 어떤 명령도 실행할 수 없게 될 수도 있습니다. 나는이 문제들이 서로 연관되어 있지 않다고 의심하기 시작했다. 그러나 어떤 도움이라도 대단히 감사 할 것이다.

편집 : 7/31/2014 이 모든 기능이 작동합니다. 내가 강조한 것 이외에도 다른 문제가있었습니다. 나는 맥과 리눅스 박스 모두에서 유사한 연결을 설정해야만했다. http://www.joecjr.com/2014/07/27/install-and-use-freetds-unixodbc-and-rodbc-or-pyodbc/

+0

Linux 환경에서 SQL Server에 액세스하려면 자바/JDBC 기반 도구를 사용하는 것이 나을 것입니다. –

+0

나는 이것을 RedHat에서 설정할 수 있었지만 짐승이었다. 일단 작동하면, 그만한 가치가있다. bin 디렉토리에서 "odbcinst -q -d"를 실행하면 어떻게됩니까? - 데이터 소스를 나열합니까? – Hambone

+0

@Hambone 내 관련 질문을 보시겠습니까? 내 문제에 대한 통찰력이있는 것 같습니다. https://stackoverflow.com/questions/25774778/trouble-installing-freetbs-with-unixodbc-on-debian-servername – lennart

답변

1

TDS를 사용하여 unixODBC를 올바르게 구성하는 데 오랜 시간이 걸렸지 만 가치가있는이 지침 세트는 저의 유익한 은총이었으며 결국에는 제대로 작동하도록했습니다.

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

는 두 번째에 특히주의가 참고이 명령을 내 가장 큰 문제가 거주하는 곳

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

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

또 하나의 생각 ... 연결이 실제로 TDS (ODBC 조각을 사용하기 전에)로 작업하고 있는지 확인하기위한 빠르고 쉬운 테스트는 bcp를 실행하고 실제로 작은 테이블을 내보내는 것입니다.

TDS 설치 문제를 배제하려면 다음과 같이 시도해보십시오.

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

마이크로 소프트와 유닉스가 함께 플레이하지 않는 것은 수치 스럽습니다.

+0

Hambone, 답변 해 주셔서 감사합니다. 나는 당신의 허가 문제가 내가 여기에서 직면하고있는 것과 정확히 같다. 나는 그것을 좀 더 조사 할 필요가있다. 끝나면 이전에 연결했던 (잘하면) 연결하는 절차를 게시 할 것입니다. – JoeC

+0

실제로 SQL 문을 실행할 수없는 이유는 올바른 사용 권한을 부여받지 못했기 때문일 수 있습니까? 올바른 원격 액세스/ODBC 권한을 가지고 있지만 freebcp 프로 시저가 스패 팅되었다고 들었습니다 :'Server ExServer, Line 1 SELECT 권한이 객체

, 데이터베이스 , 스키마 'dbo'에서 거부되었습니다. – JoeC

+0

오류 메시지에 잘 어울리는 것 같지만 Unix 환경 외부의 기능 IDE를 통해 로그온해야합니다. SQL Server를 통한 관리 Windows 서버의 Management Studio가 가장 적합합니다. 실제 로그인과 비밀번호가 있다고 가정합니다. 나는 unixODBC/TDS로 OS 인증이 가능하다고 생각하지 않습니다. – Hambone