| Termin | Definicja |
|---|---|
| Odczyt danych FILESTREAM | Odczyt danych FILESTREAM odbywa się przez API systemu plików albo standardowe zapytanie do kolumny binarnej. Dwa sposoby odczytu obiektu FILESTREAM w SQL ServerFILESTREAM w Microsoft SQL Server pozwala przechowywać dane typu Druga metoda wykorzystuje strumieniowy dostęp do pliku przez API systemu Windows. Aplikacja pobiera logiczną ścieżkę obiektu za pomocą metody Przygotowanie ścieżki i kontekstu transakcjiDo użycia interfejsu FILESTREAM aplikacja potrzebuje wiersza zawierającego kolumnę typu Odczyt przez W praktycznym przepływie aplikacja rozpoczyna transakcję, wybiera ścieżkę obiektu i kontekst transakcji, otwiera uchwyt FILESTREAM, odczytuje dane porcjami, zamyka uchwyt, a dopiero potem kończy transakcję. Przy odczycie należy obsłużyć przerwanie połączenia, zmianę stanu transakcji oraz błędy odczytu. Pozostawienie otwartego uchwytu lub niezamkniętej transakcji może utrzymywać zasoby dłużej, niż zakłada aplikacja. Ograniczenia dostępu przez system plikówStrumieniowy interfejs FILESTREAM korzysta z mechanizmu SMB udostępnianego przez SQL Server, ale aplikacja nie powinna omijać SQL Server przez samodzielne przeglądanie fizycznego kontenera danych. Pliki znajdujące się w kontenerze są zarządzane przez silnik bazy i ich bezpośrednia modyfikacja poza obsługiwanym API może uszkodzić spójność danych. Prawidłowy odczyt odbywa się przez ścieżkę uzyskaną z kolumny FILESTREAM oraz kontekst wygenerowany w bieżącej transakcji. Tryb dostępu może być ustawiony jako odczyt albo zapis, zależnie od operacji przekazanej do FILESTREAM musi być włączony na poziomie instancji SQL Server, a konkretna baza danych musi mieć skonfigurowaną obsługę FILESTREAM i odpowiednią grupę plików. Dostęp przez API systemu plików zależy również od ustawień poziomu dostępu FILESTREAM oraz od uprawnień konta używanego przez aplikację. Sam fakt posiadania ścieżki zwróconej przez Weryfikacja odczytu i typowe źródła problemówDiagnostykę należy rozpocząć od sprawdzenia definicji tabeli, typu kolumny, obecności ograniczenia Częstą przyczyną niepowodzenia jest rozpoczęcie odczytu bez transakcji, pobranie kontekstu w innej transakcji niż ta, która otwiera strumień, albo zamknięcie transakcji przed zakończeniem odczytu. Problem może również wynikać z niedostępności skonfigurowanego udziału FILESTREAM, braku wymaganych uprawnień, użycia nieobsługiwanego połączenia lub przekazania nieaktualnej ścieżki. W logach aplikacji powinny znaleźć się identyfikator rekordu, rozmiar oczekiwanych danych, tryb dostępu, etap transakcji i kod błędu, bez zapisywania całej zawartości binarnej. W środowisku produkcyjnym należy zamykać uchwyty strumieni w bloku gwarantującym wykonanie operacji porządkowych oraz wycofywać transakcję po błędzie. Jeżeli obiekt ma być przesyłany dalej, aplikacja powinna sprawdzać liczbę odczytanych bajtów i poprawnie obsługiwać odczyt częściowy. Takie postępowanie pozwala odróżnić błąd konfiguracji SQL Server od usterki w kodzie klienta odpowiedzialnym za transakcję, obsługę uchwytu lub składanie danych. |