2008-09-16 27 views
12

हमें काम पर विरासत संग्रहित प्रक्रियाओं की एक बड़ी संख्या में समस्या हो रही है। क्या आप लोग किसी भी उपकरण की सिफारिश करते हैं जो उन प्रक्रियाओं को बेहतर ढंग से समझने में मदद कर सकता है? कुछ प्रकार की रिवर्स इंजीनियरिंग जो इंटर-प्रोसेस निर्भरता और/या प्रक्रिया बनाम टेबल निर्भरताओं को इंडेंट करती है। एक मुफ्त या वाणिज्यिक उपकरण हो सकता है।संग्रहीत प्रक्रियाओं रिवर्स इंजीनियरिंग

धन्यवाद!

उत्तर

4

रेडगेट के पास SQL Dependency Tracker नामक एक महंगा उत्पाद है जो आवश्यकताओं को पूरा करने लगता है।

3

मुझे लगता है कि Red Gate Dependency Tracker mentioned by rpetrich एक सभ्य समाधान है, यह अच्छी तरह से काम करता है और रेड गेट में 30 दिन का परीक्षण होता है (आदर्श रूप से आप लंबे समय तक अपने फोरेंसिक करते हैं)।

मैं सिस्टम को अलग करने और SQL प्रोफाइलर चलाने पर भी विचार करता हूं जो आपको तालिकाओं पर सभी SQL क्रिया दिखाएगा। अनुक्रम आरेख बनाने के लिए यह अक्सर अच्छा प्रारंभिक बिंदु होता है या फिर आप इन कोडों को दस्तावेज करना चुनते हैं। सौभाग्य!

1

रेडगेट एसक्यूएल डॉक। जेनरेट किए गए दस्तावेज़ में क्रॉस-रेफरेंसिंग निर्भरता जानकारी शामिल थी। उदाहरण के लिए, प्रत्येक तालिका के लिए, यह उस तालिका को संदर्भित करने वाले दृश्य, संग्रहीत प्रक्रियाओं, ट्रिगर आदि सूचीबद्ध करता है।

1

संग्रहित प्रक्रियाओं में कौन से डेटाबेस हैं? ओरेकल, एसक्यूएल सर्वर, कुछ और?

टिप्पणी के आधार पर संपादित करें: यह देखते हुए कि आप ओरेकल का उपयोग कर रहे हैं, तो TOAD पर एक नज़र डालें। मैं कोड रोडमैप नामक एक सुविधा का उपयोग करता हूं, जो आपको ग्राफिकल रूप से डेटाबेस के भीतर पीएल/एसक्यूएल परस्पर निर्भरता प्रदर्शित करने की अनुमति देता है। यह कोड केवल मोड में चलाया जा सकता है, रनटाइम कॉल स्टैक निर्भरता, या कोड प्लस डेटा मोड दिखा रहा है, जहां यह आपको आपके ऑब्जेक्ट द्वारा स्पर्श किए गए डेटाबेस ऑब्जेक्ट्स (टेबल, दृश्य, ट्रिगर्स) भी दिखाता है।

(नोट - मैं एक मेंढक उपयोगकर्ता हूँ, और यह जिक्र से कोई लाभ प्राप्त करता है)

6

से 'निर्भरता ट्रैकर' सस्ता समाधान डेटा शब्दकोश तालिका sys.sql_dependencies जो है जहाँ से इस डेटा हो सकता है डेटा शब्दकोश से पूछताछ की। ओरेकल में डेटा कार्यक्षमता दृश्य है जिसमें समान कार्यक्षमता है जिसे DBA_DEPENDENCIES (प्लस समतुल्य USER_ और ALL_ दृश्य) कहा जाता है। अन्य डेटा डिक्शनरी टेबल (sys.tables/DBA_TABLES) आदि का उपयोग करके आप ऑब्जेक्ट निर्भरता रिपोर्ट जेनरेट कर सकते हैं।

आप विशेष रूप से उत्सुक आप एक पूरा वस्तु निर्भरता ग्राफ बनाने के लिए एक पुनरावर्ती पूछताछ (Oracle बंधन द्वारा या SQL सर्वर आम टेबल भाव) का उपयोग कर सकते महसूस कर रहे हैं।

sys.sql_dependencies पर एक पुनरावर्ती सीटीई का एक उदाहरण यहां दिया गया है। यह हर निर्भरता के लिए अपनी गहराई के साथ एक प्रविष्टि वापस कर देगा। प्रत्येक निर्भरता संबंध के लिए आइटम एक से अधिक बार संभवतः विभिन्न गहराई पर हो सकते हैं। मेरे पास DBA_DEPENDENCIES पर क्वेरी द्वारा कनेक्ट करने के लिए काम करने के लिए एक ओरेकल उदाहरण नहीं है, इसलिए संपादन विशेषाधिकार वाले किसी भी व्यक्ति और समय और विशेषज्ञता का जवाब इस उत्तर को एनोटेट या संपादित करने के लिए किया जाता है।

sys.sql_dependencies के साथ भी नोट करें कि आप referenced_minor_id से कॉलम संदर्भ प्राप्त कर सकते हैं। इसका उपयोग यह निर्धारित करने के लिए किया जा सकता है (उदाहरण के लिए) यह निर्धारित करने के लिए कि वास्तव में उपयोग किए जाने वाले कॉलम के साथ स्रोत से डीबी टेबल की प्रतियों के साथ एक स्टेजिंग क्षेत्र से ईटीएल स्पॉक्स में कौन से कॉलम वास्तव में उपयोग किए जाते थे।

with dep_cte as (
select o2.object_id as parent_id 
     ,o2.name  as parent_name 
     ,o1.object_id as child_id 
     ,o1.name  as child_name 
     ,d.referenced_minor_id 
     ,1 as hierarchy_level 
    from sys.sql_dependencies d 
    join sys.objects o1 
    on o1.object_id = d.referenced_major_id 
    join sys.objects o2 
    on o2.object_id = d.object_id 
where d.referenced_minor_id in (0,1) 
    and not exists 
     (select 1 
      from sys.sql_dependencies d2 
     where d2.referenced_major_id = d.object_id) 

union all 

select o2.object_id as parent_id 
     ,o2.name  as parent_name 
     ,o1.object_id as child_id 
     ,o1.name  as child_name 
     ,d.referenced_minor_id 
     ,d2.hierarchy_level + 1 as hierarchy_level 
    from sys.sql_dependencies d 
    join sys.objects o1 
    on o1.object_id = d.referenced_major_id 
    join sys.objects o2 
    on o2.object_id = d.object_id 
    join dep_cte d2 
    on d.object_id = d2.child_id 
where d.referenced_minor_id in (0,1) 
) 

select * 
    from dep_cte 
order by hierarchy_level 

मुझे यह समुदाय के लिए खोलने के लिए मिला है।क्या कोई चल रहा ओरेकल उदाहरण के लिए सुविधाजनक पहुंच वाले व्यक्ति को यहां रिकर्सिव क्वेरी द्वारा कनेक्ट किया जा सकता है? ध्यान दें कि यह SQL-server विशिष्ट है और प्रश्न मालिक ने तब से यह स्पष्ट कर दिया है कि वह ओरेकल का उपयोग कर रहा है। मेरे पास कुछ भी विकसित करने और परीक्षण करने के लिए हाथ में चलने वाले ओरेकल उदाहरण नहीं हैं।

+0

इसके बारे में नहीं पता था। लेकिन मुझे लगता है कि यह बहुत उपयोगकर्ता के अनुकूल नहीं है। हालांकि मैं एक नज़र डालेगा। –

+0

कनेक्ट इस कोड को निश्चित रूप से सरल बना देगा। –

1

यह वास्तविक गहरा या गहरा नहीं है, लेकिन मुझे लगता है कि यदि आप एमएस एसक्यूएल सर्वर या ओरेकल (शायद निगेल पीएल-एसक्यूएल नमूना के साथ मदद कर सकते हैं) का उपयोग कर रहे हैं ... निगेल कुछ पर है। यह केवल 3 निर्भरताओं को गहराई से चलाता है, लेकिन आपको गहरी जाने के लिए संशोधित किया जा सकता है। यह सबसे सुंदर बात नहीं है ... लेकिन यह कार्यात्मक है ...

select 
    so.name + case when so.xtype='P' then ' (Stored Proc)' when so.xtype='U' then ' (Table)' when so.xtype='V' then ' (View)' else ' (Unknown)' end as EntityName, 
    so2.name + case when so2.xtype='P' then ' (Stored Proc)' when so2.xtype='U' then ' (Table)' when so2.xtype='V' then ' (View)' else ' (Unknown)' end as FirstDependancy, 
    so3.name + case when so3.xtype='P' then ' (Stored Proc)' when so3.xtype='U' then ' (Table)' when so3.xtype='V' then ' (View)' else ' (Unknown)' end as SecondDependancy, 
    so4.name + case when so4.xtype='P' then ' (Stored Proc)' when so4.xtype='U' then ' (Table)' when so4.xtype='V' then ' (View)' else ' (Unknown)' end as ThirdDependancy 
from 
    sysdepends sd 
    inner join sysobjects as so on sd.id=so.id 
    left join sysobjects as so2 on sd.depid=so2.id 
    left join sysdepends as sd2 on so2.id=sd2.id and so2.xtype not in ('S','PK','D') 
    left join sysobjects as so3 on sd2.depid=so3.id and so3.xtype not in ('S','PK','D') 
    left join sysdepends as sd3 on so3.id=sd3.id and so3.xtype not in ('S','PK','D') 
    left join sysobjects as so4 on sd3.depid=so4.id and so4.xtype not in ('S','PK','D') 
where so.xtype = 'P' and left(so.name,2)<>'dt' 
group by so.name, so2.name, so3.name, so4.name, so.xtype, so2.xtype, so3.xtype, so4.xtype 
0

रिवर्स इंजीनियरिंग के लिए एक सबसे अच्छा उपकरण शीर्ष कर रहा है। यह आश्चर्यजनक है। यह .NET असेंबली में भी पता लगा सकता है और आपको बता सकता है कि procs का उपयोग कहाँ किया जाता है। इसकी तरह से इसके गहन उत्पाद तक। रेडगेट के पास अन्य कई उपकरण हैं लेकिन इस मामले में नहीं।

+1

कौन सा एक? http://www.apexsql.com/purchase.asp –

1

How to find the dependency chain of a database object (एमएस एसक्यूएल सर्वर 2000 (?) +) याकूब सेबस्टियन

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

उन्हें संग्रहीत प्रक्रिया के की सभी निर्भर वस्तुओं को रिकर्सिव रूप से खोजने का एक तरीका चाहिए। मैंने प्राप्त करने के लिए सीटीई का उपयोग करके एक पुनरावर्ती क्वेरी लिखी।

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