6

我遇到了一个连接到镜像 MS SQL 服务器数据库的 Python 脚本问题。当我第二次尝试连接到数据库时,它会引发分段错误。应用服务器和数据库实例都在 Google Compute Engine 上运行。

这是一些复制问题的代码:

import pyodbc

params = {
   'autocommit': True,
   'uid': 'myuser',
   'tds_version': '8.0',
   'DRIVER': '{mssql}',
   'pwd': 'mypassword',
   'server': 'sql-server-01',
   'database': 'mydb',
   'port': 1433,
}

c1 = pyodbc.connect(**params)
c2 = pyodbc.connect(**params)

第一个连接 (c1) 成功,但第二个连接 (c2) 立即因段错误而失败。“mydb”被镜像到第二台服务器(sql-server-02)。使用非镜像数据库,或禁用此数据库的镜像,会使其消失。

我们已经尝试升级几个库,但这并没有解决问题。版本:

  • Microsoft SQL Server:12.00.2000(最新)
  • 蟒蛇:2.7.6
  • pyodbc:3.0.10(最新)
  • unixODBC:2.2.14p2-5ubuntu5、2.3.0、2.3.4(最新)
  • RedHat 的 MS ODBC 驱动程序:11.0.1790.0、11.0.2270.0(最新)

要在此处添加,执行相同步骤的 Java 代码可以正常工作。

有任何想法吗?

4

2 回答 2

3

MSODBC 驱动程序有很多已知问题,尤其是多线程。听起来你遇到了这个问题。我用 Django 的 runserver 遇到了它;它只适用--nothreading于 Django 的运行服务器选项(并且仍然存在 SQLRowCount 中的错误)。

幸运的是,微软现在正在组建一个团队来制作性能更好、更可靠的驱动程序(谢谢你,MS!)。同时,我使用 FreeTDS 0.95(它支持最高 TDS 版本 7.3,a la SQL Server 2008),它对我很好。试试看?祝你好运。

于 2015-10-10T00:05:17.037 回答
-1

这是某些版本的 MS ODBC + unixODBC 中的一个已知问题。通过升级到 unixODBC-2.3.2 和最新的 MS ODBC 驱动程序,解决了一些 linux 发行版的问题,例如 ubuntu 和 debian。您可以在此处按照以下步骤进行升级: https ://blog.afool​​ishmanifesto.com/posts/install-and-configure-the-ms-odbc-driver-on-debian/ 它解决了双重连接问题 - 可以打开多个连接没有段错误。

但是,相同的升级/步骤在 RedHat 7.1 上对我不起作用 - 在同一会话中打开连接两次时仍然会出现段错误。

于 2016-01-29T11:33:16.353 回答