ARITHABORT ON में बदलने के जोखिम


12

मैं एक विक्रेता के साथ इस व्यवस्था के साथ काम कर रहा हूं कि वे कोर एप्लिकेशन प्रदान करें, और जब तक मैं कोर एप्लिकेशन को संशोधित नहीं करता, मैं अपने स्वयं के एक्सटेंशन का निर्माण कर सकता हूं। यह एक SQL Server 2005 डेटाबेस से कनेक्ट करने वाले कोल्डफ़्यूज़न में बनाया गया है।

मैंने जो रिपोर्ट बनाई हैं उनमें से कुछ कोर टेबलों से गणना किए गए कार्यों का उपयोग करते हुए विचारों पर निर्भर करती हैं, और टेबल बहुत बड़े होने के कारण रिपोर्ट बहुत धीमी हो रही हैं। रिपोर्टों को गति देने के लिए, मैं अनुक्रमित विचारों का उपयोग करना चाहता हूं । लेकिन मेरे परीक्षण वातावरण में एक अनुक्रमित दृश्य बनाने के बाद, कोर एप्लिकेशन अब कोर तालिकाओं में नहीं डाल सकता है (यह एक त्रुटि संदेश लौटाता है जो अनुक्रमित विचारों का उपयोग करते समय ARITHABORTहोना आवश्यक है ON)।

तो ऐसा लगता है कि अनुक्रमित दृश्यों का उपयोग करने के लिए, मुझे SET ARITHABORT ONमुख्य तालिकाओं को सम्मिलित करने / अद्यतन करने की आवश्यकता है जब भी मुख्य तालिकाओं को अद्यतन करना होगा। मैंने इसे अपने परीक्षण परिवेश में चलाया:

ALTER DATABASE MyDatabase SET ARITHABORT ON;

और यह ठीक काम करने लगता है। लेकिन मेरे विक्रेता का कहना है कि चूंकि एप्लिकेशन में हजारों प्रश्न हैं, इसलिए एक जोखिम हो सकता है कि यह सेटिंग इन प्रश्नों में से एक को तोड़ सकती है, और अगर हमारे पास कुछ भविष्य के अप्रत्याशित डेटाबेस समस्या है, तो वे आग्रह करेंगे कि मैं डिफ़ॉल्ट सेटिंग को पुनर्स्थापित करूं।

क्या वास्तविक प्रश्न हैं, जिन्हें तोड़ा जाएगा SET ARITHABORT ON? क्या ऐसी कोई स्थिति है जहां इसे रखना बेहतर होगा OFF?

टीएल; डीआर मेरे नए अनुक्रमित विचारों के लिए काम करने के लिए मुझे ARITHABORT ONपूरे डेटाबेस के लिए सेट करने की आवश्यकता है , लेकिन मेरा विक्रेता चेतावनी देता है कि यह मेरे अपने जोखिम पर होगा। क्या वास्तव में कोई जोखिम है?

जवाबों:


9

तो SET ARITHABORT ON मूल रूप से कहते हैं "यदि शून्य त्रुटि से एक विभाजन होता है या एक अंकगणितीय अतिप्रवाह होता है तो क्वेरी को समाप्त कर दिया जाता है" यह आमतौर पर वांछनीय व्यवहार होता है और डिफ़ॉल्ट उदाहरण विस्तृत सेटिंग है। यदि यह आपके विक्रेता के प्रश्नों के साथ समस्या का कारण बनता है, तो मैं कहूंगा कि वे शुरू करने के लिए कुछ कोडिंग मुद्दों से पीड़ित हो सकते हैं। मैं उनसे अधिक विवरण के लिए पूछूंगा कि वे यहां क्यों चिंतित हैं।

अनुक्रमित विचारों के सभी नियमों में से , मैं इसे कॉल करूंगा और कई सेट विकल्प सबसे कम विवादास्पद हैं।

इसे उन कनेक्शनों में सेट करना होगा जो दृश्य के साथ सहभागिता करते हैं। इसलिए आप विक्रेता के साथ काम करना चाहते हैं और वास्तव में उनके तर्क को समझने और समझने की कोशिश करते हैं और उन्हें इस बात के लिए प्रतिबद्ध करते हैं कि वे यहां बड़ी असहमति पर क्या सोच रहे हैं।

कहा कि - अनुक्रमित विचार एक बड़ी बात है। उनके पास अन्य नियम हैं और वे आवेदन और मान्यताओं को प्रभावित कर सकते हैं जब विक्रेता के डेवलपर्स के पास निर्माण और प्रदर्शन परीक्षण था। आपको वास्तव में उनके साथ व्यापार की समस्या के बारे में बातचीत करनी चाहिए जिसे आप अनुक्रमित दृश्यों के माध्यम से हल करने की कोशिश कर रहे हैं और उन्हें बातचीत में शामिल करें कि समस्या को कैसे हल किया जाए।


7

इस परिवर्तन को करने से स्पष्ट जोखिम यह है कि विक्रेता के प्रश्न जो पहले सही ढंग से चले थे, त्रुटियों को फेंकना शुरू कर सकते हैं, या गलत परिणाम दे सकते हैं। ARITHABORTसेटिंग आंशिक रूप से नियंत्रण प्राप्त होता है गणित अतिप्रवाह और डिवाइड-दर-शून्य त्रुटियों एक वापसी NULLपरिणाम, एक त्रुटि के साथ बयान समाप्त कर दें, या एक त्रुटि के साथ बैच समाप्त। विक्रेता कोड कोड पर कैसे प्रतिक्रिया दे सकता है जो लौटने के बजाय एक त्रुटि फेंकता NULLहै कुछ ऐसा नहीं है जिसे आप उत्पादन प्रणाली पर प्रयोग करना चाहते हैं :)

हालाँकि, यदि आपके डेटाबेस संगतता स्तर 90 या अधिक है, और सत्र के साथ चलने पर जोखिम कम है SET ANSI_WARNINGS ONONजब आप अनुक्रमित विचारों का परीक्षण करते हैं, तो यह सेटिंग अवश्य होती है , लेकिन आपको अपने विक्रेता के कनेक्शन द्वारा उपयोग की जाने वाली प्रभावी सेटिंग की पुष्टि करने की आवश्यकता होती है । SETकनेक्ट करते समय विक्रेता स्टूडियो द्वारा सेट किए गए विभिन्न विकल्पों का उपयोग करने के लिए प्रबंधन स्टूडियो को अच्छी तरह से कॉन्फ़िगर किया जा सकता है (और आप डेटाबेस या उदाहरण के साथ उन लोगों को ओवरराइड नहीं कर सकते हैं )। विक्रेता के साथ की जाँच करें, और SQL Server Profiler का उपयोग करके विक्रेता कोड को ट्रेस करके पुष्टि करें।

यकीनन, बड़ा जोखिम यह है कि विक्रेता आपके इंस्टॉलेशन का समर्थन करने से इंकार कर देगा, जब तक कि सेटिंग वापस नहीं आती है OFF, लेकिन आपको अपने विक्रेताओं को अनुशंसित SETविकल्पों के साथ काम करने के लिए अपने कोड को अपडेट करने के लिए प्रोत्साहित करने का प्रयास करना चाहिए , इसलिए आपको इसके बीच चयन करने की आवश्यकता नहीं है एक समर्थित स्थापना का प्रदर्शन और चलाना। वैकल्पिक रूप से डेटाबेस की एक प्रति के खिलाफ रिपोर्ट चलाने के लिए है।

-- Recommended effective settings
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT, 
    CONCAT_NULL_YIELDS_NULL, 
    QUOTED_IDENTIFIER, 
    ANSI_NULLS, 
    ANSI_PADDING,
    ANSI_WARNINGS ON;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.