我有一个混乱的遗留数据库。我需要研究一个使用多个源同步/更新的特定表...我需要知道表的更新时间和方式。
如何检索用于更新/同步此表的所有来源? (我猜这主要是通过使用SP的不同工作完成的。)
有没有办法在所有SP中搜索'%table name%'? (这是我能想到的唯一方式,还有其他合理的方法吗?)
然后,我只需要检查哪些作业正在运行那些SP,我可以得到更好的图片......
答案 0 :(得分:2)
这将生成引用对象'UserInfo'的所有过程的列表:
> select object_name(object_id) from sys.sql_modules where
> charindex('userinfo',definition)>0
这不会搜索通常位于文件系统或MSDB数据库中的SSIS或BCP包。很多时候,有些作业会调用更新数据的BCP和/或SSIS包。
仅检查您可以使用的程序:
> select object_name(sm.object_id) from sys.sql_modules sm inner join
> sys.objects so on sm.object_id=so.object_id where
> charindex('userinfo',definition)>0 and type='P'
答案 1 :(得分:1)
您也可以尝试这种方法(寻找is_updated
为1
的方法),但我会将其与其他方法结合使用,因为我没有发现这是100%可靠的。
DECLARE @TwoPartName nvarchar(500) = '[dbo].[YourTable]';
SELECT referencing_schema_name,
referencing_entity_name,
MAX(0 + is_selected) is_selected,
MAX(0 + is_updated) is_updated
FROM sys.dm_sql_referencing_entities (@TwoPartName, 'OBJECT')
CROSS APPLY sys.dm_sql_referenced_entities (QUOTENAME(referencing_schema_name) + '.'
+ QUOTENAME(referencing_entity_name), 'OBJECT') CA2
WHERE CA2.referenced_id = OBJECT_ID(@TwoPartName)
GROUP BY referencing_schema_name,
referencing_entity_name;
答案 2 :(得分:0)