web-dev-qa-db-ja.com

デフォルトのトレースは有効ですがアクティブではありません

デフォルトのトレースの構成を照会すると、有効と表示されます。

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;

有効なトレースが存在しない理由は何ですか?

9
Andomar

スペース不足イベントと欠落したトレースの間には強い相関関係があると思います。 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サービスを再起動する必要はありませんが、sys.tracesに行が表示されない場合は、SQL Serverのパンツで最後のキックになる可能性があります。取得するtrace_idが1のままであるとは限りません。

13
Aaron Bertrand

ドライブがいっぱいになった後、同じ問題が発生しました。デフォルトのトレースは有効になっていますが、実行されていません。それを無効にして再度有効にすると、サービスを停止せずにすぐに機能しました。

1
jclabonde