Mam do czynienia z problemem ze skryptem w języku Python, który łączy się z lustrzanym DB serwera MS SQL. Występuje błąd segmentacji, gdy próbuję połączyć się z bazą danych po raz drugi. Zarówno serwer aplikacji, jak i instancje DB działają w Google Compute Engine.Segfault na drugim połączeniu z pyodbc do mirrored MS SQL Server
Oto niektóre kodu replikowania problem:
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)
Pierwsze połączenie (c1) się powiedzie, ale drugie połączenie (c2) nie natychmiast segfault. "mydb" znajduje odzwierciedlenie w drugim serwerze (sql-server-02). Użycie nieszynowanej bazy danych lub wyłączenie kopii lustrzanej dla tej bazy danych powoduje jej odebranie.
Próbowaliśmy zaktualizować kilka bibliotek, a to nie rozwiązało problemu. Wersje:
- Microsoft SQL Server: 12.00.2000 (najnowsza)
- Python: 2.7.6
- pyodbc: 3.0.10 (najnowsza)
- unixODBC: 2.2.14p2-5ubuntu5, 2,3 0,0, 2.3.4 (najnowsza)
- kierowca MS ODBC dla RedHat: 11.0.1790.0, 11.0.2270.0 (najnowsza)
tu dodać, kod Java, wykonując te same czynności, działa bez zarzutu.
Wszelkie pomysły?
Dzięki za odpowiedź. W rzeczywistości używaliśmy FreeTDS do czasu opublikowania przez MS własnego sterownika; zmiana jest możliwa, chociaż będziemy musieli rozważyć zalety i wady. Czy są jakieś linki na temat nowego wysiłku kierowcy MS? –
MS przyznało, że jakość ich kierowców jest niska; Oto link do dyskusji: https://groups.google.com/forum/#!topic/django-developers/FbBcUCzrSZo Spotkanie w tym tygodniu odbywa się w Seattle z niektórymi ludźmi, którzy pracowali najbliżej Django Obsługa SQL Server. – FlipperPA