与 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)。
使用非镜像数据库,或禁用此数据库的镜像,使其消失。
我们已尝试升级多个库,但未能解决问题。
版本:
- 微软SQL服务器: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 的运行服务器;它只适用于 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 上不起作用 - 在同一会话中打开连接两次时仍然会出现段错误。
我遇到了连接到镜像 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)。 使用非镜像数据库,或禁用此数据库的镜像,使其消失。
我们已尝试升级多个库,但未能解决问题。 版本:
- 微软SQL服务器: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 的运行服务器;它只适用于 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 上不起作用 - 在同一会话中打开连接两次时仍然会出现段错误。