我必须使用巴克普用于从命令行导出数据的工具SQL服务器数据库到 Red Hat 服务器中的文件。我(显然)正在使用有效的陈述,但是巴克普不产生任何类型的输出/结果。但是,当我执行缺少或无效参数的语句时,它会显示相应的错误。我正在寻找此问题的原因(例如安装缺陷、使用不当巴克普、缺乏权限或任何其他已知冲突)以及如何修复它。
bcp 语句:
bcp fully_qualified_table_name out ./data.txt -c -S server -U user -P password
bcp 用法:
usage: /opt/microsoft/bin/bcp {dbtable | query} {in | out | queryout | format} datafile
[-m maxerrors] [-f formatfile] [-e errfile]
[-F firstrow] [-L lastrow] [-b batchsize]
[-n native type] [-c character type] [-w wide character type]
[-N keep non-text native] [-q quoted identifier]
[-t field terminator] [-r row terminator]
[-a packetsize] [-K application intent]
[-S server name or DSN if -D provided] [-D treat -S as DSN]
[-U username] [-P password]
[-T trusted connection] [-v version] [-R regional enable]
[-k keep null values] [-E keep identity values]
[-h "load hints"] [-d database name]
bcp版本:
BCP - Bulk Copy Program for Microsoft SQL Server.
Copyright (C) Microsoft Corporation. All Rights Reserved.
Version: 11.0.2270.0
SQL Server 版本 ( SELECT @@VERSION
):
Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
分配:
Red Hat Enterprise Linux 6.7 (KornShell).
带有相应错误消息的无效语句(示例)。
bcp THAT_TUB_ACE.oh_nerd.table_name out ./data.txt -c -S sr._bear -U you_sr. -P pass_sword
SQLState = S1T00, NativeError = 0
Error = [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]Login timeout expired
SQLState = 08001, NativeError = 11001
Error = [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
SQLState = 08001, NativeError = 11001
Error = [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]TCP Provider: Error code 0x2AF9
...
bcp fully_qualified_table_name ./data.txt -c -S valid_server -U valid_user -P bad_word
bcp fully_qualified_table_name out ./data.txt -c -S valid_server -U valid_user -P bad_word
SQLState = 28000, NativeError = 18456
Error = [unixODBC][Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user 'valid_user'.
概括。
目标是使用以下语法(或类似语法)生成数据文件:
bcp fully_qualified_table_name out ./data.txt -c -S server -U user -P password
事实是:
- 当运行有效的巴克普声明窗口中根本没有任何内容(没有输出)并且没有创建任何数据文件。
- 我无法使用选项
-T
(使用集成安全性的可信连接)巴克普所以我必须指定服务器、用户和密码。 - 已经在一张非常简单的小桌子上尝试过
queryout
选项,但仍然没有运气。 - 凭据有效,我使用
sqlcmd
如下命令成功测试了它们:sqlcmd -S server -U user -P password -Q 'SELECT * FROM really_small_table'
。 - 这巴克普下的陈述“带有相应错误消息的无效语句(示例)”这个问题的部分只是无效陈述的例子,以表明巴克普实际上做了一些事情,但给出了预期的结果。
答案1
我在 Debian 平台上发现 Microsoft ODBC 安装过程放入libodbc.so
了/usr/lib64
.这不是图书馆的预期位置,因此bcp
无法找到它。但它不会告诉您找不到必要的库,而是直接退出。
Debian 的解决方案。你的情况应该是类似的。
找到安装程序所在的位置
libodbc.so
:find / -type f -name libodbc.so
将其目录添加到新文件中
/etc/ld.so.conf.d/odbc.conf
。我发明了这个名字,并且在我的系统上/etc/ld.so.conf.d
包含来自/etc/ld.so.conf
:# Required but not documented by MS ODBC installation for SQL Server /usr/lib64
运行
ldconfig
以更新库位置列表重试
bcp
命令
您需要成为 root 才能执行步骤 2 和 3。鉴于您已经成功安装了 SQL Server 库,我认为这没什么大不了的。