SqlServer2012 File Table文件表
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 功能的兼容性
SqlServer2012 File Table文件表的更多相关文章
- mysql之repair table 修复表札记
REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[,tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] REP ...
- Magento table rates表运费设置
在magento中集成了Table rate表运费,这种运输方式.表运费就是我们自己写个运费表,根据距离和商品重量设置运费,制做成一张csv格式的表,导入到magento中,来实现运费的控制. 在我的 ...
- 14.10.4 Defragmenting a Table 整理表
14.10.4 Defragmenting a Table 整理表: 随机插入或者删除从一个secondary index 可以导致index变的fragmented Fragmentation意味着 ...
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- 【原创】访问Linux进程文件表导致系统异常复位的排查记录
前提知识: Linux内核.Linux 进程和文件数据结构.vmcore解析.汇编语言 问题背景: 这个问题出自项目的一个安全模块,主要功能是确定某进程是否有权限访问其正在访问的文件. 实现功能时,需 ...
- Oracle学习——dmp文件(表)导入与导出
Oracle学习——dmp文件(表)导入与导出 2014-12-28 0个评论 来源:张文康 廊坊师范学院信息技术提高班 第九期 收藏 我要投稿 前言 关于dmp文件我们用的 ...
- Java使用HTTP编程模拟多参数多文件表单信息的请求与处理
本文目的是提供Java环境下模拟浏览器页面提交多参数多文件表单请求以及解析请求的Demo代码.这里用Java提供的HttpURLConnection类做HTTP请求,再原始点可以直接使用socket. ...
- SpringMVC 完美解决PUT请求参数绑定问题(普通表单和文件表单)
一 解决方案 修改web.xml配置文件 将下面配置拷贝进去(在原有的web-app节点里面配置 其它配置不变) <!-- 处理PUT提交参数(只对基础表单生效) --> <filt ...
- linux 文件描述符表 打开文件表 inode vnode
在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数.Linux中规定每个进程能最多能同时使用NR_OPEN个文件 ...
随机推荐
- Dubbo 序列化协议 5 连问,你接得住不?
1)dubbo 支持哪些通信协议? 2)支持哪些序列化协议? 3)说一下 Hessian 的数据结构? 4)PB 知道吗? 5)为什么 PB 的效率是最高的? 面试官心理分析 上一个问题,说说 dub ...
- PHP 堆 栈 数据段 代码段 存储的理解
对象在PHP里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢? 内存从逻辑上说大体上是分为4段,栈空间段.堆空间段 ...
- python是强语言还是弱语言?
python是强语言还是弱语言,没有一个具体官方的说法 数据类型也就是变量类型,一般编程语言的变量类型可以分成下面两类. 静态类型与动态类型 静态类型语言:一种在编译期间就确定数据类型的语言.大多数静 ...
- 并发编程时守护进程在pycharm与python shell中的运行结果不同
原代码如下 from multiprocessing import Process import time import random def task(name): print('%s is run ...
- 【转】海量数据解决思路之BitMap
转载(http://zengzhaozheng.blog.51cto.com/8219051/1404108) 一.概述 本文将讲述Bit-Map算法的相关原理,Bit-Map算法的一些利用场景,例如 ...
- 使用`html-webpack-plugin`插件配置启动页面
由于使用`--contentBase`指令的过程比较繁琐,需要指定启动的目录,同时还需要修改index.html中script标签的src属性,所以推荐大家使用`html-webpack-plugin ...
- 看CLRS 对B树的浅显理解
定义及特点: 每个结点有n个关键字和n+1个指向子结点的指针,即有n+1个孩子结点. n个关键字按非递减的顺序存储. 最小度数t>=2,除了根结点的所有内部结点(非叶结点)的孩子数>=t且 ...
- rest_framework框架的基本组件
快速实例 Quickstart 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式. ...
- GUI学习之二十九—QInputDialog学习总结
最后一种对话框是QInputDialog,,用来提供个输入的窗口. 一常用的静态方法 由于输入的类型不同,QInputDialog分为多种静态方法使用 #有步长调节器的整形数据,step为步长调节器的 ...
- php内置函数分析之array_combine()
PHP_FUNCTION(array_combine) { HashTable *values, *keys; uint32_t pos_values = ; zval *entry_keys, *e ...