| Termin | Definicja |
|---|---|
| Zapis danych FILESTREAM | Zapis danych FILESTREAM odbywa się przez API systemu plików lub standardowe operacje na kolumnie binarnej. Jak SQL Server zapisuje dane FILESTREAMFILESTREAM to funkcja Microsoft SQL Server przeznaczona do przechowywania dużych wartości binarnych typu Dane można zapisywać za pomocą standardowych instrukcji Transact-SQL, takich jak Kolumna FILESTREAM, filegroup i kontener danychPrzed zapisem trzeba utworzyć bazę danych z filegroup oznaczonym jako FILESTREAM, a następnie wskazać kontener FILESTREAM w definicji bazy. Przykładowa konfiguracja może zawierać filegroup z opcją Przykładowa tabela przechowująca dokumenty może mieć kolumny Zapis strumieniowy przez API systemu plików WindowsPrzy zapisie dużego obiektu aplikacja może najpierw utworzyć lub zaktualizować wiersz w Transact-SQL, a następnie pobrać ścieżkę logiczną za pomocą funkcji Typowy przebieg zapisu obejmuje rozpoczęcie transakcji, przygotowanie wiersza z kolumną FILESTREAM, pobranie ścieżki i kontekstu transakcji, otwarcie uchwytu w trybie zapisu, przekazanie danych blokami przez operacje wejścia-wyjścia oraz zatwierdzenie transakcji po poprawnym zakończeniu zapisu. Jeżeli transakcja zostanie wycofana albo uchwyt nie zostanie prawidłowo zamknięty, zapis nie powinien być traktowany jako ukończony. Aplikacja musi także obsłużyć błędy częściowego zapisu, przerwanie połączenia oraz sytuację, w której transakcja wygasa przed zakończeniem przesyłania danych. Strumieniowanie FILESTREAM nie jest tym samym co otwarcie pliku z przypadkowej ścieżki systemowej. SQL Server kontroluje dostęp na podstawie wpisu w tabeli, kontekstu transakcji i uprawnień. Funkcja Kontrola poprawności zapisu i objawy problemówPo zapisie warto sprawdzić, czy transakcja została zatwierdzona, czy wiersz zawiera oczekiwany identyfikator oraz czy długość danych zwracana przez zapytanie odpowiada przekazanemu obiektowi. Do kontroli można wykorzystać między innymi funkcję Diagnostyka obejmuje sprawdzenie definicji tabeli, obecności wymaganej kolumny ROWGUIDCOL, konfiguracji filegroup FILESTREAM, ustawień instancji SQL Server oraz uprawnień konta wykonującego operację. Nie wolno naprawiać problemu przez ręczne usuwanie, przenoszenie lub zmienianie plików w kontenerze FILESTREAM. Jeżeli dane binarne są uszkodzone albo zapis kończy się błędem, należy zachować informacje o numerze błędu SQL Server, przebiegu transakcji, rozmiarze przesyłanego obiektu i użytej metodzie dostępu, a następnie zweryfikować spójność na poziomie bazy oraz aplikacji. FILESTREAM łączy więc dwa sposoby pracy: logiczny zapis kolumny binarnej przez SQL Server i kontrolowany dostęp strumieniowy przez API Windows. W obu przypadkach źródłem prawdy pozostaje tabela oraz transakcja SQL Server, a nie katalog widoczny na dysku. Prawidłowa implementacja nie kopiuje plików bezpośrednio do kontenera, tylko korzysta z mechanizmów udostępnionych przez konkretną instancję SQL Server. |