启用 FileTable 的先决条件
介绍如何启用创建和使用 FileTable 的先决条件。
本主题内容
我想要…
启用 FileTable 的先决条件
在实例级别启用 FILESTREAM
如何在实例级别启用 FILESTREAM
如何允许 FILESTREAM 通过防火墙
提供 FILESTREAM 文件组
在数据库级别启用非事务性访问
如何检查是否在数据库上启用了非事务性访问
如何在数据库级别启用非事务性访问
在数据库级别指定 FileTable 的目录
如何在数据库级别指定 FileTable 的目录
如何查看实例的现有目录名称
数据库级别目录的要求和限制
启用 FileTable 的先决条件
若要启用创建和使用 FileTable 的先决条件,请启用下列项目:
在实例级别:
- 在实例级别启用 FILESTREAM
在数据库级别:
在数据库级别提供 FILESTREAM 文件组
在数据库级别启用非事务性访问
在数据库级别指定 FileTable 的目录
[返回页首]
在实例级别启用 FILESTREAM
FileTable 扩展了 SQL Server 的 FILESTREAM 功能。 因此,在创建和使用 FileTable 前,必须在 Windows 级别和 SQL Server 实例上启用 FILESTREAM 用于文件 I/O 访问。
如何在实例级别启用 FILESTREAM
有关如何启用 FILESTREAM 的信息,请参阅启用和配置 FILESTREAM。
当您调用 sp_configure 在实例级别启用 FILESTREAM 时,必须将 filestream_access_level 选项设置为 2。 有关详细信息,请参阅 filestream access level 服务器配置选项。
[返回页首]
如何允许 FILESTREAM 通过防火墙
有关如何允许 FILESTREAM 通过防火墙的信息,请参阅将防火墙配置为进行 FILESTREAM 访问。
[返回页首]
在数据库级别提供 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 (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 的父级。 有关详细信息,请参阅在 FileTable 中使用目录和路径。
如何在数据库级别指定 FileTable 的目录
您指定的名称必须在跨数据库级目录的实例中是唯一的。
使用 Transact-SQL 指定 FileTable 的目录
创建新数据库时,调用带 DIRECTORY_NAME FILESTREAM 选项的 CREATE DATABASE (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 (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 值在目标实例中已存在,则该操作失败。 调用 CREATE DATABASE FOR ATTACH 或 RESTORE DATABASE 时,指定 DIRECTORY_NAME 的唯一值。
将现有数据库升级到 SQL Server 2012 时,DIRECTORY_NAME 的值为 Null。
在数据库级别启用或禁用非事务性访问时,该操作不检查是否已指定目录名称或该名称是否唯一。
删除已为 FileTable 启用的数据库时,将删除数据库级目录和其下的所有 FileTable 的所有目录结构。
[返回页首]