FileTable的始建和动用

  1. 率先要在实例级别启用FILESTREAM,打开Sql Server Configuration
    Manager窗口,双击必要安装的SQL SE哈弗VEHaval实例进行设置。

图片 1

 

  1. 亟待改变 SQL SECRUISERVESportage 实例的 FILESTREAM 访问级别,执行以下代码,仁同一视启
    SQL SE昂科威VEXC90 服务:

    EXEC sp_configure filestream_access_level, 2
    RECONFIGURE
    GO

参数定义如下:

图片 2

 

  1. 有恐怕须求防火墙配置为拓展 FILESTREAM
    访问,若要在防火墙爱护的条件中采用FILESTREAM,客户端和服务器都必须可以将 DNS 名称解析为涵盖 FILESTREAM
    文件的服务器。FILESTREAM 需要 Windows 文件共享端口 139 和 445
    处于打开状态。

 

  1. 上述都准备好了后就足以在开创数据库时创制 FILESTREAM
    文件组了,执行以下代码:

    — 创造数据库时创立 FILESTREAM 文件组
    CREATE DATABASE Archive
    ON
    P逍客IMA奥迪Q5Y (

     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访问的级别,表达如下:

图片 3

 

履行成功后在目录里就生成了 FILESTREAM 文件夹。

图片 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')

图片 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

归来结果如下:

图片 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

进行成功后在目标浏览器中得以看出

图片 7

 

FileTable 是专用的用户表,它装有预约义的定位架构。 此架构存储 FILESTREAM
数据、文件和目录新闻以及文件属性。由于FileTable有固定的结构,所以不用钦命字段名。成立FileTable的简短语法可以内定以下设置:

  1). FILETABLE_DIRECTOTiggoY。钦点充当存储在 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的目录,将来目录里是空的,

图片 8

红线划起来的就是前边创设数据库时 WITH FILESTREAM
语句中钦命的DIRECTOXC90Y_NAME值

WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME =
N’MyDirectory’
),由于八个实例中或许有八个数据库都有FileTable,所以这么些值必须唯一。

蓝线划起来的就是地点创造FileTable时 WITH() 选项中钦点的值

FileTable_Directory =
N’FileStore_Dev’,由于在3个数据库中只怕存在多少个FileTable,所以这几个值在同一个数据库中必须唯一,但分裂的数据库中得以等效。

往目录里存放一些文本或文件夹,

图片 9

 

询问FileTable表,看见表中曾经暴发了对应的数量。

图片 10

 

 在目录中删掉有些文件则表中也会相应活动的删掉有个别数据,同样在表中删掉有个别数据,则目录中也会相应活动的删掉有些文件。

 

6. 得以用下图的话语得到一定 FileTable 或当前数据库的根级 UNC 路径:

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

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

回来的结果,

图片 11

 

可以用上边的言语重返FileTable中指定的文本或目录Locator ID值。

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

图片 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 语句的一片段创造。
可是未来可以行使 ALTERAV4 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.若是 INSECR-VT 语句设置了
name、path_locator、parent_path_locator
或文件属性,则强制执行系统定义的自律。

    c.该应用程序能够透过提供针对性
Get帕特hLocator 函数的系统文件路径,来博取文件或目录的 path_locator。

  11).FileTable上的UPDATE操作

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

    b.即使 INSELX570T 语句设置了
name、path_locator、parent_path_locator
或文件属性,则强制执行系统定义的自律。

    c.可以对 file_stream 列中的 FILESTREAM
数据进行更新,且不会潜移默化其余其余列(蕴含时间戳)。

  12).FileTable上的DELETE操作

    a.删除行还将从文件系统中去除相应的文件或目录。

    b.如果该行与富含其余文件或目录的目录相呼应,则删除行操作将破产。

  13).FileTable不帮忙分区。通过对两个FILESTREAM文件组的支撑,在大部分方案中可以化解纯向上扩大难题,而无需拔取分区。

  14).FileTable不协助复制和相关效用,包罗工作复制,合并复制,更改数据捕获和改动跟踪。

提议创设FileTable所在的数据库最好不假若并存的业务数据库,新建三个数据库来单独创造FileTable相比好。

 

相关文章