SQL Server 2012 提供一种特殊的“文件表”,也称为“FileTable”。 FileTable 是一种专用的用户表,它包含存储 FILESTREAM 数据的预定义架构以及文件和目录层次结构信息、文件属性。FileTable 功能为 SQL Server 中存储的文件数据提供对 Windows 文件命名空间的支持以及与 Windows 应用程序的兼容性支持。即可以在 SQL Server 中将文件和文档存储在称作 FileTable 的特别的表中,但是从 Windows 应用程序访问它们,就好像它们存储在文件系统中,而不必对客户端应用程序进行任何更改。

在实例级别启用 FILESTREAM:(参考 启用和配置 FILESTREAM )

右键SQLserver服务——属性——FILESTREAM ——勾选——重启服务

更改此 SQL Server 实例的 FILESTREAM 访问级别 :(参考 filestream access level 服务器配置选项)

?
1
2
exec sp_configure N'filestream access level' ,2
reconfigure with override

可能需要配置将防火墙配置为进行 FILESTREAM 访问。

数据库级别创建 FILESTREAM 文件组:

数据库必须首先具有 FILESTREAM 文件组,然后您才能在该数据库中创建 FileTable。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--  创建数据库时创建 FILESTREAM 文件组
CREATE DATABASE FileStreamDB
ON
PRIMARY (
    NAME = FileStreamDB,
    FILENAME = 'G:\database\FileStreamDB.mdf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB
),
FILEGROUP FileStreamGroup CONTAINS FILESTREAM(
     NAME = FileStreamFile,
     FILENAME = 'G:\database\FileStreamFile',
     MAXSIZE = 50 MB
)
LOG ON (
    NAME = FileStreamDB_log,
    FILENAME = 'G:\database\FileStreamDB_log.ldf'
)
WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'FileStreamPath' )
GO

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
--  或者在当前数据库中添加 FILESTREAM 文件组
ALTER DATABASE [AdventureWorks2012]
ADD FILEGROUP FileStreamGroup CONTAINS FILESTREAM;
ALTER DATABASE [AdventureWorks2012]
ADD FILE
(
     NAME = FileStreamFile,
     FILENAME = 'G:\database\FileStreamFile',
     MAXSIZE = 50 MB
)
TO FILEGROUP FileStreamGroup
GO

创建文件时 filename 只指定目录,并且目录 FileStreamFile 在文件系统不存在,创建后会自动生成该目录文件夹

在数据库级别上指定 非事务性访问级别 和 FileTable目录(数据库须独占):

?
1
2
3
4
5
6
7
8
9
10
11
12
--  在数据库级别上指定 非事务性访问级别 和 FileTable目录(数据库须独占)
ALTER DATABASE [AdventureWorks2012]
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'FileStreamPath' )
--  启用后即可查看到其状态信息
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

将新表创建为 FileTable :(参考 CREATE TABLE (Transact-SQL) )

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
USE [AdventureWorks2012]
GO
CREATE TABLE [DocumentStore]
AS FileTable
WITH (
    --文件目录,不区分大小写,不指定则为filetable名称[DocumentStore]
    FileTable_Directory = N'FileStreamPath',
    FileTable_Collate_Filename = database_default   --排序规则
);
GO
--  更改目录
ALTER TABLE [DocumentStore]
    SET ( FILETABLE_DIRECTORY = N'FileStreamPath' );
GO

每个目录创建都会在文件系统中生成一个文件夹:

相关查询:(FileTable 架构)

?
1
2
3
4
5
6
7
8
9
--  查看 FileTable 信息
SELECT * FROM sys.filetables;
SELECT * FROM sys.tables WHERE is_filetable = 1;
--  FileTable 的相关对象
SELECT parent_object_id,OBJECT_NAME(parent_object_id) AS 'FileTable'
,object_id,OBJECT_NAME(object_id) AS 'System-defined Object'
FROM sys.filetable_system_defined_objects
ORDER BY FileTable, 'System-defined Object';

至此,已经配置完成!~

现在查看文件表,没有记录。可以查看该表的 UNC 路径,在系统文件中打开该路径。

?
1
2
3
4
5
6
7
--  查看 FileTable
SELECT * FROM [dbo].[DocumentStore]
--  获取特定 FileTable 或当前数据库的根级 UNC 路径。
SELECT FileTableRootPath();
SELECT FileTableRootPath(N'DocumentStore');
SELECT FileTableRootPath(N'dbo.DocumentStore');

在该路径中,可以直接将系统其它文件拷贝进去:

再查看 FileTable ,数据已经自动记录

?
1
2
--  查看 FileTable
SELECT * FROM [dbo].[DocumentStore]

?
1
2
3
4
5
--  也可以用GetFileNamespacePath查看 FileTable 中文件或目录的 UNC 路径。
SELECT
 file_stream.GetFileNamespacePath()
,file_stream.GetFileNamespacePath(1, 0)
FROM [dbo].[DocumentStore]

删除表 FileTable 中的记录,文件也会被删除:

?
1
2
3
4
--  删除表 FileTable 中的记录,文件也会被删除
DELETE FROM [dbo].[DocumentStore] WHERE stream_id = 'BA483ECA-AE0E-E511-8367-005056C00008'
SELECT * FROM [dbo].[DocumentStore]

若要获取执行某些管理任务所需的独占访问权限,可能必须暂时禁用非事务性访问权限。

禁用完全非事务性访问权限:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ALTER DATABASE [AdventureWorks2012]
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );
GO
--  关闭后,路径无法打开
--  \\Kk-pc\mssqlserver\FileStreamPath\FileStreamPath
--  此时文件表 [DocumentStore] 仍可正常操作
ALTER DATABASE [AdventureWorks2012]
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );
GO
--  只读状态,路径可拷贝文件出来,但无法拷贝文件到该目录
--  \\Kk-pc\mssqlserver\FileStreamPath\FileStreamPath
--  此时文件表 [DocumentStore] 仍可正常操作

重新启用完全非事务性访问权限:

?
1
2
3
4
--  重新启用完全非事务性访问权限
ALTER DATABASE [AdventureWorks2012]
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );
GO

禁用 FileTable 命名空间将会禁用所有系统定义的约束并触发使用 FileTable 创建的约束。

?
1
2
3
4
--  禁用 FileTable 命名空间
--  (禁用后路径 \\Kk-pc\mssqlserver\FileStreamPath\FileStreamPath 不可访问)
ALTER TABLE [DocumentStore] DISABLE FILETABLE_NAMESPACE;
GO

?
1
2
3
--  重新启用 FileTable 命名空间
ALTER TABLE [DocumentStore] ENABLE FILETABLE_NAMESPACE;
GO

更多注意的事情还需要到参考官方文档:FileTable 与其他 SQL Server 功能的兼容性

转载于:https://www.cnblogs.com/lvdongjie/p/7754506.html

SqlServer2012 File Table文件表相关推荐

  1. GCC编译过程以及对应FILE文件表

    gcc/g++在执行编译工作的时候,总共需要4步 (1).预处理:生成.i的文件[预处理器cpp] (2).编译:将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] (3).汇编:有汇编变 ...

  2. html中只能上传文件word,HTML文件表单,接受Word文档(HTML file form, accept Word documents)...

    HTML文件表单,接受Word文档(HTML file form, accept Word documents) 我在这里遇到了一个奇怪的问题. (不管怎样,或者我只是忽略了一些非常简单的东西.) 我 ...

  3. linux文件 i节点结构,Linux 文件描述符 文件表项 i节点结构

    Linux的VFS(虚拟文件系统)学习起来很痛苦,看源码不太明智,看完分析完就忘且太浪费时间,懂了后也无法应用在实际场合中.所以这里只是讨论下文件描述符,文件表项(file结构体)和inode,理清实 ...

  4. SQL Server 2012 开发新特性:文件表

    转载于 春哥 一.启用FileTable 1.修改数据库引擎的属性 打开"SQL Server配置管理器",修改SQL Server数据库引擎的属性.使用此页可针对此 Micros ...

  5. mysql myisam can't open table_Can’t open file:'[Table]mytable.MYI'

    Can't open file:'[Table]mytable.MYI' 更新时间:2011年01月03日 14:10:08   作者: 也许很多人遇到过类似Can't open file: '[Ta ...

  6. ArcSDE 日志文件表(一)

    今天跟大家介绍一下ArcSDE日志文件表,一直都想好好研究一下这块,因为基本上不太受大家重视,感兴趣的用户不是很多,但是一旦出现多用户并发查询或者版本操作的时候,这个东西就显得非常重要了,而且根据不同 ...

  7. Oracle bigfile 大文件表空间会影响rman等备份效率

    Database 是由一个或多个被称为表空间(tablespace)的逻辑存储单位构成.表空间内的逻辑存储单位为段(segment),段又可以继续划分为数据扩展(extent).而数据扩展是由一组连续 ...

  8. Apple System: Error: ENFILE: file table overflow

    2019独角兽企业重金招聘Python工程师标准>>> 在MAC上跑nodejs,遇到了一个问题:file table overflow 主要意思就是说文件打开太多了,超过了限制,产 ...

  9. Truncate Table 删除表内容避免产生过多日志

    数据库每天在进行频繁操作和记录,LOG文件会特别大且增长的比较快,有时候一天就5000M,每天删除一次也很不方便.有没有方法能避免生成日志或不产生日志呢?不产生日志的方法目前我还没找到,但我们在平常的 ...

最新文章

  1. 重磅!如何高效学习单目深度估计
  2. 马斯克直聘AI人才:高中毕没毕业无所谓,但是编程能力得过硬
  3. TestBird频现国内手游“盛宴” 开发商互相介绍用得很赞
  4. leetcode算法题--连续差相同的数字
  5. 如何将APACHE许可证应用于您的工作
  6. HDOJ 2041 超级楼梯
  7. StarUML启动报RPC服务器不可用错误
  8. LCM在Kernel中的代码分析
  9. 一文读懂机器学习的常用模型评价指标
  10. python生成器 图片分类_Python内置类型(6)——生成器
  11. ZooKeeper系列(四)
  12. c盘保护软件_电脑C盘空间越来越小?简单操作这几步,可以释放大量空间
  13. Docker的镜像基本原理和概念
  14. 24小时BTC全网合约成交数据显示:多头占优
  15. 在Eclipse中使用JDBC访问MySQL数据库的配置方法
  16. Zipf law 定律
  17. 直播app系统源码,自定义弹框的简单写法Demo
  18. 第三部分 数据结构 -- 第二章 队列-1362:家庭问题(family)
  19. 《黑客秘笈——渗透测试实用指南(第2版)》—第2章2.3节外部或内部主动式信息搜集...
  20. docx文件转pdf,使用aspose words 转pdf,并且解决表格格式错乱

热门文章

  1. CopyTranslator v0.0.8 Zouwu RC1 发布
  2. 从Android上的相机裁剪图像
  3. php返回json套数组_教你PHP怎么不用框架写优雅的中小网站
  4. python中sys模块有问题_python中sys模块之输入输出错误流
  5. my.ini修改后服务无法启动_教你发布vue+.netCore项目到服务器
  6. java 动态规划求最短路径_使用分支界定和动态规划解决最短路径问题(原)
  7. 数据库: asc和desc的意思
  8. java freemarker_Java: FreeMarker的配置和使用
  9. 工作失职的处理决定_员工工作失误处罚处理决定书范本(3篇)
  10. Android花屏分析,Unity游戏在手机上运行时的花屏现象