本文将介绍有关 SQL Server 2012 FileTables。
大家都知道像是 SQL Server 这类的关联式数据库擅长处理大量结构化数据,对于文件或目录这类型的非结构化数据的管理及查询,相对而言比较难以处理。
以一般网站应用程序开发为例,常常会需要提供使用者透过浏览器上传文件的功能,应用程序要如何记录这些文件的相关资讯,大致上都是采用这两种方法,一是只在 DBMS 中纪录文件名称、大小、类型等资讯,实际文件还是存放在文件系统当中,二是把上传的文件转成二进制后保存到 DBMS 中。
上述两种方法都有其优缺点,前者的问题会在于当您备份数据库时,保存在文件系统中的文件或目录,需要自行想办法做备份,换言之,数据库和实例文件是独立的。后者将实例文件转成二进制数据,容易在性能上或保存空间上衍生问题。
现在这个难题在 SQL Server 2012 新增特殊数据表(FileTables)已经可以解决大部分的问题,它是以 FILESTREAM 技术为基础,并提供和全文检索(Full-Text Searc)和语义搜寻(Semantic Search)等进阶搜寻功能整合。透过 FileTables 您可以只利用 T-SQL 就可以读取文件、目录阶层及文件属性等资讯,并且可以和备份功能整合,将来只要备份数据库,就会连同 FileTables 中的文件或目录一同备份,又不会衍生性能或数据库保存空间的问题。接下来笔者就来介绍如何设定并使用 FileTables。
启用 FileTables 有几个必要条件,说明如下:
- 执行个体层级必须启用 FILESTREAM。
- 必须为 FILESTREAM 建立专用的文件群组。
- 在数据库层级起用非事务式存取(Non-transactional access)。
- 建立 FileTables 数据表。
特别一提的是,假设您的 SQL Server 是安装在 64 位的操作系统上,而您的 SQL Server 是安装 32 位版本,您将无法启用 FILESTRAM 功能,这点是在规划安装 SQL Server 前必须先考虑清楚的。
接着笔者说明上述四个步骤应该如何进行:
- 执行个体层级必须启用 FILESTREAM。
您可以于【开始 > 执行 > 输入 SQLServerManager11.ms】开启 SQL Server Configuration Manager。勾选 Enable FILESTRAM for Transact-SQL access,并设定分享目录名称,接着重新启动 Database Engine 服务。
服务重新启动后,再以下列 T-SQL 设定 FILESTREAM ACCESS LEVEL:
1: EXEC sp_configure filestream_access_level, 2
2: GO
3: RECONFIGURE
4: GO
- 必须为 FILESTREAM 建立专用的文件群组。
由于 FileTables 这种特殊的数据表,无法保存在一般的文件群组中,因此这个步骤必须在您建立数据库时,必须以下列 T-SQL 建立 FILESTREAM 专用的文件群组(如第 12 列的程序):
1: DECLARE @DB_Name NVARCHAR(64) = N‘FTDB‘
2: DECLARE @device_directory NVARCHAR(256)
3: SELECT @device_directory = SUBSTRING(filename, 1, CHARINDEX(N‘master.mdf‘, LOWER(filename)) - 1)
4: FROM master.dbo.sysaltfiles WHERE dbid = 1 AND fileid = 1
5: ?
6: IF DB_ID(@DB_Name) > 0
7: EXEC (‘DROP DATABASE ‘ + @DB_Name)
8: ?
9: EXEC (
10: N‘CREATE DATABASE ‘ + @DB_Name
11: + ‘ ON PRIMARY (NAME = N‘‘FTData‘‘, FILENAME = N‘‘‘ + @device_directory + N‘FTData.mdf‘‘) ‘
12: + ‘, FILEGROUP FSFileGroup CONTAINS FILESTREAM( NAME = FTData1, FILENAME = N‘‘‘ + @device_directory +N‘FTData1‘‘) ‘
13: + ‘LOG ON (NAME = N‘‘FTLog‘‘, FILENAME = N‘‘‘ + @device_directory + N‘FTLog.ldf‘‘)‘
14: )
15: GO
- 在数据库层级起用非事务式存取(Non-transactional access)。
- 建立 FileTables 数据表。
您可以用下列两种方式来建立 FileTable:
1: --方法一,指定目录名称及定序
2: CREATE TABLE MyFileTable AS FileTable
3: WITH (
4: FileTable_Directory = ‘FileTables‘,--指定目录名称
5: FileTable_Collate_Filename = database_default--指定 name 数据行的定序
6: )
7: GO
8: ?
9: --方法二,使用默认的目录名称
10: CREATE TABLE MyFileTable2 AS FileTable
11: GO
建立完成后您可以在刚刚建立好的数据库属性中看到类似下图的结果:
若顺利建立成功,您将于【Object Explorer > 数据库名称 > Tables > FileTables】项下看到您建立的 FileTable,同时您可以看到 SQL Server 可以帮您管理非结构化文件中的那些资讯(如下图)。
本文就先介绍到此,下一篇文章,笔者将介绍如何把文件纳入 SQL Server 2012 的 FileTables 管理。
【参考数据】
- FileTables (SQL Server)
原文:大专栏 SQL Server 2012 FileTables 简介
原文地址:https://www.cnblogs.com/chinatrump/p/11516469.html