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

Obsługa danych binarnych

Termin Definicja
Obsługa danych binarnych

Obsługa danych binarnych to przechowywanie plików i strumieni bajtów w typach VARBINARY lub przez mechanizm FILESTREAM.

Zakres pojęcia danych binarnych w SQL Server

Obsługa danych binarnych oznacza przechowywanie informacji, których nie interpretuje się jako tekstu według określonego kodowania znaków. Przykładami są dokumenty PDF, obrazy, archiwa, pliki audio, pliki wideo, kopie dokumentów oraz inne sekwencje bajtów. W SQL Server podstawowym typem do przechowywania takich wartości jest varbinary. Typ ten przechowuje zmienną liczbę bajtów, a jego odmiana varbinary(max) jest przeznaczona dla większych danych binarnych.

Kolumna varbinary(max) może przechowywać zarówno krótką wartość binarną, jak i zawartość całego pliku. SQL Server nie rozpoznaje jednak samodzielnie, czy dana sekwencja bajtów jest zdjęciem, dokumentem czy archiwum. Informacja o formacie może być przechowywana osobno, na przykład w kolumnie tekstowej zawierającej rozszerzenie lub typ MIME, ale nie zmienia to sposobu przechowywania samej zawartości. Przy zapisie i odczycie należy zachować kolejność oraz dokładną wartość wszystkich bajtów.

VARBINARY i granice przechowywania w kolumnie

Wybór typu varbinary(max) pozwala przechowywać dane o rozmiarze większym niż limit zwykłego varbinary(n), gdzie n określa maksymalną liczbę bajtów kolumny. Dla varbinary(max) maksymalny rozmiar wartości wynosi 2^31-1 bajtów, czyli 2 147 483 647 bajtów. Jest to limit pojedynczej wartości tego typu, a nie całkowity limit wszystkich danych binarnych w tabeli. Rzeczywisty rozmiar tabeli zależy również od liczby rekordów, indeksów i pozostałych kolumn.

Dane binarne można zapisywać oraz odczytywać za pomocą instrukcji języka T-SQL, tak samo jak inne wartości kolumn. W zapytaniach przydatne są między innymi funkcje DATALENGTH, zwracająca długość wartości w bajtach, oraz SUBSTRING, umożliwiająca pobranie fragmentu danych binarnych. Do porównywania lub kontroli integralności można stosować funkcje skrótu, ale skrót nie zastępuje oryginalnej zawartości. Należy także odróżniać wartość pustą od NULL: pusty ciąg binarny ma długość zero, natomiast NULL oznacza brak wartości.

FILESTREAM dla dużych plików i dostępu strumieniowego

FILESTREAM jest funkcją SQL Server przeznaczoną do przechowywania danych typu varbinary(max) w systemie plików NTFS, przy zachowaniu transakcyjnego powiązania z rekordem w bazie danych. W tym modelu tabela zawiera kolumnę oznaczoną atrybutem FILESTREAM, a baza danych korzysta z określonego kontenera danych FILESTREAM. Z punktu widzenia modelu danych zawartość nadal należy do rekordu SQL Server, ale fizyczne przechowywanie dużego obiektu odbywa się poza standardowymi stronami danych tabeli.

Dostęp do zawartości FILESTREAM może odbywać się przez zwykłe mechanizmy SQL Server albo przez interfejs strumieniowy Win32. Do uzyskania uchwytu używa się funkcji OpenSqlFilestream, która wymaga między innymi ścieżki zwróconej przez funkcję PathName() oraz tokenu kontekstu pliku. Operacja musi być związana z odpowiednią transakcją, ponieważ SQL Server kontroluje zgodność dostępu do pliku ze stanem rekordu. Bez prawidłowego kontekstu transakcyjnego bezpośrednie operacje na kontenerze FILESTREAM nie są równoważne bezpiecznemu odczytowi lub zapisowi przez SQL Server.

Sprawdzanie integralności i diagnozowanie problemów z plikami

Diagnostyka danych binarnych powinna obejmować kilka niezależnych elementów: długość wartości, możliwość odczytu całego strumienia, zgodność metadanych z rzeczywistą zawartością oraz poprawność zapisu i odczytu w ramach transakcji. Jeżeli pobrany plik ma długość zero, może to oznaczać pustą wartość, błędne mapowanie kolumny albo niepełne pobranie danych. Jeżeli długość jest prawidłowa, lecz aplikacja nie otwiera pliku, przyczyną może być uszkodzenie struktury pliku, niezgodność rozszerzenia z zawartością albo błąd po stronie aplikacji przetwarzającej bajty.

W przypadku FILESTREAM należy dodatkowo sprawdzić konfigurację funkcji na poziomie instancji SQL Server, włączenie FILESTREAM dla konkretnej bazy danych, istnienie kolumny FILESTREAM oraz poprawne wskazanie kontenera danych. Nie powinno się modyfikować plików bezpośrednio w katalogu kontenera, ponieważ SQL Server zarządza ich powiązaniem z rekordami i transakcjami. Przy podejrzeniu utraty lub zmiany zawartości pomocne jest porównanie długości danych oraz kontrolnego skrótu obliczonego przed zapisem i po odczycie. W środowisku z laptopem lub komputerem PC problem może dotyczyć także dysku, systemu plików, sterownika, aplikacji klienckiej albo połączenia z bazą, dlatego sama obecność kolumny varbinary nie wskazuje jeszcze źródła usterki.

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