| Termin | Definicja |
|---|---|
| FILESTREAM w klastrze | FILESTREAM w klastrze opisuje specyfikę konfiguracji tego mechanizmu w środowisku klastra pracy awaryjnej. FILESTREAM w instancji klastra pracy awaryjnejFILESTREAM w klastrze pracy awaryjnej SQL Server łączy relacyjną bazę danych z systemem plików, ale wymaga uwzględnienia sposobu przenoszenia zasobów między węzłami. W klasycznej konfiguracji Failover Cluster Instance, czyli instancji SQL Server uruchamianej jako zasób klastra Windows Server Failover Clustering, baza danych może zawierać filegroup typu FILESTREAM. Dane przechowywane w takim filegroupie nie są umieszczane bezpośrednio w tabeli jako duże wartości binarne. SQL Server zapisuje je w specjalnym kontenerze FILESTREAM, natomiast w tabeli przechowuje powiązanie z obiektem systemu plików oraz metadane potrzebne do zachowania spójności transakcyjnej. Kontener FILESTREAM musi znajdować się na magazynie dostępnym dla całej instancji klastra. W zależności od architektury może to być wolumin dyskowy zarządzany przez klaster, udział plikowy SMB albo inny wspierany zasób magazynowy wskazany podczas konfiguracji SQL Server. Nie wystarczy, że katalog istnieje lokalnie na jednym serwerze. Po przełączeniu instancji na inny węzeł SQL Server musi uzyskać dostęp do tego samego kontenera, ponieważ pliki FILESTREAM są częścią trwałego stanu bazy danych. Lokalna ścieżka dostępna wyłącznie dla bieżącego węzła nie zapewnia poprawnego działania mechanizmu podczas awarii. Powiązanie filegroupu, kontenera i udziału FILESTREAMKonfiguracja obejmuje kilka niezależnych elementów. W bazie danych należy utworzyć filegroup FILESTREAM, a następnie dodać do niego kontener wskazujący lokalizację przechowywania danych. Przykładowa definicja bazy może zawierać klauzulę Dostęp aplikacji do zawartości może odbywać się zwykłym mechanizmem Transact-SQL albo przez strumieniowanie Win32 za pomocą uchwytu zwracanego przez funkcję Usługa FILESTREAM jest włączana na poziomie instancji SQL Server, a następnie konfiguruje się dla niej udział plikowy oraz poziom dostępu, na przykład dostęp wyłączony, tylko Transact-SQL albo dostęp pełny. Ustawienie instancji nie zastępuje jednak konfiguracji konkretnej bazy danych. Baza musi mieć filegroup FILESTREAM i odpowiedni kontener, a tabela musi używać właściwego typu kolumny. W praktyce błąd może wynikać zarówno z wyłączonego dostępu FILESTREAM, braku udziału, niedostępnego magazynu, jak i z niepoprawnej definicji tabeli. Przełączenie awaryjne i ograniczenia operacyjnePodczas failover SQL Server zatrzymuje zasoby instancji na dotychczasowym węźle i uruchamia je na węźle przejmującym. Zasób zawierający dane FILESTREAM musi być dostępny przed zakończeniem uruchamiania instancji. Jeżeli magazyn nie zostanie zamontowany, udział FILESTREAM nie będzie osiągalny albo konto usługi nie otrzyma wymaganych uprawnień, baza może pozostać niedostępna mimo poprawnego działania samego systemu Windows. Weryfikacja powinna obejmować stan grupy klastra, stan zasobu dyskowego lub udziału, dostępność nazwy sieciowej, usługę SQL Server FILESTREAM oraz komunikaty w dzienniku SQL Server i dzienniku zdarzeń klastra. Ważnym rozróżnieniem jest Failover Cluster Instance i Availability Groups. FILESTREAM może być używany w bazach objętych grupą dostępności, ale dane FILESTREAM nie są synchronizowane przez mechanizm strumieniowania grup dostępności w taki sposób jak zwykłe pliki danych. W przypadku Always On Availability Groups zawartość FILESTREAM i FileTable nie jest replikowana do replik pomocniczych. Dlatego konfiguracja wykorzystująca grupę dostępności wymaga osobnej oceny architektury magazynu i sposobu zapewnienia dostępu do plików. Nie należy zakładać, że utworzenie repliki bazy automatycznie zapewni dostęp do wszystkich obiektów FILESTREAM na serwerze pomocniczym. Po przełączeniu należy sprawdzić nie tylko połączenie z bazą, lecz także operacje odczytu i zapisu przez przewidziany interfejs. Test powinien potwierdzić, że zapytanie zwracające Diagnostyka spójności danych FILESTREAM w klastrzeAnalizę problemu należy rozpocząć od ustalenia, jaki typ klastra jest używany i gdzie fizycznie znajduje się kontener FILESTREAM. Następnie trzeba porównać konfigurację wszystkich węzłów: wersję i edycję SQL Server, stan składnika FILESTREAM, konfigurację udziału, konto usługi oraz uprawnienia do magazynu. W przypadku Failover Cluster Instance należy potwierdzić, że ścieżka kontenera jest widoczna po uruchomieniu instancji na każdym węźle, a zasoby zależne mają prawidłową kolejność startu. Nie powinno się ręcznie przenosić, kopiować ani zmieniać nazw plików w kontenerze FILESTREAM, ponieważ jego struktura jest zarządzana przez SQL Server. Po stronie bazy warto sprawdzić, czy filegroup FILESTREAM jest online, czy kontener należy do właściwej bazy oraz czy tabela zawiera wymagane ograniczenia dla kolumny FILESTREAM. Pomocne są katalogi systemowe SQL Server, między innymi widoki opisujące pliki i filegroupy bazy, a także polecenia administracyjne pokazujące stan bazy i jej plików. Weryfikacja powinna rozdzielać problemy relacyjne od problemów ścieżki Win32: zapytanie przez Transact-SQL może działać, gdy aplikacja nie ma dostępu do udziału FILESTREAM, albo odwrotnie. Dopiero zgodność obu ścieżek potwierdza poprawną konfigurację. Naprawa zależy od przyczyny. Przy niedostępnym magazynie trzeba przywrócić dostępność zasobu klastra i sprawdzić zależności, a przy błędzie uprawnień skontrolować konto usługi SQL Server oraz uprawnienia udziału i systemu plików. Jeżeli problem dotyczy nazwy używanej przez aplikację, należy poprawić konfigurację klienta tak, aby odwoływał się do właściwego punktu dostępu instancji. W środowisku produkcyjnym każdą zmianę powinno się przetestować podczas kontrolowanego przełączenia, a następnie potwierdzić odczyt, zapis, rollback transakcji i wykonanie kopii zapasowej zawierającej dane FILESTREAM. |