2
$ freebcp DWSTAGE.BCPTEST in bcptest.txt -f cdr.fmt -S serverfromfreetds -U user@azureserver -P password
Msg 208, Level 16, State 1
Server 'azureserver', Line 1
    Invalid object name 'DWSTAGE.BCPTEST'.
Msg 208, Level 16
General SQL Server error: Check messages from the SQL Server

Msg 20064, Level 2
Attempt to use Bulk Copy with a non-existent Server table

$ freebcp DATABASENAME.DWSTAGE.BCPTEST in bcptest.txt -f cdr.fmt -S serverfromfreetds -U user@azureserver -P password
Msg 40515, Level 15, State 1
Server 'azureserver', Line 16
    Reference to database and/or server name in 'DATABASENAME.DWSTAGE.BCPTEST' is not supported in this version of SQL Server.
Msg 40515, Level 15
General SQL Server error: Check messages from the SQL Server

Msg 20064, Level 2
Attempt to use Bulk Copy with a non-existent Server table

また、-Dオプションを使用してデータベースをコマンドラインに追加してみました。その接続のデフォルトデータベースは、freetds.conf内のこの唯一のAzureデータベースとして設定されます。

それ以外の場合、SQLAzureへの接続は問題ないようです。FreeBCPを機能させることができません。

$ isql serverfromfreetds user@azuredatabasename password
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> SELECT COUNT(*) FROM DWSTAGE.BCPTEST;
+------------+
|            |
+------------+
| 0          |
+------------+
SQLRowCount returns 1
1 rows fetched
SQL> SELECT COUNT(*) FROM DWSTAGE.BCPTESTX;
[ISQL]ERROR: Could not SQLExecute
SQL> 

これはデータベースとスキーマの混乱のようですが、機能する設定の組み合わせが見つかりません。

4

2 に答える 2

2

FreeTDSメーリングリストから:

メッセージ208はサーバーから送信されます。freebcp.cをざっと見ると、argv[1]が解析されていないことがわかります。構造体にコピーされ、逐語的に使用されます。

                    if (dbfcmd(dbproc, "SET FMTONLY ON select *

from%s SET FMTONLY OFF "、pdata-> dbobject)== FAIL)

私の推測では、ログインしているアカウントにはデフォルトのデータベースがあり、そのデータベースにはDWSTAGE.BCPTESTが含まれているデータベースではありません。Azureサーバーはdbname.schema.object構文を拒否し、freebcpには-Dオプションがありません。これは、AzureまですべてのTDSサーバーがその構文を受け入れるためです。

あなたはそれを使用して確認することができます

    $ freebcp 'select db_name()' queryout /dev/stdout ...

一時的な回避策として、これでうまくいくと思います。

    freebcp DWSTAGE.BCPTEST in bcptest.txt \
    -O 'USE dbname' \
    -f cdr.fmt -S serverfromfreetds -U user@azureserver -P password

恒久的な修正は-Dをサポートします。


はい、そのユーザーのデフォルトデータベースはおそらくマスターです。odbc構成にはデフォルトのデータベースが設定されていますが、私は間違っていました。freeetds.confにはそのようなオプションはありません。

今のところ、Linuxをこのプロセスで機能させる試みから離れましたが、これを再検討します。

USEがサポートされていないため、回避策は機能しないと思います。SQLAzureアーキテクチャの性質上、実際にはデータベースに直接接続する必要があります。


はい、あなたが正しい。私はそれを忘れました。

約1年前、db-libLOGINRECでdbnameを設定する方法としてDBSETLDBNAMEマクロを追加しました。これにより、ログインパケットにdbnameが設定され、「USEdbname」が不要になります。freebcpは、-Dオプションを使用してその機能をサポートするように変更できます。


変更を参照してください

http://gitorious.org/freetds/freetds/commit/4a21ded022405693607e71938d0c6173816f5ff9/diffs/c34afafd2fec4cbba9b245e4f13a5471c6fb8041

(freebcpに-Dのサポートを追加)

于 2012-11-21T04:07:55.717 に答える
0

freebcpUbuntu12.04とAzureSQLを使用するようになりました。それは、サポートが言及されている上記の答えに続きます-D

freetdsまず、次のスレッドで説明されているようにインストールと構成を行います: https ://askubuntu.com/questions/167491/connecting-ms-sql-using-freetds-and-unixodbc-isql-no-default-driver-specific

基本的に、それは以下で構成されていました: sudo apt-get install tdsodbc unixodbc freetds-bin

これで、このスレッドが始まるところまで来ました。freebcp接続できましたが、「データベースへの参照...このバージョンのSQLサーバーではサポートされていません」というエラーが発生していました。

次のステップは、freebcpapt-getによってインストールされたバージョンがかなり古いバージョンであることに注意することです。代わりに、ftp://ftp.freetds.org/pub/freetds/stable/から最新バージョンをダウンロードしてください。使用しfreetds-1.00.9.tar.gzました。

を使用してインストールして./configureからmake、この新しいfreebcpものを同じように使用しますが、を使用し-Dます。

これが私のコマンド文字列です:freetds-1.00/src/apps/freebcp bcptest in bcptest.big.dat -U myUserName@myServer -S MyServerConfig -P 'mypa$$word' -D myDatabase -c -e upload.err

于 2017-01-18T17:56:10.883 に答える