SQL Server 2012 开发新特性:文件表
转载于 春哥
一、启用FileTable
1、修改数据库引擎的属性
打开“SQL Server配置管理器”,修改SQL Server数据库引擎的属性。使用此页可针对此 Microsoft SQL Server 2012安装启用 FILESTREAM。
(1)针对 Transact-SQL 访问启用 FILESTREAM
选中此项可针对 Transact-SQL 访问启用 FILESTREAM。 必须选中此控制选项,才能使用其他控制选项。如果不启用此选项,就不能添加FileStream文件组。
(2)针对文件 I/O 流访问启用 FILESTREAM
选中此项可针对 FILESTREAM 启用 Win32 流访问。
(3)Windows 共享名
使用此控制选项可输入将用来存储 FILESTREAM 数据的 Windows 共享的名称。默认为该SQL Server实例的名称。
(4)允许远程客户端针对 FILESTREAM 数据启用流访问
选中此控制选项可允许远程客户端访问此服务器上的此 FILESTREAM 数据。
2、修改服务器的属性
打开“SQL Server Management Studio”,修改该实例的配置。默认配置如下:
上述选项解释如下:
(1)“FILESTREAM 访问级别”显示 SQL Server 实例上支持的 FILESTREAM 的当前级别。若要更改访问级别,请选择以下值之一:
已禁用
无法将二进制大型对象 (BLOB) 数据存储在文件系统中。此为默认值。即filestream access level=0
已启用 Transact-SQL 访问
可使用 Transact-SQL 访问 FILESTREAM 数据,但不能通过文件系统进行访问。即filestream access level=1
已启用完全访问
FILESTREAM 数据可使用 Transact-SQL 以及通过文件系统进行访问。即filestream access level=0
注意:在首次启用 FILESTREAM 时,您可能需要重新启动计算机才能配置驱动程序。
(2)“FILESTREAM 共享名称”显示在安装过程中选择的 FILESTREAM 共享的只读名称。
在本次实验中,我们将“FILESTREAM 访问级别” 设定为:已启用完全访问。
如果是通过T-SQL脚本执行,则运行以下脚本:
EXEC sys.sp_configure N'filestream access level', N'2'
RECONFIGURE WITH OVERRIDE
注意:设置完成之后,重启实例。
3、配置防火墙
若要在防火墙保护的环境中使用 FILESTREAM,客户端和服务器都必须能够将 DNS 名称解析为包含 FILESTREAM 文件的服务器。FILESTREAM 要求 Windows 文件共享端口 139 和 445 处于打开状态。
二、配置文件组
1、添加文件组
完成上述操作之后,就可以为该数据库添加专用于FileStream的文件组。
如果是通过脚本操作,请运行以下脚本:
ALTER DATABASE [db01] ADD FILEGROUP [FileStreamFileGroup] CONTAINS FILESTREAM
2、添加文件
完成上述操作之后,就可以为该数据库添加FilStream类型的数据库文件。
在本例中,系统并没有为“FileStream数据”的文件类型创建mdf或ndf文件,而是在文件夹C:\SqlData下面自动创建以逻辑名称命名的文件夹,即 C:\SqlData\FileData。其中filestream.hdr 文件是 FILESTREAM 容器的头文件。当这个数据库被删除时,mdf、ndf、log连同这个文件夹都会被删除。
如果是通过脚本操作,请运行以下脚本:
ALTER DATABASE [db01] ADD FILE ( NAME = N'FileData', FILENAME = N'C:\SqlData\FileData' ) TO FILEGROUP [FileStreamFileGroup]
注意:在上例中,在运行脚本之前,必须存在C:\SqlData,建议使用右侧的选择按钮选择路径。如果路径不存在,就会报错:
同时不能存在重复的文件夹,即不能存在C:\SqlData\FileData。否则也会报错:
3、启动非事务访问
FileTable 使 Windows 应用程序可以获取 FILESTREAM 数据的 Windows 文件句柄而不需要 SQL Server 事务。为了允许对 SQL Server 中存储的文件进行此非事务性访问,必须为要包含 FileTable 的每个数据库在数据库级别上指定所需的非事务性访问级别。
选项解释如下:
(1)FILESTREAM 非事务访问
为从文件系统到 FileTables 中存储的 FILESTREAM 数据的非事务性访问指定以下选项之一:OFF、READ_ONLY 或 FULL。
如果在服务器上未启用 FILESTREAM,则该值将设置为 OFF 并且被禁用。在本次实验中,将其设置为FULL。
(2)FILESTREAM 目录名称
为与所选数据库相关联的 FILESTREAM 数据指定目录名称。在 FileTable 文件夹层次结构中,此数据库级目录将成为在实例级别为 FILESTREAM 指定的共享名称的子级以及在数据库中创建的 FileTable 的父级。
如果启用非事务性访问时没有提供目录名称,则在以后必须提供它,这样才能在数据库中创建 FileTable。
如果是通过脚本执行,如下:
ALTER DATABASE db01
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'ImageFiles' )
注意:更改现有数据库时,调用带 DIRECTORY_NAME FILESTREAM 选项的 ALTER DATABASE (Transact-SQL) 语句。使用这些选项更改目录名称时,数据库必须以独占方式锁定,没有打开的文件句柄。
说明:为检查是否在数据库上启用了非事务性访问,可以查询目录视图,脚本如下:
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options
三、创建FileTable
1、创建第一个FileTable
“SQL Server Management Studio”只提供一个脚本模板,要想创建FileTable还是得用脚本完成:
USE db01
CREATE TABLE ImageTable1 AS FILETABLE
官方的范本为:
USE [db01]
CREATE TABLE [dbo].[ImageTable1] AS FILETABLE ON [PRIMARY] FILESTREAM_ON [FileStreamFileGroup]
WITH
(FILETABLE_DIRECTORY = N'ImageTable1', FILETABLE_COLLATE_FILENAME = Chinese_PRC_CI_AS)
2、创建第二个FileTable
CREATE TABLE ImageTable2 AS FILETABLE
3、获取共享路径
文件表创建之后,就会相应的产生一个文件表共享目录,该目录路径可以通过内建函数获取:
SELECT FileTableRootPath('ImageTable1')
本次实验所返回的结果为:\\SQL1\SqlFile\ImageFiles\ImageTable1
4、查看
通过Windows资源管理器,可见已经创建了以GUID命名的文件夹。
通过SQL Server Management Studio,查看表的结构。
四、操作
1、向文件夹中添加文件
通过 “Windows资源管理器”,向文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1中添加一个文件A01.GIF。然后运行脚本:
select * from ImageTable1
结果如下:
可见, SQL Server自动在Table中添加了记录。
2、文件改名
运行以下脚本:
update ImageTable1 set name='Cup.GIF' where name='A01.GIF'
通过“Windows资源管理器”,查看文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1,可见文件A01.GIF已经被改名为Cup.GIF 。
3、查看共享文件夹
我们可以继续复制其他文件,然后通过“Windows资源管理器”,查看文件夹。
4、删除文件
可以使用脚本删除,例如:
Delete ImageTable1 where name='Cup.GIF'
或者,通过“Windows资源管理器”直接删除该文件。
五、备份和还原
1、备份数据库
使用 SQL Server 备份数据库时,FILESTREAM 数据将与数据库中的结构化数据一起备份。
2、部分备份
如果不想将 FILESTREAM 数据与关系数据一起备份,则可以使用部分备份将 FILESTREAM 文件组排除在外。
六、相关说明
详见 http://msdn.microsoft.com/zh-cn/library/gg492086.aspx
1、AlwaysOn
在包含 FILESTREAM 或 FileTable 数据的数据库属于某一 AlwaysOn 可用性组时:
FILESTREAM 和 FileTable 函数接受或返回虚拟网络名称 (VNN),而非计算机名称。有关这些函数的详细信息,请参阅 Filestream 和 FileTable 函数 (Transact-SQL)。
通过文件系统 API 对 FILESTREAM 或 FileTable 数据进行的所有访问都应该使用 VNN,而非计算机名称。
2、表分区
FileTable 不支持分区。通过对多个 FILESTREAM 文件组的支持,在大多数方案中可以解决纯向上扩展问题,而不必使用分区(不像 SQL 2008 FILESTREAM)。
3、复制
FileTable 不支持复制和相关功能(包括事务性复制、合并复制、更改数据捕获和更改跟踪)。
4、视图
可以像为任何其他表一样为 FileTable 创建视图。但是对于为 FileTable 创建的视图有以下注意事项:
视图将不具有任何 FileTable 语义,也就是说,视图中的列(包括“文件属性”列)的行为与常规视图列一样,不具有任何特殊语义,对于表示文件/目录的行也是如此。
可以基于“可更新视图”语义更新视图,但是基础表约束可能拒绝更新,就像在表中一样。
可以通过将文件的路径添加为视图中的显式列,在视图中显示该路径。例如:
CREATE VIEW MP3FILES AS SELECT column1, column2, …, GetFileNamespacePath() AS PATH, column3,… FROM Documents
SQL Server 2012 开发新特性:文件表相关推荐
- SQL Server 2012 安全新特性:包含数据库
SQL Server 2012 新特性(二)安全新特性:包含数据库 一.启用功能 1.修改服务器(实例)的属性 否则,在修改数据库的属性时会报错: 2.修改服务器(实例)的安全性 否则,连接时报错: ...
- SQL Server 2012 管理新特性:AlwaysOn
Server 2012 新特性(一)管理新特性:AlwaysOn 一.准备环境 1.准备4台计算机 域控制器DC1,IP地址192.168.1.1,子网掩码255.255.255.0,默认网关192. ...
- SQL Server 2012 开发新功能 序列对象(Sequence)
众所周知,在之前的sqlserver版本中,一般采用GUID或者identity来作为标示符,但是identity是一个表对象,只能保证在一张表里面的序列,当我们遇到以下情况时, 表1 ID 订单类型 ...
- SQL Server 2008 R2 新特性之一
2008年8月6日,微软发布了SQL Server 2008正式版,时至今日,大部分企业还在使用SQL Server 2000和2005. SQL Server 2008 中还是增加了不少新特性的 , ...
- [译]用Visual Studio2012来开发SQL Server 2012商业智能项目
出自微软官方分析服务和PowerPivot官方博客. 原文地址: http://blogs.msdn.com/b/analysisservices/archive/2013/03/06/sql-ser ...
- Win7 安装SQL SERVER 2012需要SP1补丁
在操作系统Win7上安装SQL Server 2012时,报如下错误: 也就是说SQL Server 2012如要要安装在Windows 7 上,则至少需要安装SP1补丁.否则就会弹出上面提示信息.关 ...
- sql数据库服务器端口修改,SQL SERVER 2012更改默认的端口号为1772
打开开始菜单,找到sqlserver的配置管理器,点击打开 按下图配置右边窗口三项: 按下图配置右边三项: 按下图配置右边三项: 点击下图左边的SQL Server网络配置/MSSQLSERVER的协 ...
- 解读SQL Server 2012中的最新BI功能
如果SQL Server 2008 R2的重点是让商务智能(BI)的使用者像使用自助服务一样便捷,那么SQL Server 2012则是让自助服务BI这一概念延伸至让IT人员更容易进行管理. 事实上, ...
- 《SQL Server 2012 学习日记 》——初识SQL Server 2012
初识SQL Server 2012 1.1 SQL Server 2012 的优势 SQLServer 2012基于SQL Server 2008,其提供了一个全面的.灵活的和可扩展的数据仓库管理平台 ...
最新文章
- python3环境下“No module named nrrd”的解决办法
- centos 6.3 安装reids
- ECCV 2018 | CornerNet:目标检测算法新思路
- 艾默生变频器ev1000故障代码_国产变频器型号大全,梳理国产变频的前世今生!...
- 新基建系列之:中国城市人工智能发展指数报告
- Theory and tools for the conversion of analog to spiking convolutional neural networks
- 【转】软件开发常用术语
- M3 Build6801 Discovery support Virtual Hard Disks
- MIMO-OTFS in High-Doppler Fading Channels:Signal Detection and Channel Estimation(4)
- [转] C# mysql 事务回滚
- 同步(双向)BUCK电路设计
- Win10加Ubuntu20.04双系统安装教程
- 016画笔工具、铅笔工具、颜色替换工具和混合器画笔工具
- GD32E230_timer2解析SIF通讯协议
- ionic开发记账软件《易跟金》
- 【C# 教程系列第 11 篇】什么是抽象类、抽象方法
- Windows 7中C:/Users/用户名/AppData里面的文件概述
- 【安卓学习笔记】界面编程入门
- EmguCV入门(一)
- word添加参考文献和标注的详细简单方法
热门文章
- cocos2dx-js 截屏 (原生 + H5)
- MySql表大小、行大小和列大小的限制
- ajax数据显示,使用js通用模板
- nsautoreleasepool研究
- leetcode - Minimum Depth of Binary Tree
- centOS 6.4 vsftpd 500 illegal port command
- 《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:紧凑型切片制作(Server缓存切片)...
- AJAX(XMLHttpRequest)进行跨域请求方法详解(二)
- ApacheCN 大数据译文集(二) 20211206 更新
- PyTorch 1.0 中文官方教程:torch.nn 到底是什么?