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


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

Описывает стандартные административные задачи по управлению таблицами FileTables.

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

Необходимо...

  • Получить список таблиц FileTable и связанных объектов

  • Отключить и снова включить нетранзакционный доступ на уровне базы данных

    • Как отключить и снова включить нетранзакционный доступ на уровне базы данных

    • Как обеспечить видимость таблиц FileTables в базе данных

  • Отключить и снова включить пространство имен FileTable на уровне таблицы

    • Как отключить и снова включить пространство имен FileTable на уровне таблицы
  • уничтожить открытые дескрипторы файлов, связанные с таблицей FileTable

    • Как получить список открытых дескрипторов файлов, связанных с таблицей FileTable

    • Как уничтожить открытые дескрипторы файлов, связанные с таблицей FileTable

    • Как определить блокировки, имеющиеся в таблицах FileTable

Дополнительные сведения

  • Безопасность таблицы FileTable

  • Резервное копирование и таблицы FileTable

  • Приложение SQL Server Profiler и таблицы FileTable

  • Аудит и таблицы FileTable

  • DBCC и таблицы FileTable

Как получить список таблиц FileTable и связанных объектов

Чтобы получить список таблиц FileTable, выполните запрос к одному из следующих представлений каталогов:

SELECT * FROM sys.filetables;
GO

SELECT * FROM sys.tables WHERE is_filetable = 1;
GO

Чтобы получить список системных объектов, которые были созданы при создании связанных таблиц FileTable, выполните запрос к представлению каталога sys.filetable_system_defined_objects (Transact-SQL).

SELECT object_id, OBJECT_NAME(object_id) AS 'Object Name'
    FROM sys.filetable_system_defined_objects
    WHERE object_id = filetable_object_id;
GO

[В НАЧАЛО]

Отключить и снова включить нетранзакционный доступ на уровне базы данных

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

Поведение инструкции ALTER DATABASE при изменении уровня нетранзакционного доступа

  • В случае задания для нетранзакционного доступа значения READ_ONLY или OFF команда ALTER DATABASE не возвращает управление пользователю, пока имеются открытые дескрипторы файлов, конфликтующие с запрошенной операцией. Дескрипторы файлов, которые конфликтуют с этой операцией:

    • Если доступ установлен в режим NONE, то все открытые дескрипторы файлов.

    • Если доступ установлен в режим READ_ONLY, все дескрипторы файлов, открытых для записи.

    Сведения об уничтожении открытых дескрипторов файлов см. в подразделе Уничтожение открытых дескрипторов файлов, связанных с таблицей FileTable этого раздела.

    Если команда ALTER DATABASE отменяется или истекает ее время ожидания, уровень транзакционного доступа изменен не будет.

  • При вызове инструкции ALTER DATABASE с предложением WITH <termination> (ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT) все открытые нетранзакционные дескрипторы файлов будут уничтожены.

ПредупреждениеВнимание!

При уничтожении открытых дескрипторов файлов пользователи могут потерять несохраненные данные. Такое поведение согласуется с поведением самой файловой системы.

Последствия отключения нетранзакционного доступа

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

  • Если доступ установлен в режим NONE, все каталоги FileTable и их содержимое становятся недоступными и невидимыми.

  • Если доступ установлен в режим READ_ONLY, все каталоги FileTable и их содержимое доступны только для чтения.

Отключение FILESTREAM на уровне экземпляра оказывает следующее влияние на каталоги уровня базы данных этого экземпляра и вложенные в них каталоги FileTable.

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

[В НАЧАЛО]

Как отключить и снова включить нетранзакционный доступ на уровне базы данных

Дополнительные сведения см. в разделе Параметры ALTER DATABASE SET (Transact-SQL).

  • Отключение полного нетранзакционного доступа
    Вызовите инструкцию ALTER DATABASE и задайте параметру NON_TRANSACTED_ACCESS значение READ_ONLY или OFF.

    -- Disable write access.
    ALTER DATABASE database_name
        SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );
    GO
    
    -- Disable non-transactional access.
    ALTER DATABASE database_name
        SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );
    GO
    
  • Повторное включение полного нетранзакционного доступа
    Вызовите инструкцию ALTER DATABASE и задайте параметру NON_TRANSACTED_ACCESS значение FULL.

    ALTER DATABASE database_name
        SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );
    GO
    

[В НАЧАЛО]

Как обеспечить видимость таблиц FileTables в базе данных

Каталог уровня базы данных и находящиеся в нем каталоги FileTable отображаются при соблюдении всех следующих условий.

  1. Функция FILESTREAM включена на уровне экземпляра.

  2. Нетранзакционный доступ включен на уровне базы данных.

  3. На уровне базы данных указан допустимый каталог.

Отключение и повторное включение пространства имен FileTable на уровне таблицы

При отключении пространства имен FileTable отключаются все системные ограничения и триггеры, созданные в таблице FileTable. Это полезно в случаях, когда требуется значительная реорганизация таблицы FileTable с помощью операций Transact-SQL без дополнительных затрат на применение семантики FileTable. Но это может привести к несогласованному состоянию таблицы FileTable, что может не позволить снова включить пространство имен FileTable.

Отключение пространства имен FileTable имеет следующие результаты.

  • Столбцы и данные FileTable не будут физически удалены из таблицы.

  • Каталог таблицы FileTable, а также содержащиеся в нем файлы и каталоги удаляются из файловой системы и становятся недоступными для файлового ввода-вывода.

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

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

  • Действие семантики FileTable, включая системные ограничения и триггеры, прекращается после отключения пространства имен FileTable.

Повторное включение пространства имен FileTable имеет следующие результаты.

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

  • Действие семантики FileTable, включая системные ограничения и триггеры, будет восстановлено.

  • Каталог таблицы FileTable, а также содержащиеся в нем файлы и каталоги появляются в файловой системе и становятся доступными для файлового ввода-вывода.

[В НАЧАЛО]

Как отключить и снова включить пространство имен FileTable на уровне таблицы

Вызовите инструкцию ALTER TABLE с параметром { ENABLE | DISABLE } FILETABLE_NAMESPACE.

  • Отключение пространства имен FileTable

    ALTER TABLE filetable_name
        DISABLE FILETABLE_NAMESPACE;
    GO
    
  • Повторное включение пространства имен FileTable

    ALTER TABLE filetable_name
        ENABLE FILETABLE_NAMESPACE;
    GO
    

[В НАЧАЛО]

Уничтожение открытых дескрипторов файлов, связанных с таблицей FileTable

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

ПредупреждениеВнимание!

При уничтожении открытых дескрипторов файлов пользователи могут потерять несохраненные данные. Такое поведение согласуется с поведением самой файловой системы.

[В НАЧАЛО]

Как получить список открытых дескрипторов файлов, связанных с таблицей FileTable

Выполните запрос к представлению каталога sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;
GO

[В НАЧАЛО]

Как уничтожить открытые дескрипторы файлов, связанные с таблицей FileTable

Чтобы уничтожить все открытые дескрипторы файлов в базе данных или в таблице FileTable либо конкретный дескриптор, вызовите хранимую процедуру sp_kill_filestream_non_transacted_handles (Transact-SQL).

USE database_name;

-- Kill all open handles in all the filetables in the database.
EXEC sp_kill_filestream_non_transacted_handles;
GO

-- Kill all open handles in a single filetable.
EXEC sp_kill_filestream_non_transacted_handles @table_name = 'filetable_name';
GO

-- Kill a single handle.
EXEC sp_kill_filestream_non_transacted_handles @handle_id = integer_handle_id;
GO

[В НАЧАЛО]

Как определить блокировки, имеющиеся в таблицах FileTable

Большинство блокировок в таблице FileTable связано с файлами, открытыми приложениями.

  • Определение открытых файлов и связанных с ними блокировок
    Объедините поле request_owner_id динамического административного представления sys.dm_tran_locks (Transact-SQL) с полем fcb_id динамического административного представления sys.dm_filestream_non_transacted_handles (Transact-SQL). В некоторых случаях блокировка связана с несколькими открытыми файлами.

    SELECT opened_file_name
        FROM sys.dm_filestream_non_transacted_handles
        WHERE fcb_id IN
            ( SELECT request_owner_id FROM sys.dm_tran_locks );
    GO
    

[В начало]

Безопасность таблицы FileTable

Файлы и каталоги, хранящиеся в таблицах FileTable, защищаются только средствами безопасности SQL Server. Средства безопасности на уровне таблицы и столбцов применяются для доступа файловой системы, а также для доступа Transact-SQL. API-интерфейсы безопасности файловой системы Windows и параметры ACL не поддерживаются.

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

  • Безопасность FileTable и доступ Transact-SQL
    Защита доступа Transact-SQL к данным из таблицы FileTable обеспечивается так же, как и защита доступа к любой другой таблице. Соответствующие проверки безопасности на уровне таблицы и столбца выполняются для каждой операции, которая производит доступ или изменение данных.

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

[В начало]

Резервное копирование и таблицы FileTable

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

Согласованность транзакций резервных копий таблиц FileTable

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

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

[В начало]

Приложение SQL Server Profiler и таблицы FileTable

Приложение SQL Server Profiler может включать в трассировку операции Windows по открытию и закрытию файлов, хранящихся в таблице FileTable.

[В начало]

Аудит и таблицы FileTable

Аудит таблицы FileTable проводится так же, как и для любых других таблиц. Однако шаблоны доступа Win32 не являются операциями на основе множеств. Одно действие в файловой системе преобразуется в несколько DML-операций Transact-SQL. Например, открытие файла в Microsoft Word преобразуется в несколько операций открытия/закрытия/создания/переименования/удаления и соответствующие DML-операции Transact-SQL. Это приводит к записи подробных сведений аудита, где трудно сопоставить записи, относящиеся к действиям файловой системы, и соответствующие записи аудита DML в Transact-SQL.

[В НАЧАЛО]

DBCC и таблицы FileTable

С помощью инструкции DBCC CHECKCONSTRAINTS можно проверить ограничения для таблицы FileTable, включая системные ограничения.

[В НАЧАЛО]

См. также

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

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

Инструкции FileTable языка DDL, функции, хранимые процедуры и представления