启用 FileTable 的先决条件
适用范围:SQL Server
介绍如何启用创建和使用 FileTable 的先决条件。
启用 FileTable 的先决条件
若要启用创建和使用 FileTable 的先决条件,请启用下列项目:
在实例级别启用 FILESTREAM
FileTable SQL Server 扩展了 的 FILESTREAM 功能。 在创建和使用 FileTable 前,必须在 Windows 级别和 SQL Server 实例上启用 FILESTREAM 用于文件 I/O 访问。
在实例级别启用 FILESTREAM
有关如何启用 FILESTREAM 的信息,请参阅 启用和配置 FILESTREAM。
调用 sp_configure
在实例级别启用 FILESTREAM 时,必须将 filestream_access_level
选项设置为 2
。 有关更多信息,请参阅“文件流访问级别(服务器配置选项)”。
允许 FILESTREAM 通过防火墙
有关如何允许 FILESTREAM 通过防火墙的信息,请参阅 Configure a Firewall for FILESTREAM Access。
在数据库级别提供 FILESTREAM 文件组
数据库必须首先具有 FILESTREAM 文件组,然后您才能在该数据库中创建 FileTable。 有关此先决条件的详细信息,请参阅 创建启用了 FILESTREAM 的数据库。
在数据库级别启用非事务性访问
FileTable 使 Windows 应用程序可以获取 FILESTREAM 数据的 Windows 文件句柄而不需要事务。 为了允许对 SQL Server 中存储的文件进行此非事务性访问,必须为要包含 FileTable 的每个数据库在数据库级别上指定所需的非事务性访问级别。
检查是否在数据库上启用了非事务性访问
查询目录视图 sys.database_filestream_options (Transact-SQL) 并检查 non_transacted_access
和 non_transacted_access_desc
列。
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options;
GO
在数据库级别启用非事务性访问
非事务性访问的可用级别为 FULL、READ_ONLY 和 OFF。
使用 Transact-SQL 指定非事务性访问的级别
创建新数据库时,调用带 NON_TRANSACTED_ACCESS
FILESTREAM 选项的 CREATE DATABASE (SQL Server Transact-SQL) 语句。
CREATE DATABASE database_name
WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );
更改现有数据库时,调用带 NON_TRANSACTED_ACCESS
FILESTREAM 选项的 ALTER DATABASE (Transact-SQL) 语句。
ALTER DATABASE database_name
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );
使用 SQL Server Management Studio 指定非事务性访问的级别
可以在“数据库属性”对话框中“选项”页的“FILESTREAM 非事务性访问”字段中指定非事务性访问的级别。 有关此对话框的详细信息,请参阅数据库属性(“选项”页)。
在数据库级别指定 FileTable 的目录
在数据库级别启用对文件的非事务性访问时,可以选择使用 DIRECTORY_NAME
选项同时提供一个目录名称。 如果启用非事务性访问时没有提供目录名称,必须稍后提供,这样才能在数据库中创建 FileTable。
在 FileTable 文件夹层次结构中,此数据库级目录将成为在实例级别为 FILESTREAM 指定的共享名称的子级以及在数据库中创建的 FileTable 的父级。 有关详细信息,请参阅 Work with Directories and Paths in FileTables。
在数据库级别指定 FileTable 的目录
您指定的名称必须在跨数据库级目录的实例中是唯一的。
使用 Transact-SQL 指定 FileTable 的目录
创建新数据库时,调用带 DIRECTORY_NAME
FILESTREAM 选项的 CREATE DATABASE (SQL Server Transact-SQL) 语句。
CREATE DATABASE database_name
WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );
GO
更改现有数据库时,调用带 DIRECTORY_NAME
FILESTREAM 选项的 ALTER DATABASE (Transact-SQL) 语句。 使用这些选项更改目录名称时,数据库必须以独占方式锁定,没有打开的文件句柄。
ALTER DATABASE database_name
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );
GO
附加数据库时,调用带 FOR ATTACH
选项和 DIRECTORY_NAME
FILESTREAM 选项的 CREATE DATABASE (SQL Server Transact-SQL) 语句。
CREATE DATABASE database_name
FOR ATTACH WITH FILESTREAM ( DIRECTORY_NAME = N'directory_name' );
GO
还原数据库时,调用带 DIRECTORY_NAME
FILESTREAM 选项的 RESTORE (Transact-SQL) 语句。
RESTORE DATABASE database_name
WITH FILESTREAM ( DIRECTORY_NAME = N'directory_name' );
GO
使用 SQL Server Management Studio 指定 FileTable 的目录
可以在“数据库属性”对话框的“选项”页的“FILESTREAM 目录名称”字段中指定目录名称。 有关此对话框的详细信息,请参阅数据库属性(“选项”页)。
查看实例的现有目录名
要查看该实例的现有目录名的列表,请查询目录视图 sys.database_filestream_options (Transact-SQL) 并查看 filestream_database_directory_name
列。
SELECT DB_NAME ( database_id ), directory_name
FROM sys.database_filestream_options;
GO
数据库级别目录的要求和限制
调用
CREATE DATABASE
或ALTER DATABASE
时,可选择设置DIRECTORY_NAME
。 如果未指定DIRECTORY_NAME
的值,则目录名称仍是 Null。 但不能在数据库中创建 FileTable,除非在数据库级别指定了DIRECTORY_NAME
的值。您提供的目录名称必须符合文件系统对有效目录名称的要求。
当数据库包含 FileTable 时,不能将
DIRECTORY_NAME
设置回为 Null 值。附加或还原数据库时,如果新数据库的
DIRECTORY_NAME
值在目标实例中已存在,则该操作失败。 调用DIRECTORY_NAME
或RESTORE DATABASE
时请指定CREATE DATABASE FOR ATTACH
的唯一值。当升级现有数据库时,
DIRECTORY_NAME
的值为 Null。在数据库级别启用或禁用非事务性访问时,该操作不检查是否已指定目录名或该名称是否唯一。
删除已为 FileTable 启用的数据库时,将删除数据库级目录和其下的所有 FileTable 的所有目录结构。