第二次与pyodbc连接到镜像MS SQL Server的Segfault

Max*_*ski 6 python sql-server pyodbc segmentation-fault database-mirroring

我正面临着连接到镜像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)
Run Code Online (Sandbox Code Playgroud)

第一个连接(c1)成功,但第二个连接(c2)立即失败并出现segfault."mydb"镜像到第二个服务器(sql-server-02).使用非镜像数据库或禁用此数据库的镜像会使其消失.

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

  • Microsoft SQL Server:12.00.2000(最新)
  • Python: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代码可以正常工作.

有任何想法吗?

Fli*_*rPA 3

MSODBC 驱动程序有许多已知问题,尤其是多线程方面。听起来你正遇到这个问题。我在 Django 的 runserver 中遇到了这个问题;它只能与--nothreadingDjango 的 runserver 选项一起工作(并且仍然存在 SQLRowCount 中的错误)。

幸运的是,微软现在正在组建一个团队来开发性能更好、更可靠的驱动程序(谢谢你,微软!)。与此同时,我使用 FreeTDS 0.95(它支持最高 TDS 版本 7.3,类似于 SQL Server 2008),它对我来说非常好。尝试一下吗?祝你好运。