2010-10-19 12 views
17

मैं एक काफी बड़ी परियोजना पर कुछ रखरखाव प्रोग्रामिंग कर रहा हूं, जिसे अब कंपनी छोड़ दिया गया है ..."अमान्य ऑब्जेक्ट नाम: dbo.etc" त्रुटि का रूट कारण?

मैंने अभी कंपनी के डेटाबेस में से एक का बैक अप लिया है, और उसके बाद इसे फिर से परीक्षण सर्वर। ऐसा लगता है कि ठीक काम कर रहा है।

मैं प्रोग्राम की सामान्य लॉगिन प्रक्रिया के माध्यम से जाता हूं, और वह हिस्सा भी काम करता प्रतीत होता है।

हालांकि, एक बार जब मैं प्रोग्राम में एक बिंदु प्राप्त करता हूं जहां इसे संग्रहीत प्रक्रिया निष्पादित करने की आवश्यकता होती है, तो मुझे Invalid object name 'Informix.dbo.customer' बताते हुए मुझे एक त्रुटि मिलती है।

मूल डेटाबेस पर एक ही फ़ंक्शन चलाने से ठीक काम करता है, और जिस डेटा को मैं देखने की उम्मीद करता हूं उसे वापस लौटाता है।

मुझे मिली त्रुटियों के लिए स्पष्टीकरण स्कीमा को संदर्भित करते हैं, लेकिन यही वह जगह है जहां चीजें थोड़ा अजीब होती हैं। मूल डेटाबेस स्पष्ट रूप से में कोई स्कीमा नहीं है; अपने "सुरक्षा" फ़ोल्डर में इसमें केवल "उपयोगकर्ता" फ़ोल्डर होता है, जिसमें डब्बा होता है, और "भूमिकाएं" फ़ोल्डर होता है, जिसमें "डेटाबेस भूमिकाएं" फ़ोल्डर होता है, जिसमें सामान्य db_owner, आदि सामान होते हैं, और "रिक्त फ़ोल्डर" नामक एक खाली फ़ोल्डर होता है "।

बैक-अप-एंड-रीस्टर्ड डेटाबेस पर सुरक्षा फ़ोल्डर सभी प्रकार के बकवास से भरा है। डीबीओ के अलावा तीन उपयोगकर्ता, "स्कीमा" फ़ोल्डर, "प्रमाणपत्र" फ़ोल्डर, दो एन्क्रिप्शन कुंजी फ़ोल्डर्स ... मैं इनमें से किसी को भी हटा नहीं सकता।

एसक्यूएल लॉगिन सिस्टम की मेरी सीमित समझ से, जिस उपयोगकर्ता में मैं लॉग इन कर रहा हूं उसे यादृच्छिक बकवास के इस संग्रह से गैर-डीबीओ-अनुमतियां मिल रही हैं, और इसलिए स्वामित्व वाले डेटाबेस के हिस्सों तक पहुंच से इंकार कर दिया जा रहा है dbo।

मेरी समझ के लिए, इन Invalid object name त्रुटियों को फेंकने वाली समस्या का मूल क्या है? और व्यावहारिक मामलों के लिए, मैं इस स्थिति को सुधारने के लिए क्या कर सकता हूं और वास्तव में प्रोग्राम मैं परीक्षण डेटाबेस पर उसी तरह से काम कर रहा हूं जैसा कि यह लाइव पर करता है?

+1

क्या पुनर्स्थापित डेटाबेस के पास उत्पादन के समान नाम है? क्या यह संभव है कि डेटाबेस नाम को एप्लिकेशन में हार्ड कोड किया गया हो? –

+0

क्षमा करें, उस बिंदु को बनाने के लिए और फिर भूल गया। मैंने संग्रहित प्रक्रिया का परीक्षण SQL सर्वर प्रबंधन स्टूडियो के भीतर निष्पादित संग्रहीत प्रक्रिया फ़ंक्शन का उपयोग करके किया है और संग्रहित प्रक्रिया मूल डेटाबेस पर काम करती है, न कि नए पर। डेटाबेस नाम वही है, यद्यपि। – Frosty840

उत्तर

9

यदि मैं सही ढंग से समझता हूं, तो आप किसी डेटाबेस (SomeDB) में एक प्रक्रिया (SomeProc) निष्पादित कर रहे हैं और यह त्रुटि Invalid object name 'Informix.dbo.customer' दे रहा है? इसका मतलब यह है कि कुछप्रोक को "इनफॉर्मिक्स" नामक डेटाबेस में "डीबीओ" नामक स्कीमा में "ग्राहक" नामक ऑब्जेक्ट नहीं मिल सकता है। ,

  1. ऑब्जेक्ट मौजूद नहीं है शायद क्योंकि स्कीमा और/या डेटाबेस
  2. वस्तु मौजूद है मौजूद नहीं है, लेकिन उपयोगकर्ता प्रक्रिया चल नहीं है: इस के लिए कई संभावित कारण हैं अनुमति भी देखने के लिए यह
  3. वस्तु मौजूद है, लेकिन डेटाबेस केस-संवेदी है और नाम का कुछ हिस्सा अपने कोड में नाम से मेल नहीं खाता

आप और अधिक जांच करने के लिए पता लगाने के लिए की आवश्यकता होगी आपके मामले में क्या कारण है, लेकिन एक पूर्ण अनुमान के रूप में, आपके उत्पादन सर्वर दोनों में है इनफॉर्मिक्स और कुछ डीडी डेटाबेस, लेकिन आपके टेस्ट सर्वर में केवल कुछ डीडीबी है?

आखिरकार, प्रश्न पोस्ट करते समय कृपया हमेशा अपना SQL सर्वर संस्करण (2000/2005/2008) और संस्करण (एक्सप्रेस, मानक, एंटरप्राइज़) शामिल करें; स्कीमा और अनुमतियों के बारे में बात करते समय वे बहुत महत्वपूर्ण हो सकते हैं, क्योंकि विशेषताएं और व्यवहार अलग-अलग हो सकते हैं।

+0

ठीक है, मेरी समझ काफी खराब नहीं है, लेकिन मुझे समस्या है जहां मुझे समस्या है, इसकी बेहतर समझ के लिए मेरे लिए सबकुछ निर्धारित करना पसंद है। समस्या यह साबित हुई कि मैंने सोचा था कि इनफॉर्मिक्स एक विशिष्ट डेटाबेस के बजाय डेटाबेस कनेक्शन विधि था और इसलिए मुझे प्राप्त होने वाली जानकारी के बारे में * अजीब * गलत धारणाएं थीं। अब सब ठीक हो जाना चाहिए, धन्यवाद। – Frosty840

1

यह ऑब्जेक्ट के स्वामी (आपके मामले में एसपी) के साथ एक समस्या हो सकती है। SQL प्रबंधन स्टूडियो में मालिक की जांच करें

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