¿Cómo encontrar lo que causó los errores informados en una traza del analizador de SQL Server?
-
03-07-2019 - |
Pregunta
Estaba ejecutando un seguimiento en un Sql Server 2005 utilizando el generador de perfiles y necesito averiguar qué está causando los errores informados.
Utilicé el " espacio en blanco " plantilla, y seleccionó todas las columnas de los siguientes eventos:
- Excepción
- Evento de derrame de intercambio
- Advertencias de ejecución
- Hash Warnings
- Estadísticas de columnas faltantes
- Falta el predicado de unirse
Noté varios de estos errores en " TextData " columna:
- Error: 156, Gravedad: 16, Estado: 0
- Error: 208, Gravedad: 16, Estado: 0
Busqué los errores (sintaxis incorrecta, nombre de objeto no válido), pero ¿cómo puedo saber qué procedimiento almacenado o consulta los está causando?
Solución
No te preocupes por los 208 errores. 208 es " Objeto no encontrado " ;. El generador de perfiles los recoge debido a lo que se denomina "resolución de nombres diferida".
Lleve a cabo el siguiente procedimiento.
CREATE PROCEDURE Demo AS
CREATE TABLE #Temp (ID int)
INSERT INTO #Temp VALUES (1)
SELECT ID FROM #Temp
GO
Ese proceso se ejecutará bien sin ningún error, sin embargo, si tiene un rastreo del generador de perfiles en ejecución, verá una o dos instancias del error 208. Es porque la tabla #Temp no existe cuando se inicia el proceso, que es cuando el código es analizado y encuadernado. El proceso de enlace a los objetos subyacentes falla.
Una vez que se ejecuta la tabla de creación, las otras declaraciones se vuelven a compilar, se unen a la tabla correcta y se ejecutan sin errores.
El único lugar donde verá que el error de resolución diferida es en el generador de perfiles.
Otros consejos
en sql 2005 no puedes. Tendrá que ejecutar el seguimiento del generador de perfiles de SQL: StmtStarting, SQL: StmtCompleted, User Error Message y Exception events con texto, transactionId, EventSequence y otras columnas que necesita para obtener una imagen de lo que está sucediendo.