6

पर मुझे एक पाइथन स्क्रिप्ट के साथ एक समस्या का सामना करना पड़ रहा है जो एक प्रतिबिंबित एमएस एसक्यूएल सर्वर डीबी से जुड़ता है। जब मैं दूसरी बार डीबी से कनेक्ट करने का प्रयास करता हूं तो यह एक विभाजन गलती फेंक रहा है। 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) segfault के साथ तुरंत विफल रहता है। "mydb" को दूसरे सर्वर (sql-server-02) में प्रतिबिंबित किया जाता है। गैर-प्रतिबिंबित डीबी का उपयोग करना, या इस डीबी के लिए मिररिंग अक्षम करना, इसे दूर कर देता है।

हमने कई libs को अपग्रेड करने का प्रयास किया है, और इसने इस मुद्दे को ठीक नहीं किया है। संस्करण:

  • Microsoft SQL सर्वर: 12.00.2000 (नवीनतम)
  • पायथन: 2.7.6
  • pyodbc: 3.0.10 (नवीनतम)
  • unixODBC: 2.2.14p2-5ubuntu5, 2.3 .0, 2.3.4 (नवीनतम)
  • एमएस ODBC RedHat के लिए ड्राइवर: 11.0.1790.0, 11.0.2270.0 (नवीनतम)

यहाँ जोड़ने के लिए, जावा कोड समान चरणों को निष्पादित ठीक काम करता है।

कोई भी विचार?

उत्तर

3

एमएसओडीबीसी चालक के पास कई ज्ञात मुद्दे हैं, खासकर मल्टीथ्रेडिंग के साथ। ऐसा लगता है जैसे आप इसमें भाग रहे हैं। मैं Django के धावक के साथ इसमें भाग गया; यह केवल Django के रनरवर के लिए --nothreading विकल्प के साथ (और अभी भी SQLRowCount में बग के साथ) काम करेगा।

सौभाग्य से, माइक्रोसॉफ्ट अब बेहतर प्रदर्शन करने वाले, विश्वसनीय ड्राइवर (धन्यवाद, एमएस!) बनाने के लिए एक टीम को जोड़ रहा है। इस बीच, मैं फ्रीटीडीएस 0.95 का उपयोग करता हूं (जो टीडीएस संस्करण 7.3, ला ला एसक्यूएल सर्वर 2008 तक का समर्थन करता है), जिसने मुझे बहुत अच्छा व्यवहार किया है। कोशिश करो? सौभाग्य।

+0

आपके उत्तर के लिए धन्यवाद। असल में, हमने फ्रीटीडीएस का इस्तेमाल तब तक किया जब तक एमएस ने अपना खुद का चालक प्रकाशित नहीं किया; स्विच संभव है, हालांकि हमें पेशेवरों और विपक्ष का वजन करना होगा। क्या एमएस के नए ड्राइवर प्रयास के बारे में कोई लिंक हैं? –

+1

एमएस ने स्वीकार किया है कि उनकी चालक गुणवत्ता खराब है; यहां चर्चा का एक लिंक दिया गया है: https://groups.google.com/forum/#!topic/django-developers/FbBcUCzrSZo बैठक वास्तव में इस सप्ताह सिएटल में हो रही है, जिसमें कुछ लोग जिन्होंने Django पर सबसे करीबी काम किया है एसक्यूएल सर्वर समर्थन। – FlipperPA

-1

यह एमएस ओडीबीसी + यूनिक्सोडबीसी के कुछ संस्करणों में एक ज्ञात मुद्दा है। यूनिक्सोडबीसी-2.3.2 और नवीनतम एमएस ओडीबीसी ड्राइवर को अपग्रेड करके, लिनक्स के कुछ वितरणों पर समस्या हल करता है, उदा। उबंटू और डेबियन। आप यहां अपग्रेड के लिए चरणों का पालन कर सकते हैं: https://blog.afoolishmanifesto.com/posts/install-and-configure-the-ms-odbc-driver-on-debian/ यह डबल कनेक्शन समस्या हल करता है - segfaulting के बिना एकाधिक कनेक्शन खोल सकता है।

रेडहाट 7.1 पर मेरे लिए एक ही अपग्रेड/कदम मेरे लिए काम नहीं करते थे - हालांकि आपको अभी भी एक ही सत्र में कनेक्शन खोलने पर एक सेगफॉल्ट मिलता है।

संबंधित मुद्दे