2013-02-21 15 views
15

Mam niewielką, jedną zmianę linii (ustalanie literówki w ciągu znaków), do procedury składowanej, którą chciałbym wdrożyć na naszym serwerze produkcyjnym SQL Server 2005 tak szybko, jak to możliwe.Co się stanie, jeśli zmieni się procedura składowana, gdy jest uruchomiona?

Martwię się, co mam zrobić, jeśli w tym samym czasie uruchomi się instrukcję alter aktualizującą moją procedurę przechowywaną, zdarza się, że coś wywołuje procedurę przechowywaną w tym samym czasie?

Czy działa z poprzednią kopią procedury składowanej, czy może powodować pewne uszkodzenia lub błędy?

Biorąc pod uwagę charakter ACID SQL Servera, oczekiwałbym, że jest bezpieczny. Szanse na to, że działa dokładnie w tym samym czasie, zwłaszcza, że ​​SP jest dość mały, są bardzo niskie, ale wolę się upewnić i jestem również zainteresowany odpowiedzią, tylko dla celów edukacyjnych.

Prawdopodobnie ServerFault byłby lepszym miejscem do tego, przepraszam, jeśli jest źle zaimplementowany.

Dziękuję.

+6

Gdy ** wykonujesz ** procedurę przechowywaną, jest ona ładowana do pamięci, analizowana, określany jest plan zapytania, a następnie jest wykonywany. Więc po tym, jak został załadowany w pierwszym kroku - możesz całkowicie go zmienić, to nie będzie miało żadnego wpływu na twoją działającą egzekucję. –

Odpowiedz

16

Podczas korzystania z opcji ALTER w procedurze ustawiana jest blokada modyfikacji schematu. Plik SP nadal istnieje, ale klienci będą musieli poczekać, aż zostanie wykonana operacja ALTER. To samo dotyczy ALTER, będzie czekać, aż SP nie będzie używane przez klientów.

+0

Dziękuję bardzo. –

10

Właśnie przetestowane w SQL Server 2008 R2

Zacząłem:

CREATE PROCEDURE dbo.Stupid 
AS 
WAITFOR DELAY '0:00:10' 
SELECT TOP 5 * FROM dbo.UniqueId 
GO 

I wtedy zrobił następującą SQL Server Query Okno 1:

EXEC dbo.Stupid 

Okno zapytania SQL Server 2, podczas gdy zapytanie w oknie kwerendy 1 było uruchomione:

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 Okno 3, podczas kwerendy w Query Okno 1 i Query okno 2 biegali:

EXEC dbo.Stupid 

Wyniki:

  • Query Okno 1 pobiegł w 10 sekund (a zatem zakończone po oknach 2 i 3) i zwrócone identyfikatory 1 - 5
  • zapytań Okno 2 zmieniane i prowadził procedurę 5 sekund, a zwrócone IDS 6 - 10
  • Zapytanie Okno 3 prowadził w 5 sekund, a zwrócone IDS 6 - 10

co dzieje:

  • już kod wykonywany zakończy bieg sprawie procedury, jak to było, kiedy były zaczęli
  • Wszystko, co zaczyna uruchamiać po kodzie jest zmieniona zostanie uruchomiony nowy kod
+0

Dobre badania !! –

Powiązane problemy