سؤال

نحن لدينا مشكلة مع عدد كبير من تراث الإجراءات المخزنة في العمل.هل الرجال أنصح أي أداة يمكن أن تساعد على فهم أفضل هذه الإجراءات ؟ نوع من الهندسة العكسية التي indentifies بين الإجراء تبعيات و/أو إجراء مقابلالجداول التبعيات.يمكن أن تكون مجانية أو تجارية أداة.

وذلك بفضل!

هل كانت مفيدة؟

المحلول

Redgate بدلا من تكلفة المنتج يسمى SQL التبعية تعقب ويبدو أن تفي بالمتطلبات.

نصائح أخرى

أرخص حل من "التبعية " تعقب' هو قاموس البيانات الجدول sys.sql_dependencies التي من خلالها هذه البيانات يمكن الاستعلام من قاموس البيانات.أوراكل لديه قاموس البيانات مع وظائف مماثلة تسمى DBA_DEPENDENCIES (بالإضافة إلى ما يعادل USER_ و ALL_ وجهات النظر) .باستخدام بيانات أخرى القاموس الجداول (sys.الجداول/DBA_TABLES) الخ.يمكنك إنشاء كائن الاعتماد على التقارير.

إذا كنت تشعر بشكل خاص حرص يمكنك استخدام استعلام عودي (ربط Oracle أو SQL Server المشترك التعبير الجدول) لبناء كاملة كائن الرسم البياني التبعية.

هنا مثال من العودية CTE على sys.sql_dependencies.فإنه سيعود إدخال كل تبعية مع العمق.البنود يمكن أن تحدث أكثر من مرة ربما في أعماق مختلفة ، كل علاقة تبعية.لا يكون العامل أوراكل سبيل المثال إلى اليد لبناء الاتصال عن طريق الاستعلام على DBA_DEPENDENCIES مع اي شخص حتى تحرير الامتيازات الوقت والخبرة مرحبا بكم في الحواشي أو تحرير هذا الجواب.

نلاحظ أيضا مع sys.sql_dependencies يمكنك الحصول على مراجع عمود من referenced_minor_id.هذا يمكن استخدامها (على سبيل المثال) لتحديد الأعمدة التي استخدمت فعلا في ETL sprocs من منطقة التدريج مع نسخ من DB الجداول من مصدر مع أكثر من الأعمدة مما تستخدم في الواقع.

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

لقد حصلت على هذا الانفتاح على المجتمع الآن.يمكن لشخص ما مع سهولة الوصول إلى تشغيل Oracle سبيل المثال وظيفة الاتصال عن طريق العودية الاستعلام هنا ؟ لاحظ أن هذا هو SQL server معينة والسؤال مالك منذ أوضحت أنه باستخدام أوراكل.أنا لم يكن لديك تشغيل Oracle سبيل المثال إلى يد لتطوير واختبار أي شيء.

أعتقد البوابة الحمراء التبعية تعقب ذكر rpetrich هو حل لائق, أنه يعمل بشكل جيد و البوابة الحمراء 30 يوما للمحاكمة (مثالي طويلة بما فيه الكفاية بالنسبة لك لا تفعل الطب الشرعي).

وأود أن تنظر أيضا في عزل نظام تشغيل منشئ ملفات التعريف SQL التي سوف تظهر لك كل SQL العمل على الجداول.هذا هو في كثير من الأحيان نقطة انطلاق جيدة لبناء تسلسل الرسم أو ومع ذلك اخترت أن الوثيقة هذه الرموز.حظا سعيدا!

Redgate SQL Doc.ولدت وشملت الوثائق المشار إليها عبر الاعتماد على المعلومات.على سبيل المثال, كل جدول ، وهو يسرد طرق العرض والإجراءات المخزنة والمشغلات وغيرها أن مرجع هذا الجدول.

ماذا قاعدة البيانات هي الإجراءات المخزنة ؟ Oracle, SQL Server, شيء آخر ؟

تحرير استنادا إلى تعليق: نظرا كنت تستخدم Oracle ثم إلقاء نظرة على الضفدع.يمكنني استخدام ميزة في هذا يسمى قانون "خارطة الطريق" ، التي تتيح لك عرض بيانيا PL/SQL interdependancies داخل قاعدة البيانات.فإنه يمكن تشغيل في كود وضع فقط تظهر وقت التشغيل الاستدعاءات dependancies أو رمز بالإضافة إلى وضع البيانات ، حيث يظهر لك أيضا كائنات قاعدة البيانات (الجداول, وجهات النظر, مشغلات) التي لمست من خلال التعليمات البرمجية الخاصة بك.

(ملاحظة أنا الضفدع المستخدم و تستفيد من إحالته)

هذا ليس حقيقي عميق أو شامل ، ولكن أعتقد أنه إذا كنت تستخدم MS SQL Server أو Oracle (ربما نايجل يمكن أن تساعد مع PL-SQL عينة)...نايجل هو على شيء .وهذا ينطبق فقط 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

كيفية العثور على اعتماد سلسلة من كائن قاعدة بيانات (MS SQL Server 2000(?)+) بواسطة يعقوب سيباستيان

في كل مرة كان يحتاج إلى نشر تقرير جديد أو تعديل القائم التقرير قال إنه يحتاج إلى معرفة ما هي كائنات قاعدة البيانات التي تعتمد على نظرا تقرير الإجراء المخزن.في بعض الأحيان التقارير جدا معقدة و كل الإجراء المخزن قد يكون عشرات من يعتمد كائنات تعتمد كل كائن قد يكون اعتمادا على العشرات من الكائنات.

احتاج طريقة متكرر تجد كل اعتمادا الكائنات من بالنظر إلى الإجراء المخزن.كتبت العودية الاستعلام باستخدام CTE لتحقيق هذا.

واحد أفضل أداة الهندسة العكسية هي قمة.مذهلة.حتى أنها يمكن أن تتبع في .صافي الجمعيات أقول لكم أين procs تستخدم.من خلال بكثير أعمق المنتج من نوعه.RedGate كبيرة أدوات أخرى ولكن ليس في هذه الحالة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top