【转】使用SQL Server 2012的FileTable轻松管理文件

一 、FileStream和FileTable介绍

我们经常需要把结构化数据(int、Char等)和非结构化数据(如Varbinary(max))一起存储,那我们在怎么存储的呢?

1、 在SQL Server 2008之前,我们通常在数据库中存储结构化的数据,并且将非结构化数据(例如文档、音频、视频等)存储在NTFS文件系统中,然后在数据库中存放这些文件的路径。但是显而意见,很难保证文件系统和数据库的一致性。

2、 在SQL Server 2008,新增了FileStream,它允许我们将Varbinary(max)类型的文件存放在NTFS文件系统,但是能够直接通过SQL Server管理文件系统中的文件,有效地保证了事务的一致性。但是文件系统只是用来存储文件而已,并不能用来组织和管理文件。

3、 在SQL Server2012,在FileStream的基础之上新增了FileTable,它拥有FileStream的一切功能。并且通过Windows的文件系统能够组织和管理文件,对于文件的一切操作都会反映在SQL Server的文件表中,例如在文件系统中新建文件、新建文件夹、更改文件类型、文件大小等 ,都会相应地在SQL Server的文件表上做相应的操作。

二 、如何配置和使用FileTable

1、 在SQL Server配置管理器中开启文件流访问

a) 勾上“针对Transact-SQL访问启用FileStream”

b) 勾上“启用FileStream进行文件I/O访问”。“Windows共享名(W)”处填入“CanwaySQLFile”

c) 勾上“允许远程客户端访问FileStream数据(R)”

2、 在数据库的实例属性上允许访问文件流

打开“SQL Server Management Studio”,修改该实例的配置。默认配置如下:

将“FileStream访问级别”从“已禁用”改成“已启用完全访问”

其中“FileStream访问级别”有三种可选项:

a) 已禁用

无法将二进制大型对象 (BLOB) 数据存储在文件系统中。此为默认值。即filestream access level=0

b) 已启用 Transact-SQL 访问

可使用 Transact-SQL 访问 FILESTREAM 数据,但不能通过文件系统进行访问。即filestream access level=1

c) 已启用完全访问

FILESTREAM 数据可使用 Transact-SQL 以及通过文件系统进行访问。即filestream access level=0

点击“确定”之后提示必须重启SQL Server服务才会生效:

3、 数据库中添加文件流组和文件

a) 添加文件流组

右键数据库FileTableDB->属性->文件组,在下方的“FileStream”点击“添加”来添加一个文件流组FileStreamGroup。

b) 添加文件

添加了文件流组之后就可以在文件流组中添加数据文件

右键数据库FileTableDB->属性->文件,添加一个名为“FileTable”、文件类型为“FileStream数据”、文件组为“FileStreamGroup”、路径为“E:\FB”的数据库文件。

打开目录“E:\FB”,可以看到自动新建了一个文件夹“FileTable”,在FileTable文件夹下面有一个filestream.hdr文件,它是是FILESTREAM 容器的头文件

4、 数据库启用“非事务访问”和填写“FileStream目录名称”

右键数据库FileTableDB->属性->选项

a) 在“FileStream非事务访问”处选项“Full”

b) 在“FileStream目录名称”处填写“ImageFile”

点击“确定”后提示:

直接点击是就可以了。

5、 创建文件表FileTable

打开SSMS,打开新的查询窗口,输入以下命令并运行

展开数据库FileTableDB,在数据库下有一个名为FileTable的文件夹,展开此文件夹,可以看到一个名为ImageTable2并且拥有很多列的表。

6、 获取共享路径

在数据库FileTableDB下创建文件表ImageTable2之后,就能够通过Windows的资源管理器来看到文件表ImageTable2中存放的文件。

先获取文件表ImageTable2的共享路径,在SSMS下运行以下命令可以得到:

7、 通过共享路径访问数据库FileTableDB下文件表ImageTable2中存放的文件

a) 通过共享路径访问

目前共享文件中没有文件。

b) 查询ImageTable2

目录表ImageTable2也是空的

c) 在Windows资源管理器上打开上面的共享目录

i. 新建一个名为“Test.txt”的文件

然后再查询表ImageTable2

(后面还有其它字段,截图没截到)

可以发现,在共享目录下创建一个文件,那么在表ImageTable2下也会自动添加一条记录。

ii. 同样地,在数据库中删除表ImageTable2下的记录也会相应地自动删除共享目录下的文件。

iii. 在共享目录下创建文件夹也会自动地在文件表中创建一个文件夹

iv. 共享目录下修改文件的名字、增加文件的内容、更改文件的类型等都会自动地在数据库的ImageTable2下做相应的更改。

三 、总结

通过SQL Server 2012的FileTable,我们可以很方便地组织和管理存放在数据库中的文件。可以通过文件系统直接为文件建立多级目录进行分类管理,可以修改文件类型,修改文件名等,这些都不会影响到数据库和文件系统的一致性。

时间: 2024-10-07 13:42:52

【转】使用SQL Server 2012的FileTable轻松管理文件的相关文章

在Windows Server 2012 R2中搭建SQL Server 2012故障转移集群

需要说明的是我们搭建的SQL Server故障转移集群(SQL Server Failover Cluster)是可用性集群,而不是负载均衡集群,其目的是为了保证服务的连续性和可用性,而不是为了提高服务的性能. SQL Server始终在负载均衡集群方面都缺少自己的产品,多由第三方厂家提供,但SQL Server故障转移集群却由来已久,在SQL Server 2012还提供了一个可用性组(AlwaysOn High Availability Groups)的新特性,我们知道微软的故障转移集群(W

SQL Server 2012 FileTable 文件表

SQL Server 2012 提供一种特殊的“文件表”,也称为“FileTable”. FileTable 是一种专用的用户表,它包含存储 FILESTREAM 数据的预定义架构以及文件和目录层次结构信息.文件属性.FileTable 功能为 SQL Server 中存储的文件数据提供对 Windows 文件命名空间的支持以及与 Windows 应用程序的兼容性支持.即可以在 SQL Server 中将文件和文档存储在称作 FileTable 的特别的表中,但是从 Windows 应用程序访问

SQL Server 2012笔记分享-38:了解系统数据库

master 数据库 记录 SQL Server 实例的所有系统级信息. master 数据库记录 SQL Server 系统的所有系统级信息.这包括实例范围的元数据(例如登录帐户).端点.链接服务器和系统配置设置.此外,master 数据库还记录了所有其他数据库的存在.数据库文件的位置以及 SQL Server 的初始化信息.因此,如果 master 数据库不可用,则 SQL Server 无法启动.在 SQL Server 中,系统对象不再存储在 master 数据库中,而是存储在 Reso

SQL Server 2012笔记分享-2:主要服务器组件

SQL server 2012主要包括如下的五大组件 SQL Server数据库引擎 SQL Server 数据库引擎包括数据库引擎(用于存储.处理和保护数据的核心服务).复制.全文搜索.用于管理关系数据和 XML 数据的工具以及 Data Quality Services (DQS) 服务器. 分析服务 Analysis Services 包括用于创建和管理联机分析处理 (OLAP) 以及数据挖掘应用程序的工具. 报表服务 Reporting Services 包括用于创建.管理和部署表格报表

SQL Server 2012 各版本功能比较

转载来自 <一棵树-博客园>  地址:http://www.cnblogs.com/atree/p/SQL_Server_2012_Enterprise_Standard.html SQL Server 2012 各版本功能比较 有关不同版本的 SQL Server 2012 所支持的功能的详细信息. 功能名称 Enterprise 商业智能 Standard Web Express with Advanced Services Express with Tools Express 单个实例使

SQL Server 2012 FileTables 简介

本文将介绍有关 SQL Server 2012 FileTables. 大家都知道像是 SQL Server 这类的关联式数据库擅长处理大量结构化数据,对于文件或目录这类型的非结构化数据的管理及查询,相对而言比较难以处理. 以一般网站应用程序开发为例,常常会需要提供使用者透过浏览器上传文件的功能,应用程序要如何记录这些文件的相关资讯,大致上都是采用这两种方法,一是只在 DBMS 中纪录文件名称.大小.类型等资讯,实际文件还是存放在文件系统当中,二是把上传的文件转成二进制后保存到 DBMS 中.

SQL Server 2012 案例教程(贾祥素)——学习笔记

第2章 SQL Server 2012概述 1.SQL(Structed Query Language),结构化查询语言. 2.SSMS(SQL Server Mangement Studio),SQL Server 2012的操作环境. 3.连接SQL Server之前应先启动SQL Server服务,即SQL Server(MSSQLSERVER): 方法1 开始--所有程序--Microsoft SQL Server 2012--配置工具--SQL Server配置管理器. 方法2 控制面

SQL Server 2012笔记分享-54:数据库文件管理1

(一)添加文件 可以在线执行,不影响数据库使用 ,如图. 添加完成后,如图所示. 也可以通过脚本的形式来添加,如图. (二)删除文件 可以在线执行,不影响数据库使用 . 只有当文件中的实际使用空间为空时才能被成功执行 . (三)移动文件到不同的磁盘路径下 必须先将数据库脱机,将导致数据库暂时不可用 详情参考:http://msdn.microsoft.com/zh-cn/library/ms345483.aspx 若要将移动数据或日志文件作为计划的重定位的一部分,请执行下列步骤: 1. 运行以下

SQL Server 2012笔记分享-46:如何快速学习T-SQL语句

对于初学者来说,T-SQL语句的编写一直是个难题,初学者还是习惯使用图形界面来做相关的SQL方面的维护工作.但是在一个稍微复杂大型的SQL场景中,如果我们能够快速的掌握和理解SQL语句的编写和使用,那么会使我们的运维工作达到事半功倍的效果. 其实对于SQL server 2012来说,本身就提供了很多途径来帮助初学者获取日常管理任务的对应T-SQL脚本.下面我们来举几个快速获取T-SQL脚本的例子. ================================================