Данните FILESTREAM не поддържат криптиране.
NTFS разрешения за достъп до контейнера FILESTREAM се предоставят само от акаунта, под който се изпълнява услугата SQL Server. Други акаунти имат разрешения за достъп до контейнера с даннипредоставянето не се препоръчва.
Интегрирано управление
Модел на двойно програмиране за достъп до BLOB данни
След като данните се съхранят в колоната FILESTREAM, файловете могат да бъдат достъпни чрез Transact-SQL транзакции или Win32 API.
Достъп с Transact-SQL
Езикът Transact-SQL ви позволява да вмъквате, актуализирате и изтривате FILESTREAM данни:
Операцията за вмъкване ви позволява да попълните предварително поле FILESTREAM с NULL стойност, празна стойност или относително малки вградени данни. Въпреки това, когато работите с големи количества данни, може да се постигне по-ефективен стрийминг с файл, който използва интерфейсите Win32.
Актуализирането на полето FILESTREAM променя основните BLOB данни във файловата система. Ако полето FILESTREAM е NULL, BLOB данните, свързани с това поле, се премахват. Актуализация на фрагмент от данни на Transact-SQL, реализирана като UPDATE**.**Конструкция Write() не може да се използва за извършване на частична актуализация на данни.
Изтриването на ред или изтриването или съкращаването на таблица, съдържаща FILESTREAM данни, изтрива основните BLOB данни във файловата система.
Поточен достъп до файловата система
Поддръжката на нишки в Win32 работи в контекста на транзакциите на SQL Server. В рамките на транзакция функциите FILESTREAM предоставят логически UNC път към файл във файловата система.OpenSqlFilestream API ви позволява да получите файлов дескриптор. След това този манипулатор може да се използва от функциите на файловия поток на Win32 катоReadFile() иWriteFile() за достъп и актуализиране на файла през файловата система.
Тъй като файловите операцииса транзакционни, не е възможно да изтриете или преименувате FILESTREAM файлове с помощта на файловата система.
Инструкция Модел
Достъпът до файловата система FILESTREAM моделира Transact-SQL израз, използвайки операции за отваряне и затваряне на файл. Тази инструкция започва, когато се отвори манипулатор на файл и завършва, когато този манипулатор се затвори. Например, когато манипулаторът на записи е затворен, всички възможни тригери AFTER, регистрирани в таблицата, се задействат, сякаш е бил издаден оператор UPDATE.
Пространство от имена за съхранение
В хранилището FILESTREAM, Database Engine управлява пространството от имена на физическата файлова система на BLOB. Нова вградена функция, PathName, предоставя логическия UNC път на BLOB, който съответства на всяка клетка FILESTREAM в таблицата. Приложението използва този логически път, за да получи манипулатор на Win32 и да работи с BLOB данни през нормалните интерфейси на файловата система Win32. Тази функция връща NULL, ако стойността на колоната FILESTREAM е NULL.
Достъп до транзакционната файлова система
Нова вградена функция, GET_FILESTREAM_TRANSACTION_CONTEXT(), връща токен, представляващ действителната транзакция, с която е свързана сесията. Тази транзакция трябва да се изпълнява, да не е прекратена и да не е ангажирана. Получаването на токен позволява на приложението да асоциира потоковите операции на файловата система FILESTREAM с изпълнявана транзакция. Тази функция връща NULL, ако няма изрично стартирана транзакция.
Преди дадена транзакция да може да бъде ангажирана или прекъсната, всички файлови дескриптори трябва да бъдат затворени. Ако манипулаторът е оставен отворен извън обхвата на транзакцията, се прилагат допълнителни четениядо тази дръжка ще се провали; допълнителни операции за запис, приложени към този манипулатор, ще успеят, но действителните данни няма да бъдат записани на диска. По същия начин, ако база данни или екземпляр на Database Engine се прекрати, всички отворени манипулатори стават невалидни.
Надеждност на транзакцията
Когато работите с FILESTREAM, докато транзакцията не бъде ангажирана, транзакционната надеждност за FILESTREAM BLOB данни, които са били модифицирани въз основа на достъп до поток от файлова система, се осигурява от Database Engine.
Семантика на изолацията
Семантиката на изолацията се контролира от нивата на изолация на транзакцията на Database Engine. За достъп до файловата система се поддържа само нивото на изолация READ COMMITTED. Повтарящите се четения и изолирането на сериализуема и моментна снимка се поддържат, когато данните от FILESTREAM се осъществяват чрез Transact-SQL. Мръсните четения не се поддържат.
Операциите за достъп до отворена файлова система не чакат никакво заключване. Вместо това отворените операции се провалят незабавно, ако данните не могат да бъдат достъпни поради изолация на транзакцията. Извикванията на API за поточно предаване са неуспешни с ERROR_SHARING_VIOLATION, ако нарушение на изолацията възпрепятства продължаването на отворената операция.
Частични актуализации
За да позволи извършването на частични актуализации, приложението може да издаде командата FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT, за да извлече старо съдържание във файл, отворен с препратка към дръжка. Това ще започне да копира старото съдържание от страната на сървъра. За да постигнете по-добра производителност на приложението и да избегнетепотенциални повреди, дължащи се на изчакване, когато работите с много големи файлове, се препоръчва използването на асинхронни I/O операции.
Ако командата FSCTL е генерирана след запис в дескриптора, последната операция за запис се запазва и резултатите от предишни записи в дескриптора се губят.
Записване от отдалечени клиенти
Отдалеченият достъп до файловата система до данните на FILESTREAM се извършва с помощта на SMB протокола. Ако клиентът е отдалечен, операциите за запис не се кешират от страната на клиента. Операциите за запис винаги се изпращат към сървъра. Кеширането на данни е възможно от страната на сървъра. В приложения, работещи на отдалечени клиенти, се препоръчва да се комбинират малки записи, за да се намали броят на записите чрез използване на по-големи данни.
Създаването на картирани в памет изгледи (картирани в памет I/O операции) с помощта на манипулатора FILESTREAM не се поддържа. Когато данните на FILESTREAM са картографирани в паметта, Database Engine не може да гарантира последователността и надеждността на данните или целостта на базата данни.
|