Трассировка по умолчанию включена, но не активна

9

Когда я запрашиваю конфигурацию трассировки по умолчанию, она показывает:

exec sp_configure 'default trace enabled';
-->
name                    minimum  maximum  config_value  run_value
default trace enabled         0        1             1          1

Но когда я запрашиваю sys.tracesпуть, он возвращает пустой набор строк:

select * from sys.traces;

Чем можно объяснить отсутствие включенной трассировки?

Andomar
источник
@AaronBertrand: select * from sys.tracesвозвращает пустой набор строк
Andomar
Также я слышал о случаях, когда трассировка умирает из-за того, что диск, на который она записывалась, заполняется (и это не обязательно повлияет на SQL Server, если только не заметным / исправимым образом)
Аарон Бертран
@AaronBertrand: администратор говорит, что диск заполнился несколько дней назад. Будет ли перезапуск службы SQL Server также перезапустить трассировку по умолчанию?
Andomar
Остановленная трассировка была моей первой, но тоже EXEC sp_trace_setstatus @traceid = 1, @status = 0возвращает ее, The default trace cannot be stopped or modified.поэтому я не уверен, что ее можно остановить, если не будет ошибки, которая мешает его запуску. Что-нибудь в журналах ошибок?
Мартин Смит
@ Мартин верно, вы не можете остановить трассировку по умолчанию вручную.
Аарон Бертран

Ответы:

13

Я бы сказал, что между вашим событием вне космоса и отсутствующим следом существует сильная корреляция. Обратите внимание, что sp_configureопция просто говорит вам, что трассировка по умолчанию включена, но это не значит, что она запущена или что она вообще существует. Обратите внимание, что sys.tracesэто не таблица, а представление:

create view sys.traces as select * from OpenRowset(TABLE SYSTRACES)

Что TABLE SYSTRACESобеспечивает набор строк? Как это работает? Как фильтруются его результаты? Твоя догадка так же хороша как и моя. Возможно, что трасса все еще там, но в состоянии, которое препятствует тому, чтобы это было выставлено этим представлением. И он может находиться в состоянии, которое все еще не позволяет запустить его даже после перезапуска службы.

Во-первых, убедитесь, что в расположении трассы по умолчанию достаточно места, учетная запись службы SQL Server по-прежнему имеет достаточные разрешения для записи в нее, на вас не распространяются никакие квоты пространства и т. Д. Расположение можно получить из реестра:

HKEY_LOCAL_MACHINE\Software\Microsoft\...YourInstance...\Setup\SQLDataRoot\

Если вы уверены, что SQL Server должен иметь возможность записи в эту папку, вы можете отключить и снова включить трассировку по умолчанию:

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_configure 'default trace enabled', 0;
GO
RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_configure 'default trace enabled', 1;
GO
RECONFIGURE WITH OVERRIDE;

Вам не нужно перезапускать службу SQL Server на этом этапе, но это может быть последним ударом по штанам SQL Server, если вы все еще не видите строку в sys.traces. Обратите внимание, что trace_idвы не гарантированно останетесь на 1.

Аарон Бертран
источник
Спасибо, отключение и повторное включение работали. Я не использовал with override. Журналы ошибок действительно показывали событие нехватки места.
Andomar
1
@ Andomar извините, with overrideэто привычка.
Аарон Бертран
1

У меня была та же проблема после того, как двигатель заполнен. Трассировка по умолчанию была включена, но не запущена. Отключение и повторное включение работало сразу, без остановки служб.

jclabonde
источник