मैं गलत डेटाबेस को गलती से संशोधित करने के जोखिम को कैसे कम कर सकता हूं?


12

मैंने बस मुश्किल तरीका सीखा है जो ऑब्जेक्ट एक्सप्लोरर में एक सर्वर से डिस्कनेक्ट करना आपको क्वेरी विंडो निष्पादित करने से रोक नहीं सकता है जो उस सर्वर पर पहले से ही खुले थे।

मेरी स्थिति इस तरह है: मेरे पास SSMS का एक उदाहरण है जो मैं अपने देव / मंचन सर्वर से और हमारे उत्पादन सर्वर से कनेक्ट करने के लिए उपयोग करता हूं। मुझे देव पर डेटा का एक गुच्छा हटाना था, इसलिए मुझे लगा कि मुझे उत्पादन से अपना कनेक्शन बंद कर देना चाहिए, लेकिन मैं उस क्वेरी विंडो पर ध्यान नहीं देता जिसका मैं उपयोग कर रहा था। (सौभाग्य से हमारे पास केवल कुछ घंटों का बैकअप था।)

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


4
ध्यान दें कि आप क्या कर रहे हैं।
स्वैसेक

मेरा एसक्यूएल उपकरण (एसएसएमएस नहीं) मुझे एक "केवल पढ़ने के लिए मोड" चालू करने की अनुमति देता है, जो डेटाबेस को संभवतः बदल सकने वाले किसी भी बयान को अस्वीकार कर देता है।
a_horse_with_no_name

पर्याप्त नींद लें और व्यायाम करें, अधिक ध्यान दें।

जवाबों:


11

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

ऐशे ही

या एसएसएमएस टूल्स के लिए इस तरह (एक बहुत अच्छा एडऑन, और मुझे रंग बेहतर लगता है जब यह शीर्ष पर होता है, बजाए नीचे की तरफ जैसे) या यह


2
+1 यह वही है जो मैं करता हूं। उत्पादन के लिए लाल का उपयोग करें, परीक्षण के वातावरण के लिए पीला और मेरे स्थानीय विकास डेटाबेस के लिए हरा। पुराना ट्रैफिक-लाइट रूपक यहां अच्छा काम करता है।
लेपर्सस्किनपिलबॉक्स हेट

6

तुम कौन पूछने पर निर्भर करता है, यह एक छोटे से अधिक की आवश्यकता नहीं है, लेकिन मैं हमेशा के लिए बयान नीचे का उपयोग कर की आदत में मिला सभी उत्पादन या पूर्व उत्पादन क्वेरी खिड़कियां, और सभी के लिए UPDATE, DELETEऔर INSERTसभी के वातावरण में बयान।

BEGIN TRAN
-- END OF QUERY WINDOWS
ROLLBACK TRAN
PRINT 'Transaction rolled back.'

अगर मैं इसे देखता हूं, तो मुझे तुरंत पता चल जाएगा, "उफ़, वह क्वेरी विंडो अभी भी जुड़ी हुई थी" या "ओह बकवास, मैंने ऑटो कुछ ऐसा किया जो मेरे पास नहीं होना चाहिए" - और हाँ, आप ऑब्जेक्ट एक्सप्लोरर में डेटाबेस को बंद कर सकते हैं, लेकिन क्वेरी विंडो अभी भी कनेक्ट की जा सकती है। मेरे दिमाग में, सभी उत्पादन प्रश्नों को हाइलाइट किया जाना चाहिए और उनके साथ चलना चाहिए BEGIN TRAN; हर चीज पर एक आकस्मिक F5, सब कुछ वापस रोल करना चाहिए, नहीं COMMIT। यह क्या करता है उपयोगकर्ता को उसके कार्यों के प्रति सचेत होने के लिए मजबूर करता है; आपके द्वारा खाए गए हर भोजन की तस्वीर लेने के समान ही आपको अपना वजन कम करने में मदद करेगा क्योंकि आपको रुकना चाहिए और सोचना चाहिए कि आप क्या कर रहे हैं।

क्या यह करने में अधिक समय लगता है? हाँ। क्या यह 100% त्रुटियों को रोकता है। हां, क्योंकि कभी भी कुछ भी नहीं होता है, जब तक कि मैं मैन्युअल रूप से मजबूर नहीं करता हूं COMMIT, इसे टाइप करें, जिसे बहुत ही स्वभाव ने मुझे विचार करने के लिए मजबूर किया है COMMIT


4
मैं इस अभ्यास के बारे में भी प्रचार करता हूं (और यह SSMS टूल पैक की एक और विशेषता है - आपको नई क्वेरी टेम्पलेट को अनुकूलित करने की अनुमति देता है), लेकिन आपको विपरीत परिदृश्य के बारे में सावधान रहना होगा - आप BEGIN TRAN और क्वेरी को हाइलाइट करते हैं, लेकिन भागना भूल जाते हैं कमिट या रोलबैक, फिर जब आप दोपहर के भोजन, सप्ताहांत, या 6 महीने के विश्राम के लिए भवन छोड़ते हैं, तो सीटी बजाएं।
हारून बर्ट्रेंड

6

उत्पादन परिवर्तनों के लिए दूसरा उपयोगकर्ता खाता बनाएँ और वर्तमान में आपके खाते की पहुँच रद्द करें। जब आप उत्पादन में सामान करना चाहते हैं तो आप दूसरे उपयोगकर्ता के रूप में ssms चला सकते हैं।

EDIT: यह केवल डोमेन लॉगिन के मामले में फायदेमंद होगा। यदि आपके पास दो अलग-अलग डोमेन खाते हैं, तो आपको DEV और PROD के लिए SSMS के अलग-अलग उदाहरणों के लिए मजबूर होना पड़ेगा। यदि आप डोमेन खातों का उपयोग नहीं कर रहे हैं, तो यह सुझाव वास्तव में आपकी बहुत मदद नहीं करेगा।

इसके अलावा, यदि आप अलग डोमेन खाते का उपयोग कर रहे हैं, तो आप प्रति उपयोगकर्ता अपनी SSMS रंग सेटिंग्स को समायोजित कर सकते हैं, हो सकता है कि PROD से कनेक्ट होने वाले खाते के लिए चमकदार लाल पृष्ठभूमि हो।

यहाँ एक अच्छा श्वेत पत्र है जो दिमाग में आया: http://download.microsoft.com/download/D/2/D/D2D931E9-B6B5-4E3B-B0AF-22C749F9BB7E/SQL_Server_Separation_of_Duties_White_Paper_Japer3

यह आपके दैनिक लॉगिन खाते को पूर्ण SA एक्सेस न देने जैसी चीजों पर चर्चा करता है।


आपका मतलब है कि किसी तरह एक SSMS उदाहरण से एक से अधिक सर्वर तक पहुंच को अक्षम कर देगा? या मैं क्या याद किया है?
एंड्री एम

हम पहले से ही विभिन्न उपयोगकर्ता खातों का उपयोग कर रहे हैं, मैं वास्तव में नहीं देखता कि यह कैसे मदद करता है।
टिजिन

1
मुझे लगता है कि यह केवल तभी लागू होगा जब आप डोमेन खातों का उपयोग कर रहे थे। अगर ऐसा होता है या आपको एक अलग उदाहरण का उपयोग करने के लिए मजबूर करेगा यदि SSMS आपके DEV और PROD कनेक्शन के लिए। शायद मैं एक SSMS ऐड-इन लिखूंगा, जो इस परिदृश्य के साथ मदद करता है, हो सकता है कि जब भी आप अपने उत्पादन कनेक्शन पर कोड चलाने की कोशिश करें, एक चेतावनी पॉपिंग ...
मार्क विल्किंसन

ओफ़, टिप्पणी में सभी टाइपोस के लिए खेद है। मोबाइल फोन के माध्यम से सुबह की प्रतिक्रिया ... लेकिन आपको यह विचार मिलता है। :)
मार्क विल्किंसन

हाँ, मुझे आपके उत्तर की जानकारी मिल गई है :) शायद आप अपने जवाब में अपनी टिप्पणी दे सकते हैं?
टिजिन

4

मेरे ऐड-इन: SSMSBoost पर नज़र डालें। यह वही है जो आपको चाहिए। मैंने SSMS स्टेटस-बार कलरिंग फीचर में सुधार किया है ताकि यह आपके वर्तमान डेटाबेस को ट्रैक करे और इसके रंग में बदलाव आए। इसके अतिरिक्त आप "महत्वपूर्ण डीबी अलर्ट" अस्थायी टूलटिप जोड़ सकते हैं:

यहाँ छवि विवरण दर्ज करें

इस फ़ीचर के बारे में यहाँ और पढ़ें: http://www.ssmsboost.com/Features/ssms-add-in-preferred-connections


2

मेरी एक नौकरी में हमने इस उद्देश्य के लिए एक उपकरण विकसित किया।

यदि आप PROD पर एक स्टेटमेंट चलाना चाहते हैं, तो यह आपको लिखने के लिए मजबूर करता है:

run_sql servername PROD <file_with_sqlstatements>.sql

यह परिणामों को लॉगफ़ाइल में लिख देगा और हमारे प्रबंधन डेटाबेस में लॉग में निष्पादन को जोड़ देगा। यह उदाहरण के लिए बहुत उपयोगी था जब हम यह पता लगाना चाहते थे कि एक निश्चित तालिका को बदलने वाला अंतिम व्यक्ति कौन था।

SSMS में, जब आपके पास पंजीकृत सर्वर होते हैं, तो आप कनेक्शन के लिए एक निश्चित रंग लागू कर सकते हैं, ताकि उदाहरण के लिए सभी PROD- कनेक्शन में नीचे लाल रंग हो। लेकिन यदि संभव हो तो उत्पादन सर्वर पर GUI- उपकरण का उपयोग करने से बचें।


मैं अपनी मशीन पर केवल SSMS चला रहा हूं, कनेक्शन स्ट्रिंग के लिए रंग के बारे में शानदार टिप।
टिजिन

3
@Stijn ध्यान दें कि अंतर्निहित रंग सुविधा सभी परिदृश्यों में काम नहीं करती है - यह इस बात पर निर्भर करता है कि आप क्वेरी विंडो कैसे खोलते हैं। एक जो बहुत अधिक विश्वसनीय है (लेकिन एसएसएमएस 2012+ पर मुफ्त नहीं है) एसएसएमएस टूल पैक है । म्लाडेन ने सिर्फ 2014-संगत संस्करण जारी किया।
हारून बर्ट्रेंड

@ उपकरण बहुत दिलचस्प लग रहा है, मैं परीक्षण संस्करण पर एक नज़र डालूँगा, धन्यवाद!
टिजिन

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

1

केवल दो और युक्तियां, क्योंकि मुझे पहले से ही यहां कुछ भी दिखाई नहीं दे रहा है:

  1. अपने वर्कफ़्लो में मैं अक्सर एक ही विंडो में कई स्टेटमेंट्स के साथ काम करता हूं, और मैं टेक्स्ट-फिर-रन-फ्लो का चयन करने के लिए उपयोग किया जाता हूं। लेकिन मैं हमेशा गलती से F5 दबाता हूं जब कोई पाठ नहीं चुना जाता है और परिणामस्वरूप सभी कथन विंडो में निष्पादित होते हैं। इसलिए हर बार जब मैं एक नई विंडो खोलता हूं, तो मैं टाइप करना शुरू करता हूं जो भी कचरा एसक्यूएल संकलन करने से इनकार करेगा। यह प्रभावी रूप से पूरे बैच को गैर-निष्पादन योग्य बनाता है। (चेतावनी! यदि आप अलग-अलग बैचों का उपयोग करते हैं, GOतो प्रति बैच कचरा की आवश्यकता होती है।)

  2. उत्पादन सर्वर पर डेटा परिवर्तन करते समय (या जब भी मुझे अत्यधिक देखभाल की आवश्यकता होती है) - निहित लेनदेन बहुत उपयोगी होते हैं (आप या तो SET IMPLICIT_TRANSACTIONS ONएसएसएमएस में एक विकल्प बदल सकते हैं ताकि विकल्प हर नई विंडो के लिए प्रभावी हो)। इस तरह हर बयान जो लेनदेन में नहीं है - एक नया लेनदेन शुरू करता है। मैं केवल तभी प्रतिबद्ध करता हूं जब मैं दो बार यह सुनिश्चित कर लेता हूं कि मैंने वही किया जो मैं करना चाहता था।


0

एक अलग विंडोज़ उपयोगकर्ता का उपयोग करने का प्रयास करें, जो केवल एक है जिसे उत्पादन डेटाबेस कॉन्फ़िगर किया गया है। इस उपयोगकर्ता के पूरे रंग विषय को लाल पर सेट करें। तेज उपयोगकर्ता स्विचिंग के साथ यह कोई समस्या नहीं होनी चाहिए।

एक विकास मशीन पर एक खाते में उत्पादन क्रेडेंशियल्स का उपयोग कभी न करें। एक छोटा फोनकॉल या सहकर्मी प्रश्न और उसके बाद आप खुशी से अपने नए टेस्टरून के लिए सब कुछ हटा रहे हैं ...

एक अन्य विकल्प (एक ही विचार) एक अलग विषय के साथ एक दूरस्थ डेस्कटॉप या पुण्य मशीन का उपयोग कर रहा है।


0

F5 दबाए जाने पर क्वेरी विंडो में सब कुछ के निष्पादन को रोकने का एक और बल्कि सीधा तरीका / * और * / के साथ सभी सामग्री को घेरना होगा और इस तरह पूरी बात को एक टिप्पणी बना दिया जाएगा।

आप अभी भी उन बयानों को निष्पादित कर सकते हैं जो उन्हें उजागर करके और सामान्य तरीके से F5 दबाकर, भले ही वे एक टिप्पणी में संलग्न हों।

नोट: यदि आप इस पद्धति का चयन करते हैं, तो आप सिंटैक्स हाइलाइटिंग या ऑटो-पूर्ण से लाभ नहीं उठा पाएंगे, लेकिन यदि आप उन विशेषताओं का उपयोग नहीं करते हैं, तो यह सुनिश्चित करने के लिए उन्हें त्याग करना सार्थक हो सकता है कि यह नुकसान के लिए 100% असंभव है एक आकस्मिक F5 के साथ डेटाबेस।

संपादित करें: आप क्वेरी विंडो के भीतर कहीं भी / * * का उपयोग करने में सक्षम नहीं होंगे, अन्यथा आप अनजाने में बाद के कोड को अनसुना कर देंगे। इसके बजाय - संकेतन के साथ चिपके रहने की आवश्यकता है।


-1

मूल प्रश्न पर स्वैसेक की टिप्पणी के साथ समझौता, निष्पादन के बारे में कैसे ...

@@ servername + '\' + @@ सर्विसिनाम चुनें

... किसी भी डीएमएल को चलाने से पहले, या यहां तक ​​कि स्टेटस बार को देखने के लिए कि आप किस उदाहरण से जुड़े हैं, या यहां तक ​​कि सभी डीएमएल को लेन-देन में भी चला रहे हैं ताकि यदि आपको लगता है कि आपने गलती की है तो आप रोलबैक कर सकते हैं? यहां बहुत सारे शानदार सुझाव हैं, लेकिन मूल रूप से, जब संभावित विनाशकारी डीएमएल की बात आती है, तो नौटंकी आपको केवल अब तक मिल जाएगी। मैं हमेशा जांच करता हूं, दोबारा जांच करता हूं और फिर से जांच करता हूं। और अगर मैं थोड़ी मात्रा में डेटा के साथ काम कर रहा हूं, तो मैं डीएमएल से पहले एक नई तालिका का चयन भी कर सकता हूं, अपना डीएमएल चलाऊंगा, यह सुनिश्चित करने के लिए कुछ तुलना करूंगा कि चीजें सही तरीके से काम करती हैं, फिर "बैकअप" तालिका को छोड़ दें। कठोर परिश्रम की जगह बुद्धिमानी से काम करो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.