Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

FILESTREAM filegroup

Termin Definicja
FILESTREAM filegroup

FILESTREAM filegroup to dedykowana grupa plików bazy danych przeznaczona do przechowywania danych tego mechanizmu.

Rola FILESTREAM filegroup w SQL Server

FILESTREAM filegroup to specjalna grupa plików bazy danych w Microsoft SQL Server, przeznaczona do przechowywania danych obiektów FILESTREAM. Nie jest to zwykła grupa plików używana wyłącznie dla tabel i indeksów. Jej obecność informuje silnik SQL Server, że wskazany obszar składowania ma obsługiwać wartości kolumn varbinary(max) oznaczone atrybutem FILESTREAM. Takie wartości są przechowywane poza standardowymi stronami danych bazy, natomiast SQL Server nadal zarządza ich powiązaniem z wierszami tabeli, transakcjami i kopią zapasową.

W jednej bazie może istnieć jeden lub więcej plików należących do FILESTREAM filegroup. Każdy taki plik wskazuje lokalizację kontenera danych FILESTREAM za pomocą właściwości FILENAME. Kontener jest katalogiem zarządzanym przez SQL Server, a nie zwykłym folderem przeznaczonym do ręcznego zapisywania plików. Nazwy, struktura podkatalogów i pliki pomocnicze znajdujące się wewnątrz kontenera nie powinny być zmieniane, przenoszone ani usuwane bez użycia procedur administracyjnych SQL Server.

Powiązanie grupy plików z kolumną FILESTREAM

Aby korzystać z FILESTREAM, baza danych musi mieć włączoną obsługę tego mechanizmu na poziomie instancji oraz odpowiednio skonfigurowane ustawienia bazy. W definicji tabeli kolumna przechowująca dane FILESTREAM ma typ varbinary(max) FILESTREAM. Tabela zawierająca taką kolumnę musi mieć również kolumnę typu uniqueidentifier z właściwością ROWGUIDCOL oraz unikatowym indeksem. Identyfikator wiersza pozwala SQL Server jednoznacznie powiązać dane binarne znajdujące się w kontenerze z konkretnym wierszem tabeli.

Przykładowa definicja tabeli może wyglądać następująco:

CREATE TABLE Dokumenty (DokumentId uniqueidentifier ROWGUIDCOL NOT NULL UNIQUE, Nazwa nvarchar(260) NOT NULL, Tresc varbinary(max) FILESTREAM NULL) ON FILESTREAM_Dane;

W tym przykładzie FILESTREAM_Dane jest nazwą FILESTREAM filegroup, a nie nazwą pojedynczego pliku systemu operacyjnego. Umieszczenie tabeli w tej grupie określa miejsce składowania danych FILESTREAM. Metadane tabeli, między innymi nazwa pliku, identyfikator wiersza i relacje, pozostają częścią bazy danych zarządzanej przez SQL Server.

Konfiguracja kontenera i dostęp do danych

FILESTREAM filegroup konfiguruje się przy tworzeniu bazy albo przez rozszerzenie istniejącej bazy poleceniem ALTER DATABASE. Grupa musi być oznaczona klauzulą CONTAINS FILESTREAM, a do niej dodaje się plik z fizyczną lokalizacją kontenera. Przykładowa składnia ma postać: ALTER DATABASE MojaBaza ADD FILEGROUP FILESTREAM_Dane CONTAINS FILESTREAM;, a następnie do grupy dodawany jest plik FILESTREAM z właściwością FILENAME = 'D:\SQLData\MojaBaza_FS'. Dokładna ścieżka zależy od konfiguracji serwera i musi wskazywać lokalizację dostępną dla usługi SQL Server.

Dane FILESTREAM można odczytywać przez zwykłe instrukcje Transact-SQL, ale SQL Server udostępnia również strumieniowy dostęp systemu Windows przez interfejs OpenSqlFilestream. Ten tryb wymaga między innymi kontekstu transakcji oraz odpowiedniego uchwytu uzyskanego z SQL Server. Dostęp do kontenera przez bezpośrednie otwieranie plików w systemie operacyjnym omija mechanizmy kontroli SQL Server i może uszkodzić spójność danych, dlatego nie jest prawidłową metodą obsługi FILESTREAM.

Warto odróżnić FILESTREAM filegroup od opcji FILETABLE. FileTable korzysta z mechanizmu FILESTREAM i zapewnia tabelę o ustalonej strukturze, która reprezentuje pliki oraz katalogi, ale sama grupa plików nadal jest elementem konfiguracji bazy danych. Włączenie FILESTREAM dla instancji, utworzenie filegroup i skonfigurowanie dostępu do danych to odrębne czynności. Błąd w dowolnym z tych obszarów może powodować problemy przy tworzeniu tabeli, zapisie danych albo użyciu dostępu strumieniowego.

Kontrola spójności, kopie zapasowe i diagnostyka

FILESTREAM filegroup należy traktować jako część bazy danych, a nie niezależny magazyn plików. Kopia zapasowa bazy obejmuje również dane FILESTREAM zgodnie z zakresem wykonywanej kopii. Przy odtwarzaniu trzeba zachować spójność metadanych bazy i zawartości kontenera. Samo skopiowanie katalogu kontenera w Eksploratorze plików nie zastępuje kopii zapasowej SQL Server i nie gwarantuje możliwości poprawnego odtworzenia relacji między wierszami a danymi binarnymi.

Diagnostyka powinna obejmować sprawdzenie, czy baza ma FILESTREAM filegroup, jakie pliki są do niej przypisane oraz czy wskazane lokalizacje istnieją i są dostępne dla usługi SQL Server. Przydatne są widoki katalogowe, między innymi sys.filegroups, sys.database_files i sys.tables. Należy również sprawdzić właściwość is_filestream kolumn w widoku sys.columns. Problemy mogą wynikać z braku miejsca, niewłaściwych uprawnień usługi, usunięcia lub przeniesienia kontenera, niezgodnej konfiguracji instancji albo próby korzystania z danych poza mechanizmami SQL Server.

W przypadku komputera używanego jako stacja robocza diagnostyka powinna najpierw rozdzielić problem bazy SQL Server od problemu systemu plików, dysku i uprawnień. Analiza komunikatu błędu, konfiguracji usługi, dostępnego miejsca oraz stanu nośnika pozwala ustalić, czy problem dotyczy samego FILESTREAM filegroup, całej bazy danych, czy infrastruktury, na której działa SQL Server.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę