当前位置:  开发笔记 > 数据库 > 正文

存储过程逆向工程

如何解决《存储过程逆向工程》经验,为你挑选了1个好方法。

我们在工作中遇到大量遗留存储过程的问题.你们推荐任何可以帮助你更好地理解这些程序的工具吗?某种逆向工程,它识别过程间依赖性和/或过程与表依赖性.可以是免费或商业工具.

谢谢!



1> ConcernedOfT..:

比"依赖性跟踪器"更便宜的解决方案是数据字典表sys.sql_dependencies,可以从数据字典中查询该数据.Oracle有一个具有类似功能的数据字典视图,名为DBA_DEPENDENCIES(加上等效的USER_和ALL_视图).使用其他数据字典表(sys.tables/DBA_TABLES)等,您可以生成对象依赖性报告.

如果您感觉特别敏锐,可以使用递归查询(Oracle CONNECT BY或SQL Server公用表表达式)来构建完整的对象依赖关系图.

这是sys.sql_dependencies上的递归CTE的示例.它将返回每个依赖项的条目及其深度.对于每个依赖关系,项目可以出现不止一次,可能在不同的深度.我没有可用于在DBA_DEPENDENCIES上构建CONNECT BY查询的Oracle实例,因此欢迎具有编辑权限,时间和专业知识的任何人注释或编辑此答案.

另请注意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实例的人可以在这里发布CONNECT BY递归查询吗?请注意,这是特定于SQL服务器的,问题所有者已经明确表示他正在使用Oracle.我没有运行的Oracle实例来开发和测试任何东西.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有