Журнал запросов SQL Server для неудачных / неправильных запросов? - PullRequest
12 голосов
/ 14 сентября 2011

Я использую SQL Server 2008, и я хотел бы знать, есть ли способ найти недопустимые запросы SQL, которые были выполнены в базе данных.Например:

SELECT * FROM NonExistingTable

... где база данных не существует или SELECT/INSERT/UPDATE с неправильным синтаксисом.

Ответы [ 2 ]

9 голосов
/ 14 сентября 2011

SQL Server не ведет журнал этих вещей, поэтому, если вы хотите захватить их, вам придется сделать это, используя трассировку на стороне сервера с фильтром, чтобы захватывать только операторы с ошибками. Это будет довольно дорогой след, и вы получите несколько ложных срабатываний, если будете делать такие вещи, как RAISERROR WITH NOWAIT ... Я думаю, это проще, чем внедрять TRY / CATCH везде и регистрировать ошибки самостоятельно?

Могут быть способы сделать это с Аудит SQL Server (в зависимости от вашей редакции) или Расширенные события , но я не пытался сделать эту конкретную вещь с ...

2 голосов
/ 21 октября 2015

Регистрация сообщения 229 с серьезностью 14 определенно поможет вам определить, когда происходят эти ошибки.

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

Вы можете включить его с помощью:

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

Я бы создал бы предупреждение об ошибках с уровнем серьезности 14, чтобы получать уведомления о его возникновении, для этого вам также потребуется установить оператора.

Единственное ограничение, которое это имеет, состоит в том, что он не дает вам логин, имя хоста или IP-адрес сеанса, в котором произошла ошибка. Он регистрирует SPID, и вам придется извлечь его, используя EXEC xp_readerrorlog, используя что-то вроде

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

или откройте его в SSMS, а затем сопоставьте его с тем, что вы найдете в sysprocesses , используя

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

Вы можете включить ведение журнала других сообщений, о которых вам может потребоваться знать, для этого, в первую очередь, проанализируйте уровень серьезности 14 и включите при необходимости.

SELECT * FROM master.sys.messages
 WHERE language_id=1033
 AND severity=14;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...