Criei um evento estendido para registrar todos os logins bem-sucedidos em meu servidor prod. Como você pode imaginar, há centenas deles chegando em um segundo, então só preciso filtrar alguns deles de acordo com se é uma conexão em cache ou não. Não consegui criar um filtro no atributo is_cached do evento de login. Já filtrei pelo atributo [sqlserver].[client_app_name]. Quando assisto ao Live Data, posso filtrar o atributo is_cached btw.
Segue o roteiro do evento:
CREATE EVENT SESSION deneme ON SERVER
ADD EVENT sqlserver.login( ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.username)
WHERE ([sqlserver].[client_app_name]<>N'Microsoft SQL Server Management Studio - Transact-SQL IntelliSense')
ADD TARGET package0.event_file(SET filename=N'D:\_VTY\LastLoginAudits\audit_logon.xel')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
Eu tentei adicionar um predicado na cláusula where como esta, mas não funcionou:
WHERE ([sqlserver].[client_app_name]<>N'Microsoft SQL Server Management Studio - Transact-SQL IntelliSense')
AND [sqlserver].[is_dac]<>N'True')
Desde já, obrigado.
Você só precisa especificar is_cached, sem prefixá-lo com "sqlserver.":