1

注:これは再投稿です。この質問は、非公開の理由で以前に削除されました

さて、私はこれを一日中のように機能させるように努めてきました、そして私は始めたときからほとんどそれ以上のことはありません。

RubyOnRailsをSQLServerに接続させようとしています。unixODBCをインストールし、それとFreeTDSを構成して、存在するODBCに関連するほぼすべてのRubygemをインストールしました。

(これは、-vを使用したisqlの出力を表示するように更新されました)

[earlz@earlzarch myproject]$ tsql -S AVP1 -U sa -P pass
locale is "en_US.UTF-8"
locale charset is "UTF-8"
1> quit
[earlz@earlzarch ~]$ isql -v AVP1 sa pass
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
[earlz@earlzarch myproject]$ rake db:version
(in /home/earlz/myproject)
rake aborted!
IM002 (0) [unixODBC][Driver Manager]Data source name not found, and no default driver specified

(See full trace by running task with --trace)

ご覧のとおり、tsqlは機能しますが、isqlは機能しません。それを壊す2つの違いは何ですか?

/etc/odbc.ini

[AVP1]
      Description     = ODBC connection via FreeTDS
      Driver = TDS
      Servername      = my.server
      UID = sa
      PWD = pass
      port = 1232
      Database        = mydatabase

/etc/odbcinst.ini

[TDS]
     Description     = v0.6 with protocol v7.0
     Driver          = /usr/lib/libtdsodbc.so
     Setup           = /usr/lib/libtdsS.so
     CPTimeout       =
     CPReuse         =
     FileUsage       = 1

.so(はい、ファイルが存在することを確認しました)

freetds.confの関連部分

[AVP1]
      host = my.server
      port = 1232
      tds version = 8.0

そして最後に、私のdatabase.yml

development:
    adapter: sqlserver
    mode: odbc
    dsn: AVP1
    username: sa
    password: pass

私がすべての髪を抜く前に誰かが私を助けてくれますか?

完全に最新の64ビットArchLinuxを使用しています。

isqlが失敗する原因は何ですか。私はこの問題についてこれまでに見たすべての解決策を試しましたが、実際にはどれも私のために働いていません。FreeTDSなどを再コンパイルする必要がありますか?

わかりました。また、次の抜粋に示すように、構成ファイルを検出していることをstraceで確認しました。

open("/etc/odbc.ini", O_RDONLY)         = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=159, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc71fe09000
read(3, "[AVP1]\n      Description = ODBC "..., 4096) = 159
4

3 に答える 3

3

誰かがtsqlを機能させたが、インターネット上で広範囲に検索し、構成のトラブルシューティングを行っても、isqlを機能させることができなかった場合は、サーバーログを確認してください。

Xubuntu 12.04 unixodbcのインストールと構成のトラブルシューティングを1週間行っており、Windowsサーバーのイベントビューアーをチェックして、要求がサーバーに着信したとき、または要求があった場合に何が起こっているかを確認することを決定したときに、可能な限り修正を試みました。サーバーに入ってきて、問題が特定のデータベースに入ることができないことであることに気づきました。SQL Serverには問題なくアクセスできましたが、odbc.iniファイルにリストした実際のDBにはアクセスできませんでした。

これは、イベントログ「ユーザー'ePMX'のログインに失敗しました」の特定のテキストです。

理由:明示的に指定されたデータベースを開くことができませんでした。[クライアント:192.168.27.25]」。

私の興味をかきたてたのは「明示的」という言葉でした。だから私は単にコメントアウトし、Database = <DB Name>突然すべてがうまくいき、可能な限りすべてを調査して試した数え切れないほどの時間の後にSQLプロンプトが表示されました。

したがって、unixodbcの使用で問題が発生した場合は、サーバー側とクライアント側のトラブルシューティングを忘れないでください。これは、私が抱えていたのとまったく同じ問題を抱えている投稿をたくさん見たことがありますが、問題を解決したので、問題を抱えていた人の多くはサーバー側の問題だったと思います。

優れたトラブルシューティングツールには、isqlではなくosqlを使用します(osqlは実際にはisqlを使用して接続します)。これは、接続プロセスを段階的に実行し、障害が発生した場所の詳細を提供するためです。これは、isqlを使用するのと同じ方法で使用されます。 osql <DSN> <user> <password>.

したがって、私が言ったように、他のすべてを試しても問題が何であるかを理解できなかった場合は、必ずサーバーログを確認してください。

于 2012-09-05T18:03:28.807 に答える
0

FreeTDSを構築する場合、SQL Serverの現在のバージョンにはTDSプロトコルv8(http://www.freetds.org/userguide/config.htm)が必要です。

./configure --with-tdsver=8.0 --enable-msdblib
于 2011-06-16T21:25:59.847 に答える
0

さて、壁に頭をぶつけてたった2日でようやくわかりました。

私がいたのと同じ状況で誰かがこれを見つけた場合、彼らがこれが役立つと思うように、私はできるだけ多くの情報を提供しようとします。

[earlz@earlzarch ~]$ cat /etc/odbc.ini
[AVP1]
Description=ODBC connection via FreeTDS
Driver=/usr/lib/libtdsodbc.so
Server=192.168.0.100
UID=sa
PWD=pass
Port=1232
ReadOnly=No
[earlz@earlzarch ~]$ cat /etc/odbcinst.ini
[TDS]
     Description     = v0.60 with protocol v7.0
     Driver          = /usr/lib/libtdsodbc.so
     Driver64 = /usr/lib
     Setup           = /usr/lib/libtdsS.so
     Setup64 = /usr/lib
     CPTimeout       =
     CPReuse         =
     FileUsage       = 1
[earlz@earlzarch ~]$ cat /etc/freetds/freetds.conf
[global]
        tds version = 8.0
        initial block size = 512
        swap broken dates = no
        swap broken money = no
        try server login = yes
        try domain login = no
        cross domain login = no
        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.
        # Try setting 'text size' to a more reasonable limit
        text size = 64512

[TDS]
        host = 192.168.0.100
        port = 1232
        tds version = 8.0

運が良ければ、その後:

[earlz@earlzarch ~]$ isql -v AVP1
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed
[ISQL]ERROR: Could not SQLConnect
[earlz@earlzarch ~]$ isql -v AVP1 sa pass
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

どんな種類の環境変数も設定する必要はなく、Arch Linux 64ビット(2010年4月7日付け)でも手動でコンパイルする必要はありませんでした。isqlを機能させた後、Railsはすぐにデータベースにも接続しました。今、私db:schema:loadはなぜ機能していないのかを理解する必要がありますが、それは別の質問です:)

また、このファイルのセットと最後のファイルの唯一の実際の違いは/etc/odbc.iniDriverフィールドを構成エントリの名前ではなく、ドライバーの実際のファイル名に設定したことです。

于 2011-06-16T20:12:52.097 に答える