Мы не можем сказать вам, как эти таблицы были созданы. Вам нужно будет проверить код любых сторонних или других приложений, которые вы используете, или попросите своих коллег-разработчиков/администраторов баз данных, если они создали эти конкретные объекты по какой-либо причине. SQL Server не просто автоматически создает пользовательские таблицы в tempdb
, если вы не сообщите об этом.
Вы можете быть в состоянии найти, кто создал эти таблицы в трассировке по умолчанию, если они были созданы достаточно недавно:
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;
Нет удачи? Try reading the log directly.
По-прежнему не везет? Вы можете проверить, существуют ли какие-либо таблицы пользователей в базе данных model
, и преследовать этих виновников, потому что все, что вы создаете в model
, также будет включено в tempdb
, а также при последующих перезапусках.
Если вы не можете найти причину, вы могли бы run a server-side trace (не активно работать след в Profiler), захватив object:created
и фильтрацию TempDb и where name not like '#%';
. Вы могли бы также рассмотреть вопрос о Extended Events, DDL триггеры, аудит и т.д.
Как это не часто, это происходит раз в месяц. Могу ли я использовать аудит для этого на tempdb. Будет ли аудит решить мою проблему. –
@Nitesh да, я думаю, вы могли бы использовать аудит для этого, но трассировка на стороне сервера (если она легка!) Или расширенные события, возможно, кажутся намного более простыми способами захвата этой активности. –
Также можно отбросить эти таблицы? Будет ли это влиять на производительность или запуск баз данных? –