Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:SQL Server
Как работает файловая система ввода-вывода на FileTable.
Начало использования API-интерфейсов файлового ввода-вывода с таблицами FileTable
Предполагается, что таблицы FileTable в первую очередь будут использоваться через файловую систему Windows и API-интерфейсы файлового ввода-вывода. Таблицы FileTable поддерживают нетранзакционный доступ с помощью широкого набора API-интерфейсов файлового ввода-вывода.
Доступ к API файлового ввода-вывода обычно начинается с получения логического UNC-пути к файлу или каталогу. Приложения могут использовать инструкцию Transact-SQL с функцией GetFileNamespacePath (Transact-SQL), чтобы получить логический путь к файлу или каталогу. Дополнительные сведения см. в статье Work with Directories and Paths in FileTables.
Затем приложение использует этот логический путь для получения дескриптора файла или каталога и совершения каких-либо действий с объектом. Путь может быть передан в любую из поддерживаемых функций API файловой системы, например, CreateFile() или CreateDirectory(), для создания или открытия файла и получения дескриптора. Затем дескриптор может использоваться для потоковой передачи данных, перечисления или упорядочивания каталогов, получения или задания атрибутов файлов, удаления файлов или каталогов и т. д.
Создание файлов и каталогов в таблице FileTable
Файл или каталог в таблице FileTable можно создать путем вызова таких API-интерфейсов файлового ввода-вывода, как CreateFile или CreateDirectory.
Поддерживаются все флаги создания, режимы совместного использования и режимы доступа. Поддерживаются создание, удаление и изменение файлов на месте. Также поддерживаются операции обновления пространств имен, например создание и удаление, переименование и перемещение каталогов.
Создание нового файла или каталога соответствует созданию новой строки в базовой таблице FileTable.
Для файлов потоковые данные хранятся в столбце file_stream , в то время как для каталогов этот столбец содержит значение null.
Для файлов столбец is_directory содержит значение false. Для каталогов этот столбец содержит значение true.
Совместное использование и параллелизм доступа применяются, если несколько параллельных операций ввода-вывода файлов или операций Transact-SQL влияют на один файл или каталог в иерархии.
Чтение файлов и каталогов в таблице FileTable
Семантика изоляции Read Committed применена в SQL Server для обеспечения работы всех операций ввода-вывода с файлами при доступе к поточным данных и данным атрибутов.
Запись и обновление файлов и каталогов в таблице FileTable
Все операции записи и обновления файлового ввода-вывода в таблице FileTable являются нетранзакционными. То есть транзакция SQL Server не привязана к этим операциям, и гарантии ACID не предоставляются.
Для таблицы FileTable поддерживаются все потоковые обновления и обновления на месте при файловом вводе-выводе.
При обновлении данных FILESTREAM или атрибутов с помощью API-интерфейсов файлового ввода-вывода обновляются соответствующие столбцы file_stream и столбцы атрибутов файлов в таблицах FileTable.
Удаление файлов и каталогов в таблице FileTable
При удалении файла или каталога применяется вся семантика API-интерфейсов файлового ввода-вывода Windows.
При удалении каталога происходит сбой, если каталог содержит файлы или вложенные каталоги.
При удалении файла или каталога удаляется соответствующая строка из таблицы FileTable. Это эквивалентно удалению строки с помощью операции Transact-SQL.
Поддерживаемые операции файловой системы
Таблицы FileTable поддерживают API-интерфейсы файловой системы, связанные со следующими операциями файловой системы:
Управление каталогом
Управление файлами
Таблицы FileTable не поддерживают следующие операции:
Управление дисками
Управление томами
Транзакционная NTFS
Дополнительные соображения при доступе файлового ввода-вывода к таблицам FileTable
Использование имен виртуальной сети (VNN) с группами доступности Always On
Если база данных, содержащая данные FILESTREAM или FileTable, принадлежит к группе доступности Always On, то любой доступ к данным FILESTREAM или FileTable через API-интерфейсы файловой системы должен осуществляться по виртуальным сетевым именам, а не по именам компьютеров. Дополнительные сведения см. в разделе FILESTREAM и FileTable с группами доступности AlwaysOn (SQL Server).
Частичные обновления
Дескриптор с возможностью записи, полученный для данных FILESTREAM в FileTable с помощью функции GetFileNamespacePath (Transact-SQL), можно использовать для частичных обновлений содержимого FILESTREAM на месте. Это отличается от транзакционного доступа к данным FILESTREAM с помощью дескриптора, полученного путем вызова OpenSQLFILESTREAM() и передачи явного контекста транзакции.
Семантика транзакций
При доступе к файлам в таблице FileTable с помощью API-интерфейсов файлового ввода-вывода эти операции не связаны с какими-либо пользовательскими транзакциями и имеют следующие дополнительные характеристики.
Поскольку нетранзакционный доступ к данным FILESTREAM в таблице FileTable не связан с какой-либо транзакцией, у него нет какой-либо особой семантики изоляции. Однако SQL Server может использовать внутренние транзакции для принудительной блокировки или семантики параллелизма в данных FileTable. Любые внутренние транзакции данного типа осуществляются с изоляцией *read-committed*.
Для таких нетранзакционных операций с данными FILESTREAM нет гарантий ACID. Гарантии согласованности сходны с таковыми при обновлении файлов, выполняемым приложениями в файловой системе.
Эти изменения нельзя откатить.
Однако к столбцу FILESTREAM в таблице FileTable также можно получить транзакционный доступ FILESTREAM путем вызова OpenSqlFileStream(). Этот вид доступа может быть полностью транзакционным и будет поддерживать все уровни транзакционной согласованности, предлагаемые в настоящий момент.
Управление параллелизмом
SQL Server применяет управление параллелизмом для доступа к FileTable среди приложений файловой системы, а также между приложениями файловой системы и приложениями Transact-SQL. Такое управление параллелизмом обеспечивается путем создания соответствующих блокировок для строк FileTable.
Триггеры
Создание, изменение и удаление файлов, каталогов или их атрибутов в файловой системе приведет к соответствующим операциям вставки, обновления и удаления в таблице FileTable. Все связанные триггеры DML Transact-SQL запускаются в рамках этих операций.
Функции файловой системы, поддерживаемые в таблицах FileTable
Возможность | Поддерживается | Комментарии |
---|---|---|
Операционные блокировки | Да | Поддерживаются операционные блокировки уровня 2, уровня 1, пакетные операционные блокировки и операционные блокировки фильтров. |
Расширенные атрибуты | Нет | |
Точки повторного анализа | Нет | |
Постоянные ACL | Нет | |
Именованные потоки | Нет | |
Разреженные файлы | Да | Разреженность можно задавать только для файлов, и она влияет на способ хранения потока данных. Поскольку данные FILESTREAM хранятся на томах NTFS, функции FileTable поддерживают разреженные файлы, перенаправляя запросы в файловую систему NTFS. |
Сжатие | Да | |
Шифрование | Да | |
TxF | Нет | |
Идентификаторы файлов | Нет | |
Идентификаторы объектов | Нет | |
Символические ссылки | Нет | |
Жесткие связи | Нет | |
Краткие имена | Нет | |
Уведомления об изменении каталога | Нет | |
Блокировка диапазона байтов | Да | Запросы блокировки диапазона байтов передаются в файловую систему NTFS. |
Файлы, отображенные в памяти | Нет | |
Отмена ввода-вывода | Да | |
Безопасность | Нет | Безопасность на уровне доступа к общим ресурсам Windows и безопасность на уровне таблиц и столбцов SQL Server обеспечиваются. |
Журнал USN | Нет | Изменения метаданных в файлах и каталогах в FileTable — это операции DML в базе данных SQL Server. Поэтому они записываются в соответствующий файл журнала базы данных. Однако они не регистрируются в журнале USN файловой системы NTFS (за исключением изменения размера). Возможности отслеживания изменений SQL Server можно использовать для сбора аналогичных сведений. |
См. также
Загрузка файлов в таблицы FileTable
Работа с каталогами и путями в FileTables
Доступ к таблицам FileTable с помощью Transact-SQL
DDL-инструкции FileTable, функции, хранимые процедуры и представления