繁体   English   中英

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

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

我遇到了与镜像MS SQL Server DB连接的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(最新)
  • 的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代码可以正常工作。

有任何想法吗?

MSODBC驱动程序有很多已知问题,尤其是在多线程方面。 听起来您好像遇到了这种情况。 我在Django的runserver中遇到了这个问题; 只有使用Django的runserver的--nothreading选项,它才能正常工作(并且仍然存在SQLRowCount中的错误)。

幸运的是,Microsoft现在正在组建一个团队,以提供性能更好,更可靠的驱动程序(谢谢您,MS!)。 同时,我使用的是FreeTDS 0.95(它支持TDS 7.3版,即SQL Server 2008),这对我来说非常好。 试试看吗? 祝好运。

在某些版本的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/它解决了双重连接问题-可以打开多个连接没有segfaulting。

尽管在RedHat 7.1上,相同的升级步骤对我不起作用-在同一会话中两次打开连接仍会遇到段错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM