标签: freetds

在 SQL Server 上轻松访问 REST?

在工作中,我们的主要数据库之一运行在 MS SQL Server 上。我认为是 2008 年。

我目前正在 Linux 主机上通过 UnixODBC 和 FreeTDS 访问它。不幸的是,我们的管理员不支持 UnixODBC/FreeTDS,所以它落在我身上。对于长期策略,我想使用 SOAP 或 REST 调用,离开 ODBC 并切换到 HTTP。使用 HTTP 安装要容易得多,而且大多数语言都能理解它,至少是我开发的 Perl、Python 和 Ruby。

我们已经为一些 Java 进程在数据库上设置了相当数量的 SOAP 调用,所以我们可以很容易地切换到那个。我们也在讨论 REST,我喜欢它,因为它更轻量级。我们的 DBA 没有设置任何 REST 接口,所以我想知道是否有适用于 SQL Server 的插件或工具可以对表进行简单的 REST 映射,让我们快速入门。我已经考虑过用 Ruby 的 Sinatra 写一些东西,但这将是我的盘子里的另一件事。

我搜索了“SQL Server + rest”,但很明显谷歌会用“REST”这个词做错事,因此,没有找到任何有价值的东西。因此,如果您有提供 REST 的经验并觉得它是一个很好的工具,那么请加入。

sql-server freetds unixodbc

7
推荐指数
1
解决办法
1万
查看次数

从 Linux(但不是从 Windows)执行存储过程几分钟时,FreeTDS/Azure 中出现 SQL-08S01 错误

在 Linux(Ubuntu 和 CentOS)上执行从 Perl/DBI/ODBC/FreeTDS 到 SQL Azure 的存储过程时出现此错误:

[unixODBC][FreeTDS][SQL Server]Read from the server failed (SQL-08S01)
Run Code Online (Sandbox Code Playgroud)

在连接到同一个 SQL Azure 数据库的 Windows(ODBC/本机)上运行相同的 Perl 脚本时,我没有收到此错误,虽然该过程需要几分钟才能运行,但它确实完成了。显然是完全不同的客户端/驱动程序环境,但它们都使用相同的 SQL Azure 数据库,并且 Perl 脚本本身没有区别。两种 Perl 环境应该相似,但显然客户端/驱动程序会有所不同。

失败的行很简单 - 一个没有参数的过程,它从临时表中获取数据并处理它 - 在 Linux 调用失败时,SQL Azure 上的环境与我从 Windows 测试调用时没有显着不同(它当临时表加载了某些数据并从 Linux 调用时,它是完全可重现的):

$dbh->do("EXEC procname;") or die $DBI::errstr ;
Run Code Online (Sandbox Code Playgroud)

我的搜索表明这是某种连接问题或超时。

我正在努力提高 proc 性能,但未在 Linux 机器上设置超时(因此应默认为 0)。

我能做些什么来阻止这个错误?

这是来自 FreeTDS 的错误运行的日志:

util.c:156:Changed query state from IDLE to QUERYING
write.c:140:tds_put_string converting 27 bytes of "EXEC DWTOOLS.LoadFromStage;"
write.c:168:tds_put_string wrote 54 bytes
util.c:156:Changed query …
Run Code Online (Sandbox Code Playgroud)

sql-server freetds azure-sql-database

6
推荐指数
1
解决办法
2848
查看次数

可以通过 tsql 连接到 SQL Server,但不能从 bsqldb 连接

安装 FreeTDS 后,我能够使用 tsql 连接到我们的 SQL Server,但还不能通过 bsqldb。使用 bsqldb,即使 db 被指定为 testDB.

serverName 设置在 /etc/freetds.conf

[serverName]
        host = database.windows.net
        port = 1433
        tds version = 8.0
Run Code Online (Sandbox Code Playgroud)

使用 tsql:

[gpadmin@mdw ~]$ /usr/bin/tsql -S serverName -U user -D testDB -P password
Run Code Online (Sandbox Code Playgroud)

工作正常

使用 bsqldb,它会尝试连接到 master,即使 db 被指定为 testDB。

[gpadmin@mdw ~]$ /usr/bin/bsqldb -U user -P password -S serverName \
                                 -D testDB -i tag.sql -o tag.csv

Msg 4060, Level 11, State 1
Server 'fj5j2jtt5k', Line 1
        Cannot open database "master" requested by the …
Run Code Online (Sandbox Code Playgroud)

freetds

5
推荐指数
1
解决办法
9674
查看次数