sql-server - parametros - permisos para ejecutar procedimientos almacenados mysql
¿Qué sucede si se modifica un procedimiento almacenado mientras se está ejecutando? (2)
Tengo un cambio menor, de una línea (que corrige un error tipográfico en una cadena), a un procedimiento almacenado que me gustaría implementar en nuestro servidor de producción SQL Server 2005 lo antes posible.
La preocupación que tengo es qué sucede si, en el momento exacto, se ejecuta la declaración de modificación para actualizar mi procedimiento almacenado, ¿sucede que algo llama a ese procedimiento almacenado al mismo tiempo?
¿Se ejecuta con la copia anterior del procedimiento almacenado, o puede resultar en algún daño o corrupción?
Teniendo en cuenta la naturaleza ACID de SQL Server, esperaría que fuera seguro. Las posibilidades de que se ejecute exactamente al mismo tiempo, especialmente debido a que el SP es bastante pequeño, son extremadamente bajas, pero prefiero asegurarme, y también me interesa la respuesta, solo con fines educativos.
Podría decirse que ServerFault sería un lugar mejor para esto, perdón si está mal colocado.
Gracias.
Acabo de probar esto en SQL Server 2008 R2
Comencé con:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY ''0:00:10''
SELECT TOP 5 * FROM dbo.UniqueId
GO
Entonces hice la siguiente ventana de consulta de SQL Server 1:
EXEC dbo.Stupid
Ventana de consulta de SQL Server 2, mientras que la consulta en la ventana de consulta 1 se estaba ejecutando:
ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY ''0:00:05''
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO
EXEC dbo.Stupid
SQL Server Query Window 3, mientras que las consultas en Query Window 1 y Query Window 2 se estaban ejecutando:
EXEC dbo.Stupid
Resultados:
- La ventana de consulta 1 se ejecutó en 10 segundos (y, por lo tanto, finalizó después de las ventanas 2 y 3) y devolvió las ID 1 - 5
- La ventana de consulta 2 se modificó y ejecutó el procedimiento en 5 segundos, y devolvió las identificaciones 6 - 10
- La ventana de consulta 3 se ejecutó en 5 segundos y devolvió las ID 6 - 10
Lo que pasa:
- El código en ejecución ya se ejecutará en el procedimiento tal como estaba cuando se iniciaron
- Cualquier cosa que comience a ejecutarse después de que se modifique el código ejecutará el nuevo código
Cuando se usa ALTER para el procedimiento, se establece un bloqueo de modificación de esquema. El SP aún existe, pero los clientes tendrán que esperar hasta que se ejecute ALTER. Lo mismo se aplica para ALTER, esperará hasta que los clientes no utilicen el SP.