एक अज्ञात डेटाबेस को समझने के लिए कहां से शुरू करें


12

तो, शीर्षक इसे बोता है।

मुझे 28 तालिकाओं और 86 संग्रहीत प्रक्रियाओं के साथ एक SQL सर्वर डेटाबेस मिला है जो रिवर्स इंजीनियर होना चाहिए। मुझे पूरा यकीन है कि कुछ तालिकाओं का उपयोग कभी नहीं किया जाता है और यह भी नहीं कि सभी procs का उपयोग किया जाता है।

सबसे बड़ी समस्या यह है कि सभी Windows सेवाएँ जो इस DB के साथ उपयोग करने के लिए बनाई गई थीं और सभी सॉफ़्टवेयर और डेटाबेस दस्तावेज़ खो गए हैं, और जिस व्यक्ति ने पूरी प्रणाली डिज़ाइन की है वह कहीं नहीं है।

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

साथ ही मुझे खेद है कि अगर इस तरह का सवाल यहां पूछे जाने का नहीं है।


1
मैं अनुसरण नहीं करता। आपके पास db तक पूर्ण पहुंच है और आपको पता है कि इंजीनियर को उलटने के लिए आपके पास 86 स्टोर प्रक्रियाएं हैं। तो ये एन्क्रिप्टेड संग्रहीत कार्यविधियाँ हैं? इंजीनियर को उलटने के लिए आपको क्या चाहिए?
पापराजो

अरे हाँ। आपका सवाल समझ में आता है: डीबी काम कर रहा है, लेकिन यह पूरी तरह गड़बड़ है। खराब अनुक्रमित, गलत डेटा प्रकार, सामान्यीकृत नहीं है, और यह सभी खराब प्रदर्शन के रूप में है ... लेकिन यह काम करता है।
Human_AfterAll

सुनिश्चित करें कि आप भावनात्मक रूप से भी तैयार हैं। गले लगाओ और अपनी चुनौती स्वीकार करो। ऐसा करने में नाकाम रहने से आपकी पूरी यात्रा में मानसिक निराशा होगी।
क्रिस्टियान वेस्टरबेक

ज़रूर! पारितोषिक के लिए धन्यवाद! भावनात्मक तैयारी सबसे अधिक (यदि कोई नहीं) महत्वपूर्ण चरणों में से एक है।
Human_AfterAll

जवाबों:


5

आरंभ करने के लिए तीन बहुत तेज कदम:

1)

USE DatabaseName

SELECT    [TableName] = OBJECT_NAME(object_id),
last_user_update, last_user_seek, last_user_scan, last_user_lookup
FROM    sys.dm_db_index_usage_stats
WHERE    database_id = DB_ID('DatabaseName')

आपको बताएंगे कि पिछली बार प्रत्येक इंडेक्स का उपयोग किया गया था, जिसमें क्लस्टर इंडेक्स भी शामिल था। तो कम से कम आपको एक स्वाद दें जिसके लिए तालिकाओं को एक्सेस किया जा रहा है (और जो नहीं हैं।)

2) यदि आप का उपयोग किया जा रहा है, तो एक घंटे के लिए (यदि आप प्री-एसक्यूएल 2012 चला रहे हैं) विस्तारित इवेंट सत्र (या सर्वर-साइड प्रोफाइलर ट्रेस चालू करें)। आप किसी विशिष्ट क्रम में अनुप्रयोग में विभिन्न कार्यों को करने के लिए एक उपयोगकर्ता से पूछ सकते हैं ताकि आप इसे ट्रेस / सत्र के साथ सहसंबंधित कर सकें।

एक उपयोगी सुझाव: यदि आप ऐप का उपयोग करने वाले कनेक्शन स्ट्रिंग को संशोधित कर सकते हैं, तो संलग्न करें ", अनुप्रयोग नाम = AppNameGoesHere" ताकि आप उस विशेष एप्लिकेशन नाम पर एक ट्रेसिंग फ़िल्टर चला सकें। वैसे भी अच्छा अभ्यास।

3) एक गैर-उत्पादन सर्वर पर काम करने वाले एप्लिकेशन का एक संस्करण प्राप्त करें। एप्लिकेशन के लिए व्यवहार-संचालित परीक्षणों की एक सूची विकसित करें ("जब उपयोगकर्ता नए आइटम बटन पर क्लिक करता है, तो यह उस उपयोगकर्ता के लिए एक नया आइटम बनाता है," आदि) नरम हटाने वाली वस्तुओं को शुरू करें जिन्हें आप महसूस करते हैं कि उनका नाम बदलकर परीक्षणों पर कोई असर नहीं पड़ता है। (मैं एक प्रारूप का उपयोग करता हूं जैसे ऑब्जेक्टName_DEPRECATED_YYYYMMDD - वह तारीख जिस दिन मैं वास्तव में इसे हटाने की योजना बना रहा हूं।) अपने सभी परीक्षणों को पुन: सत्यापित करें।

विस्तारित ईवेंट्स सत्र के संयोजन के माध्यम से, सूचकांक उपयोग DMV, और आपके सॉफ्ट डिलीट, आपको एप्लिकेशन द्वारा उपयोग की जा रही मुख्य वस्तुओं और एक अच्छी आम सहमति की पहचान करने में सक्षम होना चाहिए जिस पर ऑब्जेक्ट क्या करता है।

सौभाग्य!


7

एसक्यूएल पावर डॉक का उपयोग करके अपने डेटाबेस को दस्तावेज़ के लिए शुरू करने के लिए आपकी सबसे अच्छी शर्त है

SQL सर्वर और Windows PowerShell का उपयोग करते हुए विंडोज डॉक्यूमेंटेशन

एसक्यूएल पावर डॉक विंडोज पॉवरशेल स्क्रिप्ट और मॉड्यूल का एक संग्रह है जो एसक्यूएल सर्वर इंस्टेंस और उनके अंतर्निहित विंडोज ओएस और मशीन कॉन्फ़िगरेशन की खोज, दस्तावेज और निदान करता है। SQL Power Doc SQL Server 2000 के सभी संस्करणों के साथ SQL Server 2000 के माध्यम से 2014 तक काम करता है, और Windows Server 2012 और Windows XP से Windows 2000 और Windows XP से विंडोज सर्वर और उपभोक्ता विंडोज ऑपरेटिंग सिस्टम के सभी संस्करणों में भी काम करता है। SQL Power Doc भी सक्षम है Windows Azure SQL डेटाबेस का दस्तावेजीकरण।

नोट: मैंने इसका उपयोग किया है और यह आपको अपने डेटाबेस सर्वर उदाहरण को दस्तावेजीकरण और समझने में वास्तव में अच्छी शुरुआत देगा।


धन्यवाद। यह निश्चित रूप से इस शापित DB को समझने के लिए मेरे द्वारा किए जाने वाले चरणों की श्रृंखला में जोड़ देगा
Human_AfterAll

अरे! मैं वास्तव में PowerShell के साथ बुरा हूं और उस New-Item -type directory -path "$([Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments))\WindowsPowerShell\Modules"चरण को SqlServerInventory ReadMe.txtफ़ाइल में पारित नहीं कर सका । मुझे यह नहीं चाहिए कि मुझे नए बनाए गए फ़ोल्डर में पथ कहां डालना चाहिए और मुझे नए बनाए गए फ़ोल्डर का नाम कहां डालना चाहिए।
Human_AfterAll

3

चूंकि मैं एक बार एक समान स्थिति में था, इसलिए मैं आपको बता सकता हूं कि यह एक कठिन से असंभव काम होगा। मेरे पास केवल सोर्सकोड (> कोड की 100k लाइनें), रनिंग सर्विस, रनिंग डेटाबेस (~ 50 टेबल) और कोई डॉक्यूमेंटेशन नहीं है और इस एप्लिकेशन के उपयोगकर्ता और डेटाबेस और सेवाओं की एक कॉपी को छोड़कर कोई भी इसके बारे में पूछने वाला नहीं है। एक परीक्षण वातावरण (जो कुछ संस्करण संख्याओं से आगे लेकिन बिना सोर्सकोड के था)। एक और आवश्यकता यह थी कि सेवाओं को 24/7 चलाना पड़ता था क्योंकि वे ग्राहकों के लिए बाहरी थीं। स्थिति उत्पन्न हुई क्योंकि अधिकांश कर्मचारी डेवलपर्स और प्रलेखन सहित लगभग एक ही समय में चले गए और अराजकता में गायब हो गए। एक मोटा अवलोकन / प्रलेखन प्राप्त करने में मुझे 6 महीने से अधिक समय लगा। कई सारणियाँ और कार्य थे जिनका कोई प्रभाव नहीं पड़ा क्योंकि वे भविष्य में उपयोग के लिए थे या कभी भी पूरी तरह से कार्यान्वित नहीं किए गए थे, दोषपूर्ण या पदावनत या असंबंधित विशेषताएँ। 6 महीने के बाद मुझे दस्तावेज को फिर से लिखना पड़ा क्योंकि मैंने चीजों के बीच नई चीजों या संबंधों की खोज की थी और मेरी पहले गलत धारणाएं थीं।

मैं यह क्यों बता रहा हूँ? क्योंकि कभी-कभी ऐसी स्थिति में यह खरोंच से शुरू करना आसान होता है और सस्ता होता है और पुराने वाले की आवश्यकताओं को पूरा करते हुए एक नया आवेदन लिखना होता है (या नए लोग यदि वे समय के साथ बदलते हैं या आप एक नई प्रमुख रिलीज़ चाहते हैं)। या आपको यह बताने के लिए कि आपको क्या उम्मीद करनी होगी।

यदि आप वास्तव में इसे रिवर्स करना चाहते हैं, तो मैं निम्नलिखित चरणों की सिफारिश करूंगा:

  • पूरे सिस्टम का बैकअप बना लें! (पहला: आपको कभी पता नहीं चलेगा कि आपको कब इसकी आवश्यकता होगी। दूसरा: आपको अगले चरण के लिए इसकी आवश्यकता है)
  • सिस्टम (सेवाओं और डेटाबेस) की एक प्रति को फिर से बनाने और इसे बनाने के तरीके के बारे में लिखने के लिए क्योंकि आपको निश्चित रूप से अगले महीनों में यह कई बार करना होगा क्योंकि आप इसे उल्टा करते हुए इंजीनियरिंग में कई बार गड़बड़ करेंगे।
  • तालिकाओं के बीच निर्भरता के साथ एक ईआर-आरेख बनाएं
  • प्रत्येक तालिका की निर्भरता को देखें और दस्तावेज करें, संग्रहीत प्रक्रिया, ... क्योंकि ये ज्यादातर ईआर-आरेखों में शामिल नहीं हैं
  • उपयोगकर्ताओं द्वारा पूछकर और स्वयं इसका उपयोग करके सॉफ्टवेयर को क्या करना चाहिए, इसे समझें (परीक्षण प्रणाली पर सबसे अच्छा करें)
  • यदि सेवाओं का सोर्सकोड उपलब्ध है: इसका अवलोकन करें और डीबी को कॉल करें और इसे दस्तावेज़ करें (फ़ंक्शन कॉल पदानुक्रम के साथ किसी न किसी दस्तावेज़ को प्राप्त करने के लिए डॉक्स ऑक्सीजन अच्छा उपकरण है)
  • टैबलेम्स और उनके कॉलम को देखकर DB का मोटा अवलोकन प्राप्त करने का प्रयास करें
  • इसका उपयोग करते समय डेटाबेस देखें
  • पिछले 4 चरणों के साथ तालिकाओं को 3 श्रेणियों में विभाजित करें (आपके आवेदन के आधार पर आपके लिए अलग-अलग हो सकते हैं): स्थैतिक डेटा (सर्वरकॉन्फ़िगरेशन जैसे सर्वर को चलाते समय डेटा नहीं बदलता है, विदेशी तालिकाओं का उपयोग करके अन्य तालिकाओं में मान्य मूल्यों को प्रतिबंधित करने के लिए गणना करता है। , ...), कॉन्फ़िगरेशन डेटा (डेटा जो शायद ही कभी उपयोगकर्ता सेटिंग्स की तरह बदलता है, ...) और ओएलटीपी डेटा (चैट सर्वर में उपयोगकर्ता संदेश, एक मंच में पोस्ट, एक मशीन नियंत्रण प्रणाली में खानों का मूल्य, एक ऑनलाइन गेम में लड़ाई) ...)
  • पिछले 5 चरणों को तब तक दोहराएं जब तक आप संतुष्ट न हों या आप हार मान लें
  • दस्तावेज़ और कोड के रूप में अगर वह आदमी जो आपके कोड / सिस्टम / डेटाबेस को बनाए रखता है, एक हिंसक मनोरोगी होगा जो जानता है कि आप कहाँ रहते हैं।

अच्छे नसीब की शुभकामनाय ;)


1
-1, जो कोई भी यह सोचता है कि खरोंच से शुरू करना और फिर से लिखना सभी के लिए "आसान और सस्ता है " वास्तव में कभी भी ऐसा नहीं हुआ है। यह शौकिया सलाह है।
ब्लूराजा - डैनी पफ्लुगुएफ्ट

@ BlueRaja-DannyPflughoeft यह आवेदन के प्रकार, आकार और स्थिति और पीछे की संगतता के लिए आवश्यकता पर निर्भर करता है। मैंने लगभग 100k एलओसी के साथ स्क्रैच से एक एप्लिकेशन को फिर से लिखा है। मूल की नकल करने की कोई आवश्यकता नहीं थी लेकिन इसे कुछ नए कार्यों के साथ एक नए प्रमुख संस्करण के रूप में जारी किया गया था, कुछ पुराने कार्यों को हटा दिया गया था, एक आधुनिक उपयोगकर्ता इंटरफ़ेस और पुराने डेटा का उपयोग करने की क्षमता थी। मूल कोड एक ऐसी गड़बड़ी और सुरक्षा आपदा थी जिससे हम पुराने कोड को साफ करने के लिए अनुमानित समय से अधिक तेज थे।
एच। आइडेन

खासकर अगर कोड में कई अनजाने वर्कअराउंड होते हैं, तो अक्सर ऐसा होता है, कि थोड़ा सा बदलाव किसी चीज को पूरी तरह से असंबंधित क्रैश कर देता है। लेकिन मैं आपके साथ सहमत हूं, कि कई लोग इसे करने से लागत (श्रमशक्ति, पैसा, ..) को कम आंकते हैं क्योंकि वे आवेदन की पूरी आवश्यकताओं को नहीं जानते हैं या कम करके आंकते हैं, खासकर जब यह बड़े हो गए हैं और वर्षों में बदल गए हैं।
एच। आइडेन

2

मेरे पास एक टिप्पणी पोस्ट करने के लिए पर्याप्त प्रतिनिधि नहीं है, लेकिन आपके प्रश्न के बारे में मदद करना चाहता हूं

getting the SQL Power Doc to work

यदि आप उनके प्रलेखन पृष्ठ पर दिए गए चरणों का पालन करते हैं तो यह बहुत आसानी से काम करेगा। बस ऊपर से शुरू करो।

https://sqlpowerdoc.codeplex.com/wikipage?title=Guide%20For%20PowerShell%20Beginners

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