SQL Server Query log in caso di mancata/errata query?

Sto usando SQL Server 2008 e vorrei sapere se c’è un modo per trovare le voci di query SQL che sono stati eseguiti in un database. Per esempio:

SELECT * FROM NonExistingTable

…dove il database non esiste o SELECT/INSERT/UPDATE con una sintassi non corretta.

InformationsquelleAutor Joe | 2011-09-14

 

2 Replies
  1. 9

    SQL Server non tenere un registro di queste cose, quindi se si desidera catturare dovrete farlo utilizzando una traccia sul lato server con un filtro per catturare solo dichiarazioni con errori. Sarà un costoso traccia, e si otterrà alcuni falsi positivi se si fanno le cose come RAISERROR WITH NOWAIT… credo sia più facile che l’attuazione TRY/CATCH ovunque e registrazione gli errori?

    Ci possono essere modi per farlo con Di Controllo di SQL Server (a seconda dell’edizione)
    o Eventi Estesi ma non ho provato a fare questa cosa specifica con…

    • Grazie Aaron per la tua risposta. Se non è possibile ottenere una registrazione poi dovrò andare fora profilazione approccio. Il problema è che questo non accada per gli uomini quando provo a riprodurre l’errore. Capita solo una volta in un mentre su un’altra macchina.
    • Vedere la mia risposta qui per qualcosa che potrebbe iniziare a eventi estesi percorso. Questo dovrebbe essere meno overhead di analisi come l’evento viene licenziato in caso di errore, piuttosto che catturare tutte le istruzioni SQL quindi filtrare quelli senza errori.
  2. 2

    Registrazione del messaggio 229 gravità 14 sarebbe sicuramente aiutare a identificare quando questi errori di prendere posto.

    SELECT * FROM master.sys.messages
     WHERE language_id=1033
     AND severity=14
     AND message_id=229;

    Si può attivare tramite:

    EXEC sp_altermessage 229, 'WITH_LOG', 'true';

    Mi piacerebbe creare un avviso sulla Gravità 14 errori per essere notificato quando accadono, per cui avrete bisogno per impostare un operatore troppo.

    L’unica limitazione che ha, è che non ti danno il login, il nome host o l’indirizzo IP della sessione con l’errore. Non registro SPID e dovresti recuperarlo utilizzando EXEC xp_readerrorlog usando qualcosa come

    EXEC xp_readerrorlog 0,1,'permission',NULL,NULL,NULL,'desc'

    o apertura sul SSMS e poi mettere in correlazione con quello che si trova su sysprocesses utilizzando

    SELECT * FROM master.dbo.sysprocesses WHERE SPID='LoggedSPID'

    È possibile abilitare la registrazione di altri messaggi che si potrebbe desiderare di essere a conoscenza, per questo scopo, principalmente scavare sulla gravità 14 e attivare quanto necessario.

    SELECT * FROM master.sys.messages
     WHERE language_id=1033
     AND severity=14;

Lascia un commento