簡體   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