[SQLServer大对象]——FileTable初体验

在我接触FileTable之前,存储文件都是存储文件的链接和扩展名到数据,其实并没有实际的把文件存储到数据库。

FileTable不同于一般的表,他可以存储非结构数据和元数据(如:文件、文档),存储的文件可以像普通的文件一样通过一个路径被访问,而且不必对客户端程序修改。

FileTable 不支持内存映射文件。 “记事本”和“画图”是两个常见的使用内存映射文件的示例应用程序。 不能在 SQL Server 所在的计算机上使用这些应用程序来打开存储在 FileTable 中的文件。 但是,可以从远程计算机使用这些应用程序来打开存储在 FileTable 中的文件,因为在这些情况下不使用内存映射功能

启用FILESTREAM设置

1.  开始菜单 –> 所有程序 –> Microsoft SQL Server Code-Named 2012 –> 配置工具 –>选择SQL配置管理器

当然这么一个接着一个的用鼠标点,有点不像搞IT的同学,那么专业一点,使用命令 SQLServerManager10.msc,如果是SQL2005使用 SQLServerManager.msc 打开。

2. 在服务列表中,单击 SQL Server服务器

3. 在 SQL Server配置管理器中,找到 FILESTREAM 的 SQL Server 实例,右键该实例 –> 点击属性

4. SQL Server属性对话框 –> FILESTREAM 选项卡

5. 勾选 Transact-SQL访问启用FILESTREAM 复选框

6. 如果要在Windows中读取和写入 FILESTREAM 数据勾选针对文件I/O流访问启用 FILESTRAM,在Windows共享名框中输入 Windows 共享名称

    这里配置后,FileTable创建好后,就可以想操作本地文件一样在FileTable中操作文件。

7. 如果希望远程访问存储在该共享中的 FILESTREAM 数据,勾选允许远程客户端针对 FILESTREAM 数据流访问

8. 应用

更改FILESTRAM设置

在SQL Server Managerment studio中,使用Transact-SQL修改配置

   1:  EXEC sp_configure filestream_access_level, 2
   2:  RECONFIGURE 

执行之后,需要重新启动 SQL Server 服务

创建启动 FILESTRAM 的数据库

在SQL Server Managerment studio中,使用Transact-SQL创建数据库

   1:  CREATE DATABASE  Archive
   2:  ON
   3:  PRIMARY ( NAME = ArchiveMDF,
   4:      FILENAME = 'C:\MyData\archdat.mdf'),      -- C:\MyData路径必须存在
   5:  FILEGROUP FileStreamGroupFirst CONTAINS FILESTREAM( NAME = ArchiveFILESTREAM,
   6:      FILENAME = 'C:\MyData\MyFileStream')      -- C:\MyData路径下MyFileStream文件夹必须不存在
   7:  LOG ON  ( NAME = ArchiveLDF,
   8:      FILENAME = 'C:\MyData\archlog.ldf')
   9:  GO

运行该脚本后

C:\MyData\MyFileStream 文件夹中会出现filestream.hdr 文件和 $FSLOG 文件夹。filestream.hdr 文件是重要的系统文件,它包含 FILESTREAM 头信息。

启用数据库非事务性访问级别

为了允许对 SQL Server 中存储文件进行非事务性访问,须在FileTable的数据上设置数据库非事务性访问级别。

修改数据库非事务性访问级别

   1:  ALTER DATABASE Archive
   2:  SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'MyDirectory' )    -- 指定数据库访问级别和指定目录名字

创建数据库时设置非事务性访问级别

   1:  CREATE DATABASE Archive
   2:  WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'MyDirectory' )-- 指定数据库访问级别和指定目录名字

查看数据库访问级别

   1:  SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
   2:  FROM sys.database_filestream_options;
   3:  GO

FileTable

FileTable 是用户表,具有预定义的结构,为了存储 FILESTREAM 数据、文件和目录信息以及文件属性。因此,创建 FileTable 时不需要指定列,但也可以指定,在此我只用最简单的方式创建和使用FileTable。

不指定用户定义值

   1:  CREATE TABLE DocumentStores AS FileTable;
   2:  GO 

指定用户定义值

   1:  CREATE TABLE DocumentStores AS FileTable
   2:  WITH
   3:  (
   4:      FileTable_Directory = 'DocumentStores',
   5:      FileTable_Collate_Filename = database_default
   6:  );
   7:  GO 

在没有指定用户定义值时,FILETABLE_DIRECTORY 的值将为 FileTable 的名称,FILETABLE_COLLATE_FILENAME 的值仍为database_default。

此时,就可以在数据库Archive的数据库 –> Tables –> FileTables,可以看到之前创建的FileTable表DocumentStores

在FileTable上右键 –> 浏览,可以直接复制文件到这个目录,图中我新建一个文本文档。

也可以使用语句进行查询

FileTable注意

不能将现有表转换为FileTable。

必须完成上面的步骤启用FILESTREAM设置更改FILESTRAM设置

由于FileTable 包含一个 FILESTREAM 列,因此FileTable 需要有效的 FILESTREAM 文件组。

不能在tempdb或任何其他系统数据库中创建FileTable。

不能将FileTable作为临时表。

不能更改 FILETABLE_COLLATE_FILENAME 的值。

不能更改、删除或禁用 FileTable 系统定义的列。

不能将新的用户列、计算列或持久化计算列添加到 FileTable。

删除FileTable时,将删除 FileTable 的所有列以及与该表关联的所有对象,如索引、约束和触发器。

删除FileTable时,FileTable 目录及其子目录将从数据库的 FILESTREAM 文件和目录层次结构中消失。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的SOD蜜

Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持

一、Oracle XE 数据库与连接工具安装使用 Oracle数据库历来以价格昂贵出名,当然贵有贵的道理,成为一个Oracle DBA也是令人羡慕的事情,如果程...

54170
来自专栏决胜机器学习

《高性能MySQL》读书笔记(二) ——MySQL存储引擎概述

《高性能MySQL》读书笔记(二)——MySQL存储引擎概述 (原创内容,转载请注明来源,谢谢) 一、基础信息 mysql将数据库保存在数据目录下...

41550
来自专栏实用工具入门教程

如何部署 ZABBIX 监控系统

Zabbix是用于网络和应用程序的开源监控软件。它提供对从服务器,虚拟机和任何其他类型的网络设备收集的数千个指标的实时监控。这些指标可帮助您确定IT基础架构当前...

35420
来自专栏流柯技术学院

MYSQL设置远程账户登陆总结

打开 /etc/mysql/my.cnf 文件,找到 bind-address = 127.0.0.1 修改为 bind-address = 0.0.0.0

23430
来自专栏MYSQL轻松学

MYSQL数据闪回方式

MYSQL官方截止目前还没有出来数据闪回特性,也许后续版本会出现。社区有一些开源工具可以使用,沿用的基本都是彭立勋最早提出的思路,利用binlog对SQL进行反...

45680
来自专栏ImportSource

白话数据库中的MVCC

说MVCC(Multiversion concurrency control,多版本并发控制)之前,先从数据库的ACID说起。ACID其中一个就是I。也就是Is...

61850
来自专栏禁心尽力

关于事务

何为事务? 1.事务是指事务开始到事务结束之间的一组sql语句的操作单元,并且是组内所有sql语句共同完成的业务逻辑。 2.要想使用事务,首先关闭系统自动提交功...

20750
来自专栏散尽浮华

mysql数据库误删除后的数据恢复操作说明

在日常运维工作中,对于mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失! 然后,是人总难免会犯错误,说不定哪天大...

533110
来自专栏烂笔头

Django 1.10中文文档-第一个应用Part2-模型和管理站点

目录[-] 本教程继续Part1。我们将设置数据库,创建您的第一个模型,并快速介绍Django的自动生成的管理网站。 数据库设置 现在,编辑mysite/s...

37460
来自专栏Java架构师历程

MYSQL 谈谈各存储引擎的优缺点

1、存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。

35520

扫码关注云+社区

领取腾讯云代金券