记录数据库

4
我继承了一个用于生成报告、文本文件输出和固定宽度文件以供其他系统使用和导入的 sql server。开发人员(X)没有记录或注释任何代码,同时使用了存储过程、视图、SSIS、SQLCMD 以及各种组合。此外,X 还在整个环境中创建了多个数据库来保存这些视图、存储过程等等。因此,我们有时会遇到这样的情况:一个存储过程打开一个视图,该视图又打开另一个视图,在最后调用 SQLCMD。还大量使用 RTRIM、REPLACE、STR、CONVERT 等函数...相信你已经了解了这个背景。
我想知道如何最好地处理、纠正和记录这个环境,以便进行支持。我已经开始跟踪查询路径,将查询复制到一个文本文件中,并在 Notepad++ 中进行格式化注释...然后尝试合并查询以提高效率并进行记录。
是否有更少耗时的选项?我相信许多 DBA 都经历过这种情况,推荐采用什么方法?
PS. 对于这篇长文我表示歉意。

3
如果您想自动创建数据库对象的文档,可以尝试使用RED GATE工具。如果这只是一次性的任务,可以使用试用版。我有时会生成几份漂亮的专业文档。祝您好运! - Erran Morad
3个回答

3

PS. 对于篇幅较长的文章,我们为您的处境感到同情,这丝毫不会使我们对此感到烦躁(而且它并不那么长)。

可能有一些工具可以帮助您在一定程度上自动化该过程。绝对要从一些ER图开始,以帮助您可视化您拥有的内容。

然而,在您所描述的系统中,特别令人担忧的是开发人员X似乎也对系统进行了建模,并且设计代码的工作也同样出色。当您提到“频繁使用RTRIM、REPLACE、STR、CONVERT...”和新奇的视图时,我的印象就是这是由一位开发人员设计的系统。

我建议您只记录系统到您已经大致了解正在发生的事情(或应该发生的事情)的程度,然后开始数据库重构过程,使系统处于良好状态。这将是一个耗时的操作(并且有点昂贵),但如果这是一个重要的系统,则完全值得这样做。试着说服管理层,表示时间和费用将前置,最终将节省时间和金钱。祝你好运。管理层在这方面通常会非常短视。


2

虽然不是直接的答案,但以下内容应该能帮到你:

DECLARE @SearchText varchar(100)
SET @SearchText = 'myTable'

SELECT
   schema_name(ob.schema_id)  SchemaName
  ,ob.name
  ,ob.type_desc
  ,len(mo.definition) CodeLength
  --,mo.definition
 from sys.sql_modules mo
  inner join .sys.objects ob
   on ob.object_id = mo.object_id
 where mo.definition like '%' + @SearchText + '%'
 order by
   case schema_name(ob.schema_id)
     when 'dbo' then 'A'
     else 'B' + str(ob.schema_id, 10)
   end
  ,ob.type_desc
  ,ob.name

这将生成一个包含 @SearchText 文本的所有“基于代码的对象”(过程、视图、触发器,但不包括同义词或约束)列表,这些对象位于当前数据库中。您仍然需要进入对象以找出它是如何使用的(例如,针对表的 SELECT 或者只是在注释中引用表),但这可能会节省您很多时间,特别是如果您从表开始并“挖掘”,查找所有引用该表的视图、过程等,然后所有引用它们的对象......以此类推。
(*是的,当前代码没有注释,但您的修改将有,所以请记住这一点。)

0

由于需要重写许多没有文档的遗留应用程序,我不得不创建类似于您所描述的文档。我通常将应用程序文档分成以下几个类别:

1)记录数据库表和表之间的关系(ER图)

2)记录SQL查询

3)记录存储过程和触发器

4)记录应用程序代码

5)记录UI-显示主要组件的屏幕截图

6)使用UML绘图工具记录主要用例

7)记录硬件环境、数据库实用程序、用户帐户、操作系统等信息

http://www.yazooconsulting.com/products.html


这个链接如何帮助OP减少记录他们的数据库所需的时间?这似乎只是设计和报告工具的广告。 - DeanOC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接