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

Przechowywanie danych binarnych

Termin Definicja
Przechowywanie danych binarnych

Przechowywanie danych binarnych obejmuje typy VARBINARY oraz mechanizm FILESTREAM dla dużych obiektów.

VARBINARY w strukturze tabeli SQL Server

W Microsoft SQL Server typ varbinary służy do przechowywania dowolnych danych zapisanych jako ciąg bajtów. Może zawierać między innymi zawartość pliku, wynik szyfrowania, skrót kryptograficzny, obraz dysku albo dane otrzymane z urządzenia. Silnik nie interpretuje znaczenia poszczególnych bajtów, dlatego aplikacja musi sama wiedzieć, jaki format znajduje się w danej kolumnie. W odróżnieniu od typów tekstowych wartość binarna nie jest automatycznie traktowana jako znaki w określonym kodowaniu.

W deklaracji kolumny można określić długość od 1 do 8000 bajtów, na przykład varbinary(32) dla wartości o stałym ograniczeniu rozmiaru. Zapis varbinary(max) pozwala przechowywać wartości o długości do 2 GB. Dla krótkich danych binarnych zwykła kolumna tabeli jest prostym rozwiązaniem: wartość jest zapisywana razem z rekordem i może być odczytywana w zapytaniach za pomocą standardowego języka T-SQL. Do wstawiania oraz pobierania danych używa się parametrów binarnych po stronie aplikacji, a nie ręcznie składanych literałów tekstowych.

Rozmiar wartości a sposób zapisu rekordu

Kolumna varbinary(max) nie oznacza automatycznie, że każda wartość zostanie umieszczona poza główną strukturą rekordu. SQL Server dobiera sposób przechowywania zależnie od rozmiaru danych i ustawień tabeli. Małe wartości mogą pozostać w rekordzie, natomiast większe wartości typu max mogą zostać przeniesione do dodatkowych stron danych. Z punktu widzenia aplikacji nadal jest to jedna kolumna, lecz operacje odczytu i zapisu dużych obiektów mogą wymagać większej liczby operacji wejścia-wyjścia.

Przy przechowywaniu plików w tabeli należy uwzględnić wielkość kopii zapasowych, czas wykonywania transakcji, zużycie miejsca oraz sposób pobierania danych przez aplikację. Wartość binarna jest częścią bazy danych, więc kopia tabeli i kopia bazy obejmuje także jej zawartość. Indeksowanie samego obiektu binarnego zwykle nie ma sensu, ponieważ SQL Server nie zna jego wewnętrznej struktury. Indeksy tworzy się raczej dla metadanych, takich jak identyfikator dokumentu, typ pliku, długość, data utworzenia lub suma kontrolna zapisana w osobnych kolumnach.

FILESTREAM i dostęp do dużych obiektów

FILESTREAM jest funkcją Microsoft SQL Server przeznaczoną do przechowywania dużych wartości varbinary(max) w systemie plików NTFS przy zachowaniu transakcyjnego powiązania z rekordem bazy. W tabeli znajduje się kolumna oznaczona atrybutem FILESTREAM, a baza zawiera specjalną grupę plików FILESTREAM wskazującą kontener zarządzany przez SQL Server. Aplikacja może korzystać ze zwykłego dostępu Transact-SQL albo użyć strumieniowego dostępu systemu Windows za pośrednictwem funkcji OpenSqlFilestream.

Mechanizm wymaga włączenia FILESTREAM na poziomie instancji SQL Server oraz skonfigurowania dostępu FILESTREAM dla bazy danych. Dostęp systemu plików nie powinien być realizowany przez samodzielne otwieranie plików w kontenerze, ponieważ ich położenie i cykl życia kontroluje silnik bazy. Aplikacja otrzymuje odpowiedni kontekst dostępu, zwykle na podstawie ścieżki logicznej zwróconej przez SQL Server, i wykonuje operacje w ramach właściwej transakcji. Dzięki temu zapis pliku pozostaje powiązany ze zmianą rekordu, a usunięcie lub modyfikacja danych podlega regułom transakcyjnym bazy.

Kontrola integralności danych binarnych przy serwisowaniu

Podczas diagnostyki aplikacji korzystającej z SQL Server należy sprawdzić zgodność typu kolumny z rzeczywistym zastosowaniem. Dla identyfikatora binarnego o stałej długości bardziej czytelne będzie ograniczenie rozmiaru, natomiast dla plików konieczne jest varbinary(max) albo poprawnie skonfigurowana kolumna FILESTREAM. Istotne są również limity po stronie sterownika, sposób przekazywania parametrów, obsługa wartości pustych oraz rozróżnienie między NULL a pustą wartością binarną o długości zero.

Weryfikacja obejmuje porównanie długości danych, kontrolę sum kontrolnych oraz próbę odczytu całego obiektu, a nie tylko jego fragmentu. W przypadku FILESTREAM trzeba dodatkowo sprawdzić stan grupy plików, dostęp FILESTREAM na instancji, uprawnienia konta wykonującego operację i zachowanie transakcji podczas przerwania transferu. Przy problemach z komputerem użytkownika należy rozdzielić błąd sprzętowy, na przykład niestabilne połączenie lub uszkodzenie nośnika, od błędu SQL Server polegającego na niepełnym zapisie, niezgodnym typie danych albo nieprawidłowej obsłudze strumienia.

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