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 file

Termin Definicja
FILESTREAM file

FILESTREAM file to pojedynczy plik na dysku przechowujący dane obiektu binarnego zarządzanego przez ten mechanizm.

FILESTREAM file w architekturze SQL Server

FILESTREAM file to pojedynczy plik przechowywany w kontenerze FILESTREAM i zawierający dane binarne należące do wartości kolumny varbinary(max) skonfigurowanej z atrybutem FILESTREAM. Mechanizm jest częścią Microsoft SQL Server i służy do obsługi dużych obiektów binarnych, takich jak dokumenty, obrazy, nagrania lub archiwa, gdy przechowywanie całej zawartości w klasycznych stronach danych bazy byłoby mniej korzystne. W tabeli pozostaje wartość binarna powiązana z konkretnym wierszem, natomiast właściwe bajty mogą znajdować się w systemie plików zarządzanym przez SQL Server.

Plik FILESTREAM nie jest zwykłym dokumentem przeznaczonym do ręcznego otwierania, kopiowania ani zmiany nazwy. Jego lokalizacja należy do kontenera FILESTREAM wskazanego przy tworzeniu lub modyfikowaniu grupy plików FILESTREAM. SQL Server utrzymuje powiązanie między rekordem, identyfikatorem filestream i fizycznym obiektem w kontenerze. Nazwy oraz układ katalogów wewnątrz tego obszaru są elementem implementacji silnika, dlatego bezpośrednia ingerencja w katalogi może doprowadzić do niespójności danych.

Powiązanie pliku z wierszem i kolumną FILESTREAM

Obsługa FILESTREAM wymaga kilku elementów współpracujących ze sobą w SQL Server. Baza danych musi mieć grupę plików oznaczoną jako FILESTREAM, a tabela musi zawierać kolumnę typu varbinary(max) FILESTREAM. Tabela powinna również posiadać kolumnę typu uniqueidentifier ROWGUIDCOL z ograniczeniem UNIQUE. Wartość identyfikatora wiersza jest używana przez mechanizm do jednoznacznego powiązania danych binarnych z rekordem. Sam FILESTREAM file nie funkcjonuje więc niezależnie od schematu tabeli ani od metadanych przechowywanych w bazie.

SQL Server udostępnia dla wartości FILESTREAM logiczny identyfikator ścieżki, zwracany przez funkcję PathName(). Taka ścieżka nie powinna być traktowana jako zwykły adres systemu plików. Dostęp do danych z użyciem interfejsu systemu Windows odbywa się przez specjalny udział FILESTREAM, który musi być włączony w konfiguracji instancji. Połączenie wymaga również kontekstu transakcji. Do strumieniowego odczytu lub zapisu aplikacja korzysta z funkcji OpenSqlFilestream oraz z transakcji uzyskanej z SQL Server, ponieważ silnik musi kontrolować zgodność operacji plikowej ze stanem wiersza.

Odczyt, zapis i cykl życia FILESTREAM file

Operacje na danych FILESTREAM można wykonywać przez zwykły język Transact-SQL albo przez dostęp strumieniowy. Przy użyciu T-SQL aplikacja odczytuje lub zapisuje wartość kolumny tak jak inne dane typu varbinary(max). Przy dużych obiektach dostęp strumieniowy pozwala przekazywać zawartość przez interfejs plikowy bez budowania całego obiektu w pamięci procesu aplikacji. Nie zmienia to jednak faktu, że autoryzacja, transakcja i powiązanie z rekordem są kontrolowane przez SQL Server.

Usunięcie lub zastąpienie wartości w kolumnie nie oznacza, że aplikacja może natychmiast usunąć odpowiadający jej plik z katalogu kontenera. SQL Server zarządza cyklem życia obiektów FILESTREAM i wykorzystuje proces zbierania nieużywanych danych, aby porządkować pliki, które przestały być referencjonowane. Ręczne kasowanie plików z kontenera omija mechanizmy transakcyjne i może pozostawić w bazie odwołania do nieistniejących danych albo uszkodzić strukturę zarządzaną przez silnik. Z tego powodu kontrola miejsca powinna odbywać się przez monitorowanie bazy, grupy plików FILESTREAM i woluminu, a nie przez ręczne porządki w katalogach.

FILESTREAM file podlega również zasadom ochrony transakcyjnej i kopii zapasowych SQL Server. Kopia bazy powinna obejmować właściwe dane relacyjne oraz zawartość grup FILESTREAM, aby można było odtworzyć zarówno rekordy, jak i ich obiekty binarne. Samo skopiowanie katalogu systemem operacyjnym nie jest równoważne wykonaniu kopii zapasowej bazy. Przy diagnozowaniu problemów trzeba rozróżnić brak miejsca na woluminie, błędne uprawnienia do udziału FILESTREAM, nieprawidłowy kontekst transakcji oraz uszkodzenie powiązania między rekordem a danymi.

Co oznacza ten plik podczas diagnozy komputera

Na komputerze użytkownika FILESTREAM file może pojawić się w związku z aplikacją korzystającą z SQL Server, lecz zwykle nie jest samodzielnym plikiem roboczym, który należy otwierać w Eksploratorze Windows. Podczas diagnozy warto ustalić, jaka aplikacja korzysta z bazy, gdzie znajduje się instancja SQL Server, czy usługa działa oraz czy wolumin zawierający kontener FILESTREAM ma wystarczającą ilość wolnego miejsca. Należy także sprawdzić, czy problem dotyczy wszystkich obiektów binarnych, czy tylko wybranych rekordów, oraz czy występuje przy odczycie przez T-SQL, czy dopiero przy dostępie strumieniowym.

Objaw w rodzaju błędu odczytu pliku, niedostępnego dokumentu lub nieudanej operacji zapisu nie wskazuje automatycznie na uszkodzenie samego pliku. Przyczyną może być brak aktywnej transakcji, użycie nieprawidłowego uchwytu, wyłączony dostęp FILESTREAM, ograniczenia uprawnień albo niespójność konfiguracji klienta i serwera. Bezpośrednia zmiana zawartości katalogu FILESTREAM nie jest metodą naprawczą. Bezpieczne postępowanie polega na zebraniu komunikatów SQL Server, informacji o bazie i aplikacji oraz wykonaniu kopii zapasowej przed działaniami, które mogą zmienić stan danych.

Zakres diagnozy na komputerze użytkownika obejmuje przede wszystkim ustalenie, czy źródło problemu znajduje się po stronie systemu, dysku, konfiguracji klienta lub aplikacji. Analiza administracyjna konkretnej bazy SQL Server wymaga dostępu do właściwego środowiska i danych diagnostycznych generowanych przez ten silnik.

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