Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Описывает работу FileTables с другими функциями SQL Server.
Группы доступности AlwaysOn и fileTables
Если база данных, содержащая данные FILESTREAM или FileTable, принадлежит группе доступности AlwaysOn:
Функции FileTable частично поддерживаются группами доступности AlwaysOn. После отработки отказа данные FileTable доступны на первичной реплике, но недоступны на читаемых вторичных репликах.
Замечание
Обратите внимание, что после переключения при отказе поддерживается вся функциональность FILESTREAM. Данные FILESTREAM доступны как на вторичных репликах с возможностью чтения, так и на новой первичной.
Функции FILESTREAM и FileTable принимают или возвращают имена виртуальной сети, а не имена компьютеров. Дополнительные сведения об этих функциях см. в разделе Filestream и FileTable Functions (Transact-SQL).
При доступе к данным FILESTREAM или FileTable с использованием API файловой системы следует использовать VNN вместо имен компьютеров. Дополнительные сведения см. в разделе FILESTREAM и FileTable с группами доступности AlwaysOn (SQL Server).
Секционирование и таблицы FileTable
Секционирование не поддерживается в FileTables. Благодаря поддержке нескольких групп файлов FILESTREAM можно обрабатывать чистые проблемы масштабирования без необходимости выполнять секционирование в большинстве сценариев (в отличие от SQL 2008 FILESTREAM).
Репликация и FileTables
Репликация и связанные функции (включая репликацию транзакций, репликацию слиянием, запись изменений и отслеживание изменений) не поддерживаются в FileTables.
Семантика транзакций и таблицы FileTable
Приложения Windows
Приложения Windows не понимают транзакции базы данных, поэтому операции записи Windows не предоставляют свойства ACID транзакции базы данных. Поэтому с операциями обновления Windows невозможно выполнить откат транзакций и восстановление.
приложенияTransact-SQL
Для приложений TSQL, работающих с столбцом FILESTREAM (file_stream) в FileTable, семантика изоляции совпадает с типом данных FILESTREAM в обычной пользовательской таблице.
Уведомления запросов и таблицы FileTable
Запрос не может содержать ссылку на столбец FILESTREAM в FileTable, в предложении WHERE или любой другой части запроса.
SELECT INTO и FileTables
Инструкции SELECT INTO из FileTable не будут распространять семантику FileTable в созданной целевой таблице (так же, как столбцы FILESTREAM в обычной таблице). Все столбцы целевой таблицы будут вести себя так же, как обычные столбцы. Они не будут связаны с семантикой FileTable.
Триггеры и FileTables
Триггеры DDL (язык определения данных)
Для триггеров DDL с помощью FileTable нет особых соображений. Обычные триггеры DDL будут запускаться для операций создания и изменения базы данных, а также операций CREATE/ALTER TABLE для FileTables. Триггеры могут получить фактические данные о событиях, которые включают текст команды DDL и другие сведения, вызвав функцию EVENTDATA(). Новые события или изменения существующей схемы Eventdata отсутствуют.
Триггеры DML (язык обработки данных)
Эти ограничения будут применяться во время операции DDL для создания триггеров.
FileTables не поддерживает триггеры INSTEAD OF для операций DML. Это существующее ограничение для всех таблиц, содержащих столбцы FILESTREAM.
FileTables будет поддерживать триггеры AFTER для операций DML.
Триггеры, определенные в FileTable, не могут обновлять любые таблицы FileTable (включая родительскую таблицы FileTable). Это ограничение существует главным образом, чтобы запретить триггеру попасть в конфликты блокировки с блокировками, удерживаемыми доступом к файловой системе в той же транзакции.
Не транзакционный доступ и его влияние на триггеры
Если доступ к обновлению без транзакций разрешен в базе данных, можно выполнить обновление данных FILESTREAM на месте в любой таблице, включая FileTable в этой базе данных. В связи с этой возможностью предыдущее состояние содержимого FILESTREAM может быть недоступно для использования триггером.
Для операций обновления без транзакций с помощью файловой системы SQL Server создаст внутреннюю транзакцию для записи операции CloseHandle и любые определенные триггеры DML могут быть запущены в рамках этой транзакции. Отмена такой транзакции в теле триггера, хотя и не запрещена, не отменяет изменения, внесенные в FILESTREAM. Такой откат также может помешать срабатыванию триггеров обновления, даже если содержимое FILESTREAM было изменено.
Помимо этих последствий, триггеры в FileTables должны иметь дело с несколькими дополнительными поведениями.
В случае операций обновления без транзакций в FileTable через файловую систему возможно, что содержимое FILESTREAM может быть заблокировано исключительно другими операциями Win32 и может быть недоступно для чтения и записи через тело триггера. В таких случаях любая попытка получить доступ к содержимому FILESTREAM в теле триггера может привести к ошибке "Нарушение общего доступа". Триггеры должны быть разработаны для правильной обработки таких ошибок.
Файл образа FILESTREAM может быть нестабильным, так как в некоторых случаях на него могут одновременно записываться нетранзакционные обновления (из-за разрешенных режимов общего доступа в файловой системе).
Ненормальное завершение дескрипторов Win32, например, принудительное завершение дескрипторов Win32 администратором или сбой базы данных, не будет выполнять триггеры пользователей во время операций восстановления, даже если содержимое FILESTREAM было изменено приложением Win32, которое завершилось ненормально.
Представления и таблицы FileTable
Взгляды
Представление можно создать в FileTable как в любой другой таблице. Однако следующие рекомендации относятся к представлению, созданному в FileTable:
Представление не будет иметь семантику FileTable. т. е. столбцы в представлении (включая столбцы атрибутов файла) ведут себя так же, как обычные столбцы представления без специальной семантики и одинаковы для строк, представляющих файлы и каталоги.
Представление может быть обновлено на основе семантики "обновляемого представления", но базовые ограничения таблицы могут отклонять обновления так же, как и в таблице.
Путь к файлу можно визуализировать в представлении, добавив его в виде явного столбца в представлении. Рассмотрим пример.
CREATE VIEW MP3FILES AS SELECT column1, column2, ..., GetFileNamespacePath() AS PATH, column3,... FROM Documents
Индексированные представления
В настоящее время индексированные представления не могут включать столбцы FILESTREAM или вычисляемые или сохраненные вычисляемые столбцы, зависящие от столбцов FILESTREAM. Это поведение также остается неизменным для представлений, определенных в FileTable.
Изоляция моментальных снимков и FileTables
Изоляция моментальных снимков чтения (RCSI) и изоляция моментальных снимков (SI) зависят от возможности создания моментального снимка данных, доступных для читателей, даже если операции обновления происходят на данных. Однако FileTables разрешает доступ к данным Filestream без транзакций. В результате следующие ограничения применяются к использованию этих функций в базах данных, содержащих FileTables:
Базу данных, содержащую таблицы FileTable, можно изменить, чтобы включить RCSI/SI.
Если non_transactional доступ установлен в FULL для базы данных, то транзакция, запущенная в RCSI или SI, имеет следующее поведение:
Все попытки считывания столбца FileTable file_stream с кодом Transact-SQL завершаются неудачей. INSERT и UPDATE в столбце по-прежнему выполняются успешно, если они не считываются из столбца file_stream.
Если инструкция Transact-SQL содержит подсказки таблицы READCOMMITTEDLOCK, операции чтения завершаются успешно и блокируют строки, а не используют версионность строк.
Кроме того, не удается выполнить открытые запросы Win32 FileStream.
Доступ к FileTable Win32 без транзакций проходит успешно. Все внутренние запросы, выполненные FileTable, не затрагиваются.
Полнотекстовое индексирование всегда выполняется успешно, независимо от параметров базы данных (READ_COMMITTED_SNAPSHOT или ALLOW_SNAPSHOT_ISOLATION).
Вторичные базы данных для чтения
Те же рекомендации применяются к читаемым вторичным базам данных, что и к моментальным снимкам, как описано в предыдущем разделе, изоляция моментальных снимков и таблицы FileTable.
Содержащиеся базы данных и таблицы FileTable
Возможность FILESTREAM, от которой зависят FileTable, требует некоторой настройки вне базы данных. Поэтому база данных, использующая FILESTREAM или FileTable, не является полностью автономной.
Вы можете задать для хранения базы данных значение PARTIAL, если вы хотите использовать определенные функции содержащихся баз данных, например содержащихся пользователей. Однако в этом случае необходимо знать, что некоторые параметры базы данных не содержатся в базе данных и не перемещаются автоматически при перемещении базы данных.