Schemat programu SQL Server 2014 zmienia się w środowisku 24/7 dla wielu użytkowników

12

Zainstalowaliśmy SQL Server 2014 Enterprise, aby uruchomić bazę danych, która powinna być dostępna 24/7. Nasza baza danych jest wystarczająco duża (200 GB +). Mamy również wiele usług, które co minutę trafiają do naszej bazy danych, aby czytać, aktualizować lub wstawiać nowe dane. Chcemy zapewnić „gorącą” funkcję ponownego wdrażania dla naszych klientów i zapewnić naszym klientom codzienne aktualizacje (aktualizacje .net i schematu). Znaleźliśmy rozwiązanie oparte na klastrze z modułem równoważenia obciążenia, które aktualizuje pliki binarne naszej aplikacji, ale nadal mamy pewne nieporozumienia na temat procesu wdrażania aktualizacji bazy danych i najlepszych praktyk w celu rozwiązania tego problemu.

W przypadku zmian schematu wyłącz jeden serwer, zastosuj zmiany schematu, przywróć go, a następnie zastosuj te same zmiany w drugiej instancji. Czy można tego dokonać za pomocą narzędzi SQL Server i czy jest to powszechne podejście? Jak synchronizować dane po utworzeniu kopii zapasowej serwera? Czy też całkowicie myślę w złym kierunku i czy są lepsze rozwiązania?

Nasze wspólne zmiany schematu: dodawanie / upuszczanie kolumny, dodawanie / usuwanie procedury składowanej

Shmitov Michael
źródło
Jaki jest twój obecny układ SQL? Klastrowany? Zawsze włączone? Dublowany? Pojedyncza instancja?
LowlyDBA,
Obecnie mamy jedną instancję, ale możemy ją zmienić zgodnie z wymaganiami, dodać nowy serwer i tak dalej
Shmitov Michael
4
Powinieneś postępować zgodnie z podejściem niebiesko-zielonym, w ten sposób możesz mieć system na żywo (zielony) i dokonać aktualizacji na etapie pomostowym (niebieski), a następnie zmienić role. To właśnie wdrożyliśmy za pomocą AlwaysON i działa dla nas - prawie taki sam scenariusz. Wymaga odpowiedniego planowania, wdrożenia i testowania.
Kin Shah,
Czy możesz podać mi bardziej szczegółowy scenariusz, na przykład zmiany schematu usuwania kolumn?
Shmitov Michael
Wyjaśnienie poprzedniego komentarza, zmieniłem węzły podstawowe (S1) / drugorzędne (S2) w infrastrukturze AlwaysOn, a następnie postanowiłem usunąć niektóre kolumny ze schematu na replice (S1, było to pierwotne przed zmianą), ale nadal mogę uzyskać dane replikacji z S2 z tą kolumną w tabeli .... jak mogę poradzić sobie z tym problemem?
Shmitov Michael

Odpowiedzi:

1

Poniżej będzie trochę więcej planowania i testowania.


Koncepcja niebiesko-zielona:


Istotą koncepcji niebiesko-zielonej jest podzielenie produkcji na 2 środowiska i są one zawsze identyczne (synchronizacja danych), w których

  1. Niebieski (bieżący) będzie miał aktualną wersję schematu / kompilacji lub produktu i będzie Twoim środowiskiem „LIVE”.

  2. W tym samym czasie środowisko zielone będzie środowiskiem testowania / testowania, w którym zaktualizujesz schemat / kompilację lub produkt do wersji NEXT, wykonasz pełny test regresji i zostaniesz wylogowany przez użytkowników biznesowych. Kiedy będziesz zadowolony, w okresie przerywnikowym będziesz promować Green jako środowisko „LIVE” i zdegradować Blue jako preprodukcję / inscenizację lub testy do następnej wersji.

W ten sposób masz znacznie mniej przestojów, a ryzyko niepowodzenia wdrożenia w systemie na żywo (który znajduje się w oknie konserwacji, ponieważ przeprowadzasz aktualizację) zostanie znacznie zminimalizowane. Ponadto, postępując zgodnie z podejściem niebiesko-zielonym, będziesz oscylował między wersją NA ŻYWO i POPRZEDNIĄ, która będzie wystawiać kolejną wersję.

Ponownie będzie to wymagało więcej sprzętu / licencji, a także planowania i testowania.

Większość kroków można zautomatyzować za pomocą DACPAC i PowerShell. Ponadto, jeśli instalujesz wiele instancji na jednym serwerze, pamiętaj o ponownym zrównoważeniu ustawień pamięci podczas przełączania między niebieskim i zielonym. Środowisko LIVE ma więcej pamięci niż środowisko pasywne.

W moim obecnym środowisku wdrożyliśmy niebieski / zielony model do wdrażania kodu Agile, który pozwala nam promować kod co 2 tygodnie z wystarczającą ilością czasu na testowanie i podpisywanie dokumentów biznesowych. Ponadto bardzo łatwo jest wycofać się na wypadek, gdyby coś poszło nie tak. Zautomatyzowaliśmy większość rzeczy związanych z wdrażaniem za pomocą Dacpacs i PowerShell.

wprowadź opis zdjęcia tutaj (Źródło obrazu)

Zobacz także artykuł Granta Fritcheya na temat rozwiązywania problemów z przywracaniem i odzyskiwaniem; Wyzwania i strategie

Kin Shah
źródło
0

Jeśli twoja baza danych nie jest replikowana, dodaj i upuść kolumny będą działać bardzo szybko. Ponieważ kolumna dodawania jest tylko pustą pozycją tworzoną przez SQL. Upuszczenie kolumny spowoduje tylko usunięcie odniesienia.

W przeciwnym razie, jeśli istnieje jakieś ograniczenie lub indeks, należy zachować ostrożność.

ADD/DELETEprocedury będą miały wpływ na samo wykonanie. Zaleca się, zanim przed jakąkolwiek zmianą uruchom ponownie kompilację

sp_recompile 'myproc'
Krismorte
źródło