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

Włączenie FILESTREAM

Termin Definicja
Włączenie FILESTREAM

Włączenie FILESTREAM na poziomie instancji jest warunkiem koniecznym do korzystania z tego mechanizmu w bazach.

Rola ustawienia FILESTREAM w SQL Server

FILESTREAM to mechanizm Microsoft SQL Server przeznaczony do przechowywania dużych obiektów binarnych, takich jak dokumenty, obrazy, nagrania lub inne pliki, w systemie plików NTFS przy zachowaniu kontroli metadanych po stronie bazy danych. W tabeli taki obiekt jest reprezentowany przez kolumnę varbinary(max) oznaczoną atrybutem FILESTREAM. SQL Server przechowuje wtedy zawartość poza klasycznymi stronami danych, natomiast transakcje, relacje i informacje o obiekcie pozostają obsługiwane przez silnik bazy.

Włączenie FILESTREAM na poziomie instancji jest warunkiem wstępnym, ale samo ustawienie instancji nie uruchamia jeszcze obsługi plików FILESTREAM w każdej bazie. Po aktywowaniu mechanizmu trzeba utworzyć lub zmodyfikować bazę tak, aby zawierała grupę plików FILESTREAM, a następnie zdefiniować odpowiednie kolumny tabel. Brak któregokolwiek z tych elementów może powodować, że funkcja będzie aktywna konfiguracyjnie, lecz nie będzie wykorzystywana przez konkretną bazę.

Poziomy dostępu i konfiguracja instancji

Konfiguracja FILESTREAM obejmuje ustawienie dostępu na poziomie instancji SQL Server. W SQL Server Configuration Manager należy otworzyć właściwości usługi SQL Server, przejść do karty FILESTREAM i włączyć obsługę FILESTREAM dla transakcyjnego dostępu do danych. W zależności od potrzeb można również włączyć dostęp FILESTREAM dla operacji wejścia-wyjścia z użyciem strumienia plikowego. Konfiguracja określa między innymi nazwę udziału systemu plików, przez który obsługiwany jest dostęp do danych FILESTREAM.

Poziom funkcji można kontrolować także za pomocą opcji serwera filestream access level. Wartość 0 oznacza wyłączenie FILESTREAM. Wartość 1 włącza dostęp Transact-SQL, czyli możliwość używania danych FILESTREAM z poziomu instrukcji SQL. Wartość 2 włącza również dostęp do danych przez interfejs strumieniowy Win32. Zmiana konfiguracji wykonywana przez sp_configure wymaga zastosowania polecenia RECONFIGURE, a zmiana ustawień usługi FILESTREAM może wymagać ponownego uruchomienia usługi SQL Server, aby nowe parametry zostały przyjęte.

Przykładowy schemat sprawdzenia ustawienia w instancji obejmuje zapytanie SELECT SERVERPROPERTY('FilestreamEffectiveLevel'). Wartość zwrócona przez tę właściwość pokazuje efektywny poziom FILESTREAM działający w instancji. Należy odróżnić go od wartości skonfigurowanej administracyjnie, ponieważ na wynik mogą wpływać ustawienia usługi oraz stan uruchomienia instancji. Sama obecność wpisu w konfiguracji nie jest więc wystarczającym potwierdzeniem poprawnego działania.

Baza, grupa plików i dostęp do danych

Po włączeniu funkcji na poziomie instancji baza danych musi otrzymać grupę plików typu FILESTREAM. Taka grupa wskazuje kontener w systemie plików, w którym SQL Server będzie przechowywał dane binarne. Kontener FILESTREAM powinien być pustym katalogiem przygotowanym do tego celu; nie należy umieszczać w nim ręcznie zarządzanych plików ani traktować go jak zwykłego udziału przeznaczonego do dowolnego zapisu.

Przykładowe utworzenie bazy z grupą FILESTREAM może wyglądać następująco:

CREATE DATABASE Dokumenty
ON PRIMARY (NAME = Dokumenty_Data, FILENAME = 'D:\SQLData\Dokumenty.mdf'),
FILEGROUP Dokumenty_FS CONTAINS FILESTREAM
(NAME = Dokumenty_FS_Container, FILENAME = 'D:\SQLData\Dokumenty_FS')
LOG ON (NAME = Dokumenty_Log, FILENAME = 'D:\SQLData\Dokumenty.ldf');

W tabeli można następnie zdefiniować kolumnę varbinary(max) FILESTREAM oraz kolumnę typu uniqueidentifier ROWGUIDCOL NOT NULL UNIQUE. Kolumna z identyfikatorem wiersza jest wymagana dla tabel zawierających kolumnę FILESTREAM. Jeżeli baza ma obsługiwać dostęp nietransakcyjny, w jej konfiguracji trzeba dodatkowo określić poziom NON_TRANSACTED_ACCESS, na przykład FULL, oraz nazwę katalogu FILESTREAM. Dostęp nietransakcyjny nie zastępuje transakcji SQL i powinien być dobierany świadomie, ponieważ zmienia sposób, w jaki aplikacja odczytuje i zapisuje zawartość.

Kontrola poprawności i typowe objawy błędnej konfiguracji

Weryfikację należy rozpocząć od sprawdzenia efektywnego poziomu FILESTREAM, stanu usługi SQL Server oraz ustawień konkretnej bazy. Następnie trzeba potwierdzić obecność grupy plików FILESTREAM w widokach katalogowych, między innymi w sys.filegroups, oraz sprawdzić, czy tabela zawiera prawidłowo zdefiniowaną kolumnę FILESTREAM i wymagany identyfikator wiersza. Warto także skontrolować, czy kontener znajduje się na dostępnym woluminie NTFS i czy usługa SQL Server może korzystać z jego ścieżki.

Objawem wyłączonego poziomu instancji może być brak możliwości utworzenia lub użycia wymaganej konfiguracji FILESTREAM. Jeżeli dostęp Transact-SQL działa, lecz aplikacja nie może otworzyć strumienia Win32, przyczyną może być ustawienie poziomu 1 zamiast 2, brak odpowiedniego poziomu dostępu w bazie albo niepoprawny kontekst transakcji. Interfejs OpenSqlFilestream wymaga między innymi logicznej ścieżki zwróconej przez SQL Server, identyfikatora transakcji oraz dostępu do właściwego udziału FILESTREAM.

Nie należy ręcznie przenosić plików z kontenera ani zmieniać ich nazw w systemie plików. Operacje takie jak przenoszenie kontenera, odtwarzanie bazy lub zmiana lokalizacji danych powinny być wykonywane przy użyciu procedur SQL Server, ponieważ silnik utrzymuje wewnętrzną spójność między metadanymi bazy a zawartością FILESTREAM. Przy diagnostyce trzeba również rozdzielić problem konfiguracji instancji od problemu uprawnień, ścieżki dyskowej, definicji tabeli i kodu aplikacji korzystającego z interfejsu strumieniowego.

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