हाल ही में, हमारे ग्राहकों में से एक को SQL सर्वर तालिका में कुछ Oracle® डेटा सम्मिलित करने का प्रयास करते समय समस्याओं का सामना करना पड़ रहा था। सम्मिलन विफल हो रहा था क्योंकि SQL सर्वर आवृत्ति में लक्ष्य तालिका उस डेटाबेस में मौजूद नहीं थी जिससे ग्राहक कनेक्ट हो रहा था।
आखिरकार, इस मुद्दे का समाधान सबसे आसान था। तार्किक क्रम में समस्या के संभावित सुधारों की सूची प्रस्तुत करने के प्रयास में इस समस्या निवारक में यह समाधान और अन्य शामिल हैं। यद्यपि समस्या निवारक एक Easysoft ODBC ड्राइवर पर आधारित है जो SQL सर्वर को अपने लक्ष्य डेटाबेस के रूप में उपयोग कर रहा है, कई चरण अन्य डेटाबेस के लिए अन्य unixODBC आधारित ड्राइवरों पर लागू होते हैं।
- अपने लक्ष्य डेटाबेस के लिए अपने डेटा स्रोत (DSN) की जाँच करें।
इसे आमतौर पर /etc/odbc.ini में परिभाषित किया जाएगा।
महत्वपूर्ण इन चरणों को केवल इसलिए बायपास न करें क्योंकि आपका DSN किसी अन्य मशीन पर काम कर रहे सेटअप की एक प्रति है। विशेष रूप से यदि वह कार्यशील सेटअप किसी अन्य प्लेटफ़ॉर्म पर है और/या ड्राइवर के भिन्न संस्करण का उपयोग करता है। ODBC ड्राइवर के विभिन्न संस्करण odbc.ini फ़ाइल को अलग तरह से पार्स कर सकते हैं, उदाहरण के लिए, कुछ DSN या DSN विशेषता के अंतिम संस्करण का उपयोग कर सकते हैं, जब वे डुप्लिकेट होते हैं, तो कुछ अंतिम का उपयोग कर सकते हैं। साथ ही, एक भिन्न प्लेटफ़ॉर्म पर कोई भिन्न ड्राइवर odbc.ini फ़ाइल को पार्स करना बंद कर सकता है यदि फ़ाइल में कोई समस्या वर्ण है जैसे कैरिज रिटर्न।
- जांचें कि डेटा स्रोत की केवल एक प्रति है। अगर डेटा स्रोत के एक से ज़्यादा वर्शन हैं, तो या तो उनका नाम बदलें या दूसरे वर्शन हटा दें. यानी, आप यह चाहते हैं:
[MYDSN] Database=MYDB
—या—
[MYDSN1] Database=MYDB1 [MYDSN2] Database=MYDB2
नहीं
[MYDSN] Database=MYDB [MYDSN] Database=MYDB
- जब आप सुनिश्चित हों कि आपके पास डीएसएन की केवल एक प्रति है, तो जांच लें कि डीएसएन में केवल लक्ष्य डेटाबेस निर्दिष्ट करने वाली रेखा है। यानी, आप यह चाहते हैं:
[MYDSN] Database=MYDB Server=MYMACHINE . . . [ANOTHERDSN]
नहीं
[MYDSN] Database=MYDB Server=MYMACHINE Database=MYDB2 . . . [ANOTHERDSN]
—या—
[MYDSN] Database=MYDB Server=MYMACHINE Database= . . . [ANOTHERDSN]
- जांचें कि डेटा स्रोत की केवल एक प्रति है। अगर डेटा स्रोत के एक से ज़्यादा वर्शन हैं, तो या तो उनका नाम बदलें या दूसरे वर्शन हटा दें. यानी, आप यह चाहते हैं:
- यदि आप स्पष्ट रूप से डेटाबेस निर्दिष्ट नहीं करते हैं, तो अपने डीबीए से जांच लें कि आपके उपयोगकर्ता के लिए डिफ़ॉल्ट डेटाबेस वही है जो आपको लगता है। उदाहरण के लिए, SQL सर्वर में किसी विशेष डेटाबेस से कनेक्ट करने के लिए लॉगिन कॉन्फ़िगर करना संभव है, इसलिए इसमें:
[MYDSN] Database=MYDB Server=MYMACHINE User=MYUSER. . . [ANOTHERDSN]
MYUSER शुरू में यह कहने के लिए कनेक्ट हो सकता है, एडवेंचरवर्क्स यदि लॉगिन को किसी विशेष डेटाबेस में कॉन्फ़िगर किया गया है, या मास्टर डेटाबेस यदि यह नहीं है।
- जांचें कि आप उस डीएसएन से जुड़ रहे हैं जो आपको लगता है कि आप हैं। भले ही आपने अपने DSN को /etc/odbc.ini के पहले से मौजूद संस्करण में जोड़ा है, इसका मतलब यह नहीं है कि आपका ड्राइवर प्रबंधक इस फ़ाइल को देख रहा है। ड्राइवर प्रबंधक कैसे बनाया जाता है या पर्यावरण कैसे सेट किया जाता है, इस पर निर्भर करते हुए, यह एक अलग स्थान पर दिख रहा हो सकता है। जाँच करने के लिए, डेटा स्रोत में ड्राइवर विशेषता पर टिप्पणी करने का प्रयास करें। यदि आप अभी भी कनेक्ट कर सकते हैं, तो आप DSN के किसी भिन्न संस्करण का उपयोग कर रहे हैं। यह पता लगाने के लिए कि कौन सी odbc.ini फ़ाइल का उपयोग किया जा रहा है, स्ट्रेस या ट्रस जैसे प्रोग्राम का उपयोग करें। उदाहरण के लिए:
$ more /etc/odbc.ini [MYDSN] #Driver=Easysoft ODBC-SQL Server $ /usr/local/easysoft/unixODBC/bin/isql.sh -v MYDSN SQL> $ strace -o -f /tmp/odbc.log /usr/local/easysoft/unixODBC/bin/isql.sh -v MYDSN $ grep odbc.ini /tmp/odbc.log
यदि आपने किसी अन्य मशीन से DSN की प्रतिलिपि बनाई है, तो स्रोत DSN के स्थान को सत्यापित करने के लिए उस मशीन पर इस प्रक्रिया को दोहराने का प्रयास करें।
- जांचें कि आप उस DBMS से जुड़ रहे हैं जो आपको लगता है कि आप हैं। उदाहरण के लिए, यदि यह बहुत विघटनकारी नहीं है तो डीबीएमएस के लिए लक्ष्य उदाहरण/सेवा को रोकने/रोकने का प्रयास करें। यदि आप अभी भी कनेक्ट कर सकते हैं, तो आप किसी अन्य मशीन पर किसी DBMS से कनेक्ट कर रहे हैं। शायद आपके नेटवर्क को इस तरह से कॉन्फ़िगर किया गया है कि किसी अन्य मशीन में वही IP पता हो सकता है जो DSN में निर्दिष्ट है।
- Isql में, "सहायता" टाइप करें। लौटाई गई तालिकाओं की सूची में, कौन सा डेटाबेस नाम दिखाया गया है? क्या यह वही है जिसकी आप अपेक्षा करते हैं? यदि नहीं, तो क्या होगा यदि आप टाइप करते हैं:
use database
डेटाबेसबदलें लक्ष्य डेटाबेस के नाम के साथ। यदि आप डेटाबेस नहीं बदल सकते हैं, तो अपने डीबीए से जांचें कि क्या कोई लॉगऑन ट्रिगर है जो आईपी पते द्वारा डेटाबेस तक पहुंच को नियंत्रित करता है। SQL सर्वर प्रबंधन स्टूडियो में, लॉगऑन ट्रिगर INSTANCE . के अंतर्गत हैं> सर्वर ऑब्जेक्ट> ट्रिगर।