与 pyodbc 到镜像 MS SQL 服务器的第二次连接出现段错误

Segfault on 2nd connection with pyodbc to mirrored MS SQL Server

我遇到了连接到镜像 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)。 使用非镜像数据库,或禁用此数据库的镜像,使其消失。

我们已尝试升级多个库,但未能解决问题。 版本:

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

有什么想法吗?

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

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

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

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