SQL Server 2012 FileTables 简介

本文将介绍有关 SQL Server 2012 FileTables。

大家都知道像是 SQL Server 这类的关联式数据库擅长处理大量结构化数据,对于文件或目录这类型的非结构化数据的管理及查询,相对而言比较难以处理。

以一般网站应用程序开发为例,常常会需要提供使用者透过浏览器上传文件的功能,应用程序要如何记录这些文件的相关资讯,大致上都是采用这两种方法,一是只在 DBMS 中纪录文件名称、大小、类型等资讯,实际文件还是存放在文件系统当中,二是把上传的文件转成二进制后保存到 DBMS 中。

上述两种方法都有其优缺点,前者的问题会在于当您备份数据库时,保存在文件系统中的文件或目录,需要自行想办法做备份,换言之,数据库和实例文件是独立的。后者将实例文件转成二进制数据,容易在性能上或保存空间上衍生问题。

现在这个难题在 SQL Server 2012 新增特殊数据表(FileTables)已经可以解决大部分的问题,它是以 FILESTREAM 技术为基础,并提供和全文检索(Full-Text Searc)和语义搜寻(Semantic Search)等进阶搜寻功能整合。透过 FileTables 您可以只利用 T-SQL 就可以读取文件、目录阶层及文件属性等资讯,并且可以和备份功能整合,将来只要备份数据库,就会连同 FileTables 中的文件或目录一同备份,又不会衍生性能或数据库保存空间的问题。接下来笔者就来介绍如何设定并使用 FileTables。

启用 FileTables 有几个必要条件,说明如下:

  1. 执行个体层级必须启用 FILESTREAM。
  2. 必须为 FILESTREAM 建立专用的文件群组。
  3. 在数据库层级起用非事务式存取(Non-transactional access)。
  4. 建立 FileTables 数据表。

特别一提的是,假设您的 SQL Server 是安装在 64 位的操作系统上,而您的 SQL Server 是安装 32 位版本,您将无法启用 FILESTRAM 功能,这点是在规划安装 SQL Server 前必须先考虑清楚的。

接着笔者说明上述四个步骤应该如何进行:

  1. 执行个体层级必须启用 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
  2. 必须为 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
  3. 建立完成后您可以在刚刚建立好的数据库属性中看到类似下图的结果:

  4. 在数据库层级起用非事务式存取(Non-transactional access)。

  5. 建立 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

时间: 2024-11-07 15:02:33

SQL Server 2012 FileTables 简介的相关文章

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

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

SQL SERVER 2012 SEQUENCE

一.Sequence简介 Sequence对象对于Oracle用户来说是最熟悉不过的数据库对象了, 在SQL SERVER2012终于也可以看到这个对象了.Sequence是SQL Server2012推出的一个新特性.这个特性允许数据库级别的序列号在多表或多列之间共享. 二.Sequence基本概念 Oracle中有Sequence的功能,SQL server类似的功能要使用identity列实现,但是identity列有很大的局限性.微软终于在2012中添加了Sequence对象.与以往id

SQL Server 2012 FileTable 文件表

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

SQL Server 2012中的AlwaysOn尝试

简介 SQL Server2012中新增的AlwaysOn是一个新增高可用性解决方案.在AlwaysOn之前,SQL Server已经有的高可用性和数据恢复方案,比如数据库镜像,日志传送和故障转移集群.都有其自身的局限性.而AlwaysOn作为微软新推出的解决方案,提取了数据库镜像和故障转移集群的优点.本文旨在通过实现一个AlwaysOn的实例来展现AlwaysOn. 配置AlwaysOn 虽然AlwaysOn相比较之前版本的故障转移集群而言,步骤已经简化了许多.但配置AlwaysOn依然是一件

翻译之:SQL Server统计信息简介

本文选自<Pro SQL Server Internals> 作者: Dmitri Korotkevitch 出版社: Apress 出版年: 2016-12-29 页数: 804 作者简介:Dmitri Korotkevitchis是微软SQL Server MVP和微软认证大师.作为应用程序和数据库开发人员.数据库管理员和数据库架构师,他具有多年使用SQL Server的经验.他专门从事OLTP系统在高负载下的设计.开发和性能调优.Dmitri经常在各种Microsoft和SQL PASS

sql server版本特性简介、版本介绍简介

1.SQL Server 版本简介 1.1.sql server的版本信息 年    代 版    本 大版本号 1993年 SQL Server for Windows NT 4.21 1994年 SQL Server for Windows NT 4.21a 1995年 SQL Server 6.0 1996年 SQL Server 6.5 1998年 SQL Server 7.0 7.00 2000年 SQL Server 2000 8.00 2003年 SQL Server 2000 E

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使用Offset/Fetch Next实现分页

在Sql Server 2012之前,实现分页主要是使用ROW_NUMBER(),在SQL Server2012,可以使用Offset ...Rows  Fetch Next ... Rows only的方式去实现分页数据查询. select [column1] ,[column2] ... ,[columnN] from [tableName] order by [columnM] offset (pageIndex-1)*pageSize rows fetch next pageSize r