如何找到填充 table 的内容?

How Do I find what is populating a table?

我经常运行陷入这个问题。我在数据仓库中工作,但我无法找出填充 table 的内容。通常,每天从仓库中的其他 table 或 Oracle 数据库填充 table。我已经尝试了以下查询并可以确认更新,但我看不到它在做什么。我搜索了已知的 SSIS 包和具有相似名称和 SQL 作业的存储过程,但我什么也找不到。

select object_name(object_id) as DatabaseName, last_user_update, *
from sys.dm_db_index_usage_stats
where database_id = DB_ID('Warehouse')
and object_id=object_id('PAYMENTS_DAILY')

我只有最基本的 SQL 服务器工具可用,所以没有花哨的搜索工具:(

在数据被插入数据后,如果没有某种日志记录,就无法判断数据来自何处。

SSIS 有日志记录,您可以在表上使用触发器、更改数据捕获、审计列等,有很多方法可以做到这一点。

通常,如果您知道添加该行的时间,这可以帮助您确定是哪个进程在添加它。将新的 "InsertedDatetime" 列添加到您的仓库 table 并为其指定默认值 getdate()。如果您知道行总是在 11:15 AM 进入,您可以使用它来缩小搜索范围。

这可能是足够的信息,但如果这不能帮助您追踪过程,那么您可以添加额外的列,其中包含从源 IP 地址到调用对象名称的所有内容。

作为最后的手段,您可以重命名 table 并创建一个名称相同的视图,然后在其上使用一个 Instead Of Insert 触发器来保持打开的连接,以便您可以检查当前正在执行的进程弄清楚它是从哪里来的。

我敢打赌,你可以从单独的时间中得出结论。