Поделиться через


Совместимость FileTable с другими компонентами SQL Server

Описывает, как FileTable работает с другими функциями SQL Server.

В этом разделе

  • Группы доступности AlwaysOn и таблицы FileTable

  • Секционирование и таблицы FileTable

  • Репликация и таблицы FileTable

  • Семантика транзакций и таблицы FileTable

  • Уведомления о запросах и таблицы FileTable

  • Инструкция SELECT INTO и таблицы FileTable

  • Триггеры и таблицы FileTable

  • Представления и таблицы FileTable

  • Изоляция моментального снимка и таблицы FileTable

  • Базы данных-получателей только для чтения

  • Автономные базы данных и таблицы FileTable

Группы доступности AlwaysOn и таблицы FileTable

Если база данных, содержащая данные FILESTREAM или FileTable, принадлежит группе доступности:

  • Функции FileTable частично поддерживаются Группы доступности AlwaysOn. После отработки отказа данные FileTable будут доступны в первичной реплике, при этом они не будут доступны на вторичных репликах, из которых можно выполнять чтение.

    ПримечаниеПримечание

    Обратите внимание на то, что после отработки отказа поддерживаются все функции FILESTREAM. Данные FILESTREAM доступны как в доступных для чтения вторичных репликах, так и в новой первичной реплике.

  • Функции FILESTREAM и FileTable принимают или возвращают имена виртуальной сети, а не имена компьютеров. Дополнительные сведения об этих функциях см. в разделе Функции Filestream и FileTable (Transact-SQL).

  • При осуществлении любого доступа к данным FILESTREAM или FileTable посредством API-интерфейса файловой системы будут использоваться имена виртуальной сети, а не имена компьютеров. Дополнительные сведения см. в разделе FILESTREAM и FileTable с группами доступности AlwaysOn (SQL Server).

[В начало]

Секционирование и таблицы FileTable

Секционирование таблиц FileTable не поддерживается. При поддержке нескольких файловых групп FILESTREAM в большинстве случаев чистые проблемы масштабирования можно решать без использования секционирования (в отличие от файловых групп FILESTREAM в SQL 2008).

[В НАЧАЛО]

Репликация и таблицы FileTable

Репликация и связанные с ней функции (включая репликацию транзакций, репликацию слиянием, отслеживание измененных данных и изменений) для таблиц FileTable не поддерживаются.

[В НАЧАЛО]

Семантика транзакций и таблицы FileTable

  • приложения Windows
    Приложения Windows не распознают транзакции базы данных, поэтому операции записи в Windows не предоставляют свойства ACID транзакций базы данных. Поэтому операции обновления в Windows не позволяют выполнять откат транзакций и восстановление.

  • Приложения Transact-SQL
    Для приложений TSQL, работающих со столбцом FILESTREAM (file_stream) в таблице FileTable, семантика изоляции совпадает с семантикой типа данных FILESTREAM в обычной пользовательской таблице.

[В НАЧАЛО]

Уведомления о запросах и таблицы FileTable

Запрос не может содержать ссылку на столбец FILESTREAM в таблице FileTable ни в предложении WHERE, ни в какой-либо другой части запроса.

[В НАЧАЛО]

Инструкция SELECT INTO и таблицы FileTable

При использовании инструкций SELECT INTO в таблице FileTable семантика FileTable не распространяется на созданную целевую таблицу (как и в случае со столбцами FILESTREAM в обычной таблице). Все столбцы целевой таблицы будут вести себя как обычные столбцы. У них не будет никакой связанной семантики FileTable.

[В НАЧАЛО]

Триггеры и таблицы FileTable

  • Триггеры языка описания данных (DDL)
    В работе триггеров DDL с таблицами FileTable нет никаких особенностей. Обычные триггеры DDL срабатывают для операций CREATE или ALTER DATABASE, а также для операций CREATE или ALTER TABLE для таблиц FileTable. С помощью вызова функции EVENTDATA() триггеры могут получать фактические данные событий, включая текст команды DDL и другие сведения. Новых событий или изменений в существующей схеме Eventdata нет.

  • Триггеры языка обработки данных (DML)
    При выполнении операции DDL по созданию триггеров будут действовать следующие ограничения.

    • Таблицы FileTable НЕ поддерживают триггеры INSTEAD OF для операций DML. Это существующее ограничение для всех таблиц, содержащих столбцы FILESTREAM.

    • Таблицы FileTable будут поддерживать триггеры AFTER для операций DML.

    • Триггеры, определенные для таблицы FileTable, не могут обновлять какие-либо таблицы FileTable (включая родительскую таблицу FileTable). Это ограничение предназначено в первую очередь для предотвращения конфликтов блокировки триггера с блокировками файловой системы в одной транзакции.

  • Нетранзакционный доступ и его влияние на триггеры

    • Если в базе данных разрешен нетранзакционный доступ для обновления, можно выполнить обновление данных FILESTREAM на месте в любой таблице, в том числе в таблице FileTable в этой базе данных. В результате этого исходный образ содержимого FILESTREAM может оказаться недоступным для использования триггерами.

    • Для нетранзакционных операций обновления в файловой системе SQL Server будет создавать внутреннюю транзакцию для перехвата операции CloseHandle и все определенные триггеры DML будут срабатывать в рамках этой транзакции. Откат транзакции в тексте триггера возможен, но откатить изменения в FILESTREAM нельзя. Этот откат также может предотвратить срабатывание триггеров UPDATE, даже если содержимое FILESTREAM будет изменено.

    • Наряду с такими особенностями, для триггеров в таблицах FileTable следует предусматривать две дополнительные возможности.

      • В случае нетранзакционных операций обновления таблицы 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.

[В НАЧАЛО]

Изоляция моментальных снимков и таблицы FileTable

Изоляция моментальных снимков READ COMMITTED (RCSI) и изоляция моментальных снимков (SI) зависят от возможности иметь моментальный снимок данных, доступный для модулей чтения, даже во время обновления данных. Тем не менее таблицы FileTable позволяют осуществлять нетранзакционный доступ на запись к данным FILESTREAM. В результате на использование этих функций в базах данных, содержащих таблицы FileTable, накладываются следующие ограничения.

  • В базе данных, содержащей таблицы FileTable, может быть включена изоляция RCSI/SI.

  • Если для базы данных установлен нетранзакционный доступ уровня FULL, то транзакция выполняется в режиме RCSI или SI. Последняя имеет следующие особенности.

    • Все Transact-SQL-операции чтения столбца file_stream в таблице FileTable будут завершаться ошибкой. Операции INSERT и UPDATE для столбца будут успешными только в том случае, если они не выполняются со столбцом file_stream.

    • Если в запросе Transact-SQL указаны табличные подсказки READCOMMITTEDLOCK, то операции чтения будут выполняться успешно и получать блокировки строк, а не использовать управление версиями строк.

    • Транзакционная операция Win32 по открытию FILESTREAM также завершится ошибкой.

    • Нетранзакционный доступ Win32 к таблице FileTable будет выполнен успешно. Все внутренние запросы, выполненные со стороны таблицы FileTable, не затрагиваются.

    • Полнотекстовое индексирование всегда будет успешной независимо от параметров базы данных (READ_COMMITTED_SNAPSHOT или ALLOW_SNAPSHOT_ISOLATION).

[В начало]

Базы данных-получателей только для чтения

Те же рекомендации, что и для моментальных снимков, применяются для баз данных-получателей только для чтения, в соответствии с описанием в предыдущем разделе Изоляция моментальных снимков и таблицы FileTables.

Автономные базы данных и таблицы FileTable

Для компонента FILESTREAM, от которого зависит функциональность FileTable, требуется выполнение определенной настройки вне базы данных. Поэтому база данных, использующая FILESTREAM или FileTable, не является полностью автономной.

Для автономности базы данных можно установить значение PARTIAL при необходимости использовать некоторые функции автономных баз данных, например такие, как функция автономных пользователей. В этом случае следует иметь в виду, что некоторые параметры базы данных не хранятся в самой базе данных и не перемещаются автоматически при перемещении базы данных.

[В начало]

См. также

Основные понятия

Управление таблицами FileTable