FileTable的创造及以

  1. 首先要在实例级别启用FILESTREAM,打开Sql Server Configuration
    Manager窗口,双击需要安装的SQL SERVER实例进行安装。

ACCESS 1

 

  1. 内需改 SQL SERVER 实例的 FILESTREAM 访问级别,执行以下代码,并再启
    SQL SERVER 服务:

    EXEC sp_configure filestream_access_level, 2
    RECONFIGURE
    GO

参数定义如下:

ACCESS 2

 

  1. 起或需要防火墙配置也拓展 FILESTREAM
    访问,若要当防火墙保护的环境受到以
    FILESTREAM,客户端与服务器都要能够将 DNS 名称解析为带有 FILESTREAM
    文件之服务器。FILESTREAM 要求 Windows 文件共享端口 139 与 445
    处于打开状态。

 

  1. 以上还准备好了继即便好于创造数据库时创造 FILESTREAM
    文件组了,执行以下代码:

    — 创建数据库时创造 FILESTREAM 文件组
    CREATE DATABASE Archive
    ON
    PRIMARY (

     NAME = ArchiveMDF, 
     FILENAME = 'D:\DataBase\ZL\Archive\archdat.mdf',     -- D:\DataBase\ZL\Archive路径必须存在
     SIZE = 5MB,
     MAXSIZE = 25MB,
     FILEGROWTH = 5MB
    

    ),
    FILEGROUP FileStreamGroupFirst CONTAINS FILESTREAM(

      NAME = ArchiveFILESTREAM, 
      FILENAME = 'D:\DataBase\ZL\Archive\MyFileStream',   -- D:\DataBase\ZL\Archive路径下MyFileStream文件夹必须不存在
      MAXSIZE = 50 MB
    

    )
    LOG ON (

     NAME = ArchiveLDF,
     FILENAME = 'D:\DataBase\ZL\Archive\archlog.ldf'
    

    )
    WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N’MyDirectory’ ) — 指定数据库访问级别跟点名目录名字
    GO

WITH FILESTREAM()
选项是因此来指定对数据库的非事务性FILESTREAM访问的级别,说明如下:

ACCESS 3

 

履行成功后每当目里便格外成了 FILESTREAM 文件夹。

ACCESS 4

 

自也得以吗曾是的数据库添加 FILESTREAM 文件组,代码如下:

--    或者在当前数据库中添加 FILESTREAM 文件组
ALTER DATABASE zl_test
ADD FILEGROUP FileStreamGroup CONTAINS FILESTREAM;

ALTER DATABASE zl_test
ADD FILE
(
     NAME = FileStreamFile, 
     FILENAME = 'D:\DataBase\ZL\zl_test\MyFileStream',
     MAXSIZE = 50 MB
)
TO FILEGROUP FileStreamGroup
GO

 

要当创造数据库时未尝就此 WITH FILESTREAM
语句子来指定非事务性访问级别,可以当以后单独用报告句来进展,比如:

--    在数据库级别上指定 非事务性访问级别 和 FileTable目录(数据库须独占)
ALTER DATABASE zl_test
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'MyDirectoryZl')

专注,执行以上语句必须没有外进程连接到给操作数据库及才会学有所成,否则用最等待直至其他连接断开。可以据此脚的言语查看有连接到该数据库及之长河:

select * from master..sysprocesses where dbid=db_id('zl_test')

ACCESS 5

下一场收其他进程即可:

kill 56

 用下面的话语可以查时实例中安数据库已经设置了非事务性访问级别,和FileTable目录名:

--    启用后即可查看到其状态信息
SELECT DB_NAME(database_id) [database],non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options
WHERE non_transacted_access_desc <> 'OFF'

SELECT DB_NAME(database_id) [database],directory_name 
FROM sys.database_filestream_options 
WHERE directory_name IS NOT NULL

归来结果如下:

ACCESS 6

 

  1. 在新建的 Archive 数据库中开创 FileTable,语句如下:

    — 创建FILETABLE
    USE Archive
    GO
    CREATE TABLE [FileStore]
    AS FileTable
    WITH (

     --文件目录,不区分大小写,不指定则默认为filetable名称[FileStore]
     FileTable_Directory = N'FileStore_Dev',
     FileTable_Collate_Filename = database_default    --排序规则
    

    )
    GO

履成功后每当靶浏览器被好看看

ACCESS 7

 

FileTable 是专用的用户表,它装有预定义的稳定架构。 此架构存储 FILESTREAM
数据、文件和目录信息与文件属性。由于FileTable有定点的组织,所以不要指定字段名。创建FileTable的概括语法可以指定以下设置:

  1). FILETABLE_DIRECTORY。指定充当存储于 FileTable
中的有所文件和目录的到底目录的目。 此名称应以数据库的装有 FileTable
目录名称中绝无仅有。
无论当前排序规则设置哪些,唯一性比较还不区分轻重缓急写。如果创建 FileTable
时未尝提供目录名称,则 FileTable 自身的称呼将故作目录名称。

  2). FILETABLE_COLLATE_FILENAME。指定要动被 FileTable
的“名称”列的排序规则名称。如果无供 FILETABLE_COLLATE_FILENAME
的值,或指定了 database_default,则该列继承当前数据库的排序规则。
如果手上数据库排序规则区分轻重缓急写,将吸引错误,CREATE TABLE 操作以破产。

  3). 还好指定要用以三个主键的名和电动创建的唯一约束。
如果非提供名称,则网会转名称

    a. FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME

    b. FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME

    c. FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME

为可用语句来重新改FileTable的目录,比如:

ALTER TABLE dbo.FileStore
    SET ( FILETABLE_DIRECTORY = N'FileStore_Pro' )

 右击创建好的FileTable,选择Explore FileTable
Directory,可以当文件系统中开辟FileTable的目,现在目录里是空的,

ACCESS 8

红线划起来的虽是前方创建数据库时 WITH FILESTREAM
语词被指定的DIRECTORY_NAME值

WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME =
N’MyDirectory’
),由于一个实例中可能来差不多只数据库都起FileTable,所以这价值必须唯一。

蓝线划起来的即是点创建FileTable时 WITH() 选项中指定的值

FileTable_Directory =
N’FileStore_Dev’,由于当一个数据库被恐怕存在多单FileTable,所以是价当同一个数据库被必须唯一,但不同的数据库中好一如既往。

于目录里存放有文本或者文件夹,

ACCESS 9

 

查询FileTable表,看见表中都有了对应之数据。

ACCESS 10

 

 在目中删掉某些文件则表中也会见相应机关的删掉某些数据,同样以说明中删掉某些数据,则目录中呢会相应活动的删掉某些文件。

 

6. 方可就此生图的口舌获得特定 FileTable 或当前数据库的根级 UNC 路径:

-- returns “\\SZSAUDIT\MSSQLSERVER\MyDirectory”
SELECT FileTableRootPath();

-- returns “\\SZSAUDIT\MSSQLSERVER\MyDirectory\FileStore”
SELECT FileTableRootPath(N'dbo.FileStore');

返的结果,

ACCESS 11

 

可为此脚的说话返回FileTable中指定的文件或者目录Locator ID值。

select GetPathLocator(FileTableRootPath('[dbo].[FileStore]')+'\ASRData.pdf')
select GetPathLocator('\\Szsaudit\mssqlserver\MyDirectory\FileStore\ASRData.pdf')

ACCESS 12

 

  1. 下面是片有关创建与操作FileTable的其余证明,详见MSDN。

  1).不克改变现有表以将那个更换为 FileTable。

  2).先前当数据库级别指定的父目录还非得具备非 Null 值。

  3).由于一个FileTable 包含一个 FILESTREAM 列,因此,FileTable
需要中之 FILESTREAM 文件组。 可以指定有效的 FILESTREAM 文件组作为
CREATE TABLE 命令的均等有些因创办 FileTable(可选)。 如果无指定文件组,则
FileTable 使用数据库的默认 FILESTREAM 文件组。 如果数据库没有 FILESTREAM
文件组,将吸引错误。

  4).不能够拿表约束作为 CREATE TABLE…AS FILETABLE 语句的一律组成部分创建。
但是以后可用 ALTER TABLE 语句添加该约束。

  5).不能够于 tempdb 数据库或外其他系统数据库中创造 FileTable。

切莫可知以 FileTable 作为临时表创建。

  6).不克改FILETABLE_COLLATE_FILENAME的值。

  7).不能够更改,删除或剥夺FileTable的系统定义的排列。不可知用新的用户列、计算列或持久化计算列添加到
FileTable。

  8).删除FileTable时,将去除 FileTable
的具有列以及和该表关联的享有目标,如索引、约束和触发器。

  9).删除FileTable时,FileTable 目录和其子目录将从数据库的 FILESTREAM
文件与目录层次结构中消灭。

  10).FileTable上的INSERT操作

    a.所有文件属性列有 NOT NULL
约束。如果没显式设置值,则提供适当的默认值。

    b.如果 INSERT 语句子设置了
name、path_locator、parent_path_locator
或文件属性,则强制执行系统定义之约。

    c.该应用程序可以通过提供针对性
GetPathLocator 函数的系统文件路径,来收获文件或者目录的 path_locator。

  11).FileTable上的UPDATE操作

    a.允许更新任何用户定义的数额。

    b.如果 INSERT 语句子设置了
name、path_locator、parent_path_locator
或文件属性,则强制执行系统定义的约束。

    c.可以对 file_stream 列中的 FILESTREAM
数据进行创新,且非会见潜移默化外其它列(包括时间戳)。

  12).FileTable上的DELETE操作

    a.删除行还将由文本系统被去除相应的文书要目录。

    b.如果该行与分包其他文件要目录的目相呼应,则去行操作将失败。

  13).FileTable不支持分区。通过对大多个FILESTREAM文件组的支持,在多数方案面临可以缓解纯向上扩展问题,而毋庸下分区。

  14).FileTable不支持复制和系力量,包括工作复制,合并复制,更改数据捕获和改变跟踪。

提议创建FileTable所在的数据库最好不用是存活的事务数据库,新建一个数据库来单独创建FileTable比较好。

 

相关文章