我继承了一个sql server,用于生成报告,文本文件输出和固定宽度文件以供使用和导入其他系统。
开发人员(X)没有记录或评论一点代码。 X还使用了存储过程,视图,SSIS,SQLCMD以及它们之间的每个组合。 X还在整个环境中创建了多个数据库以保存这些视图,SP等。因此,我们遇到SP打开视图的情况,该视图打开另一个视图,该视图在其末尾调用SQLCMD。很多使用RTRIM,REPLACE,STR,CONVERT ......我确定你能得到图片......(那就是背景)。
我希望能够获得关于接近,纠正和记录此环境的最佳方式的想法,以便能够支持它。
我已经开始关注查询跟踪,将查询复制到一个文本文件中并使用格式化在Notepad ++中进行评论...然后尝试合并查询以使其高效并记录。
是否有更少的时间选择? 我确定很多DBA都经历过这个,推荐的方法是什么?
PS。道歉为长篇
答案 0 :(得分:2)
PS。道歉为长篇
Fugetaboutit,我们对你的困境的同情严重减轻了长篇文章的任何刺激(并且它不会那么久)。
可能有一些工具可以帮助您在某种程度上自动化流程。绝对从一些ER图开始,以帮助您可视化您拥有的。
但是,您对系统的描述特别关注。听起来开发人员X也可能已经对系统进行了建模,并且在设计代码时也做了令人印象深刻的工作。当你提到"大量使用RTRIM,REPLACE,STR,CONVERT ......时,我的印象就是这样。和时髦的意见。听起来像是由开发人员设计的系统。
我建议你只记录系统,直到你知道发生了什么(或者应该发生什么)。然后启动数据库重构过程以使系统处于正常状态。这将是一个耗时的操作(并且有些昂贵),但如果这是一个重要的系统,那么它将是非常值得的。试着说服管理层,时间和费用将是前期的,并且从长远来看最终会节省时间和金钱。祝你好运。对于这类事情,管理层可能是出了名的短视。
答案 1 :(得分: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或仅对注释中的表的引用*),但它可以为您节省大量时间,特别是如果你从表开始“挖出”,寻找引用该表的所有视图,过程等...然后引用它们的所有对象......等等。
(*是的,目前的代码没有评论,但您的修订版本会有,请记住这一点。)
答案 2 :(得分:0)
必须重写许多未记录的遗留应用程序,我必须创建类似于您所描述的文档。我通常将应用程序文档分解为类别。
1)记录数据库表和表之间的关系(ER图)
2)记录SQL查询
3)记录存储过程和触发器
4)记录应用程序代码
5)记录UI - 显示主要组件的屏幕截图
6)使用UML绘图工具记录主要用例
7)记录硬件环境,数据库实用程序,用户帐户,操作系统