我们无法告诉您这些表是如何创建的。您需要检查任何第 3 方或您正在运行的其他应用程序的代码,或者询问您的开发人员/DBA 同事是否出于某种原因创建了这些特定对象。tempdb
除非您告诉它,否则SQL Server 不会自动在其中创建用户表。
如果这些表是最近创建的,您可能能够在默认跟踪中找到谁创建了这些表:
DECLARE @path NVARCHAR(260);
SELECT
@path = REVERSE(SUBSTRING(REVERSE([path]),
CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT ObjectName, HostName, ApplicationName, LoginName, StartTime
FROM sys.fn_trace_gettable(@path, DEFAULT) AS t
WHERE DatabaseName = N'tempdb'
AND ObjectName LIKE N't102523[_]%'
AND EventClass = 46 AND EventSubClass = 0
--AND EXISTS (SELECT 1 FROM tempdb.sys.tables WHERE name = t.ObjectName)
ORDER BY StartTime DESC;
没运气?尝试直接阅读日志。
还是没有运气?您可能想要检查model
数据库中是否存在任何用户表,并追查那些罪魁祸首,因为您在其中创建的任何内容都model
将tempdb
在随后的重新启动时结束。
如果找不到原因,可以运行服务器端跟踪(不在 Profiler 中主动运行跟踪),捕获object:created
并过滤到 tempdb 和where name not like '#%';
. 您还可以考虑扩展事件、DDL 触发器、审核等。