SQL Server ->> FileTable
FileTable是SQL Server 2012的新特性之一。它是基于SQL Server 2008的FILESTREAM特性上而来的,允许我们把Windows文件存储在SQL Server中,让SQL Server可以存储非结构化的数据。也就是存是存在SQL Server中,像backup这种SQL Server这种操作也可以兼顾到,但是对于文件的访问时是通过Windows文件系统来访问的。FileTable和Windows文件的命名空间达到兼容,还可以和SQL Server的全文索引(fulltext)和语义搜索(semantic search)结合。以往我们都是通过文件服务器来管理文件,由于SQL Server提供了对文件管理的支持和整合,所以FileTable成了和应用程序相结合起来管理文件的一个好的办法,而且它又具备了一些SQL Server的特性,比如backup的支持,而应用程序可以如常的从文件系统的角度去访问文件。
和Windows达到兼容性
既然和Windows达到兼容性,那么FileTable(或者它自身具备的FileStream的特性)就应该是和具备Windows API的一些特性,如:
1)非事务型流数据访问和就地(原)文件更新;
2)层级命名空间(文件目录结构和文件);
3)文件属性,如文件创建日期和修改日期;
4)对Windows文件和目录的管理;
FileTable的结构
FileTable的结构是固定是。表中的每一行数据代表了一个文件,表中的栏位代表了文件的一些属性列,像文件创建时间和修改时间,以及文件的路径。参考FileTable Schema
我们都知道FILESTREAM是基于Windows文件系统的共享功能,那么FileTable也不例外。我们通过在FILESTREAM共享路径下创建根路径给一张FileTable。FileTable和T-SQL也是结合的,允许被更新和查询数据。
Windows文件系统和SQL Server间的整合
对FILETABLE根目录的任何改动,比如对文件的创建更新删除都会反映到FILETABLE表中。
事务性和非事务性
FileTable作为一张SQL Server表,表的数据更新是支持事务性的。但是由于对文件的操作是属于一个Windows文件系统的操作行为,是不具备事务性的。而FILESTREAM其实是支持事务性的。
FileTable和FileStream的关系
FileTable依赖于FileStream特性。FileTable本身是需要启用non-transactional access选项,但是不代表说FileStream本身是必须开启这个选项的。也就是如果我不使用FileTable,我再添加FILESTREAM FILEGROUP的时候是不需要启用non-transactional access选项。其次,FileStream可能包含FileTable的数据和其他应用程序的数据,然后FileTable的non-transactional access选项并不对其他的数据造成影响。
使用FileTable前先开启FileStream功能,这个功能要么你在安装的时候就勾选启用选项,要么你就开启server-level configuration。需要说明由于filestream功能使用了139和445端口,所以防火墙要允许139(inbound)和445(inbound)端口。
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
再开启数据库的filestream功能
ALTER DATABASE JerryDB
SET FILESTREAM
(
NON_TRANSACTED_ACCESS = FULL,
DIRECTORY_NAME = N'FileTable1'
);
加入一个FILESTREAM FILEGROUP到当前数据库
ALTER DATABASE JerryDB
ADD FILEGROUP FILESTREAM_FG
CONTAINS FILESTREAM;
为当前的文件组添加一个共享路径
ALTER DATABASE JerryDB
ADD FILE
(
NAME= 'FILESTREAM_File1',
FILENAME = 'F:\Database Log Files\FILESTREAM_File1'
)
TO FILEGROUP FILESTREAM_FG;
数据库的配置完成后就可以创建filetable了。除了下面两个选项,还可以指定表的主键约束等三个约束的名字
CREATE TABLE DemoFileTable AS FILETABLE
WITH
(
FILETABLE_DIRECTORY = 'FileTable1',
FILETABLE_COLLATE_FILENAME = database_default
);
GO
创建完表之后你可以通过Windows Explorer在FileStream共享路径下新建、删除、修改文件,共享路径为
\\SERVERNAME\FILESTREAM_WINDOWS_SHARE_NAME\FILESTREAM_TABLE_NAME\FILETABLE_DIRECTORY\
结果也会反映到FileTable中。你甚至可以更新文件的名字、创建日期、修改日期等。这些改动同样会反映到文件本身的NTFS文件系统属性。
获取文件完整路径
SELECT FileTableRootPath()+[file_stream].GetFileNamespacePath(),
GetPathLocator(FileTableRootPath()+[file_stream].GetFileNamespacePath()),
path_locator
FROM [JerryDB].[dbo].[DemoFileTable]
参考:
Full Text Searches on Documents in FileTables
FileTable Feature in SQL Server 2012
SQL Server ->> FileTable的更多相关文章
- SQL Server 2012 新特性:FileTable
FileTable是基于FILESTREAM的一个特性.有以下一些功能: 一行表示一个文件或者目录. 每行包含以下信息: file_Stream流数据,stream_id标示符(GUID). 用户表示 ...
- SQL Server 2012新特性(1)T-SQL操作FileTable目录实例
在SQL Server 2008提供FileStream,以借助Windows系统本身的API来强化SQL Server对于非结构化数据的支持后,SQL Server 2012更是推出了像Contai ...
- 【转】使用SQL Server 2012的FileTable轻松管理文件
一 .FileStream和FileTable介绍 我们经常需要把结构化数据(int.Char等)和非结构化数据(如Varbinary(max))一起存储,那我们在怎么存储的呢? 1. 在SQL Se ...
- SQL SERVER 2014 各个版本支持的功能
转自:https://technet.microsoft.com/library/cc645993 转换箱规模限制 功能名称 Enterprise Business Intelligence Stan ...
- SQL Server 2012 各版本功能比较
有关不同版本的 SQL Server 2012 所支持的功能的详细信息. 功能名称 Enterprise 商业智能 Standard Web Express with Advanced Service ...
- SQL SERVER 自带系统存储过程分类
目录存储过程 用于实现 ODBC 数据字典功能,并隔离 ODBC 应用程序以使其不受基础系统表更改的影响. 变更数据捕获存储过程 用于启用.禁用.或报告变更数据捕获对象. 游标存储过程 用于实现游标变 ...
- SQL Server主要系统视图说明
SELECT * FROM sys.all_columns --显示属于用户定义对象和系统对象的所有列的联合--https://docs.microsoft.com/zh-cn/sql/relatio ...
- SQL Server Replication 总结
合并复制中,数据库架构的更改要重新生成发布端的快照 在SQL Server 合并复制中,如果在发布端做了数据库架构的更改(例如新建表,更改表结构等),原则上来说都需要重新生成发布端的快照,订阅端才能同 ...
- SQL Server 2017 on Linux
此文转载,原文地址:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-whats-new CTP 2.0 The CTP 2.0 ...
随机推荐
- Ubuntu 18.04上搭建FTP服务器
1.准备工作需要安装并运行的Ubuntu Server 18.04系统.当然还需要一个具有sudo权限的账号. 2.安装VSFTPVSFTP程序位于标准存储库中,因此可以使用单个命令删除安装.打开终端 ...
- Ubuntu 16.04安装IntelliJ出品的数据库管理工具DataGrip
IntelliJ出品的东西有一个共同特定,就是代码提示做的非常好. DataGrip是除了MySQL Workbench之外的另一个选择. 一.下载 https://www.jetbrains.com ...
- python 冒泡和快排,不多说
#-*-coding:utf8-*- import random a=[] b=[] def init_array(): for i in range(10000): v = random.randi ...
- 从websphere6.1迁移到weblogic10.3的问题总结--转
http://blog.itpub.net/9399028/viewspace-692974/ 以前用weblogic低版本的时候,感觉挺容易的,也没什么要注意的,这次真正把应用从websphere迁 ...
- haproxy 503 service unavailable no server is avaible to handle this request
原因: haproxy 对server检测时是对默认页面进行检测,如果没有默认错误,则直接报503错误,不会转发到相应的server上去. 解决方法: 添加 option httpchk 检测页面位置 ...
- Git命令学习笔记
一.本地代码增,删,改,查,提交,找回git checkout . //抛弃工作区所有修改git checkout -- <file> //抛弃工作区& ...
- Require.js 源码分析
本文将简单介绍下个人对require.js的源码分析,简单分析实现原理 一.require加载资源的流程 require中,根据AMD(Asynchronous Module Definition)的 ...
- php 命名空间与文件引入
问题描述:这两天试着自己写一些东西,也是为了复习一下忘了的PHP基础知识,但是写到命名空间的时候遇到了一点问题,在这记录一下:当我写好文件之后,添加了命名空间,结果一直提示命名空间下类不存在,一直以为 ...
- 限流(四)nginx接入层限流
一.nginx限流模块 接入层指的是请求流量的入口,我们可以在这里做很多控制,比如:负载均衡,缓存,限流等. nginx中针对限流有两个模块可以处理: 1)ngx_http_limit_req_mod ...
- CSS实现响应式布局(自动拆分几列)
1.css代码 <style type="text/css"> .container{ margin-top: 10px; } .outerDiv{ float:lef ...