在SQL Server 2008中,新的FILESTREAM(文件流)特性和varbinary列配合,你可以在服务器的文件系统上存储真实的数据,但可以在数据库上下文内管理和访问,这个特性让SQL Server不仅可以维护好数据库内记录的完整性,也能够维护好数据库记录和外部文件之间的完整性。因为这个特性是在现有的varbinary(max)数据类型之上实现的,开发人员可以轻易地用上这个特性,不用对应用程序的架构进行改动。

FILESTREAM使SQL Server数据库引擎和NTFS文件系统成为了一个整体。Transact-SQL语句可以插入、更新、查询、搜索和备份FILESTREAM数据。FILESTREAM使用NT系统缓存来缓存文件数据。这有助于减少FILESTREAM数据可能对数据库引擎性能产生的任何影响。由于没有使用SQL Server缓冲池,因此该内存可用于查询处理。

在SQL Server中,BLOB可以是将数据存储在表中的标准varbinary(max)数据,也可以是将数据存储在文件系统中的FILESTREAM varbinary(max)对象。数据的大小和应用情况决定您应该使用数据库存储还是文件系统存储。如果满足以下条件,则应考虑使用FILESTREAM:

  • 所存储的对象平均大于1MB。
  • 快速读取访问很重要。
  • 您开发的是使用中间层作为应用程序逻辑的应用程序。

对于较小的对象,将varbinary(max)BLOB存储在数据库中通常会提供更为优异的流性能。

FILESTREAM存储以varbinary(max)列的形式实现,在该列中数据以BLOB的形式存储在文件系统中。BLOB的大小仅受文件系统容量大小的限制。文件大小为2GB的varbinary(max)标准限制不适用于存储在文件系统中的BLOB。

若要将指定列使用FILESTREAM存储在文件系统中,对varbinary(max)列指定FILESTREAM属性。这样数据库引擎会将该列的所有数据存储在文件系统,而不是数据库文件中。

FILESTREAM数据必须存储在FILESTREAM文件组中。FILESTREAM文件组是包含文件系统目录而非文件本身的专用文件组。这些文件系统目录称为“数据容器”。数据容器是数据库引擎存储与文件系统存储之间的接口。

使用FILESTREAM存储时,需要注意以下内容:

  • 如果表包含FILESTREAM列,则每一行都必须具有唯一的行ID。
  • 不能嵌套FILESTREAM数据容器。
  • 使用故障转移群集时,FILESTREAM文件组必须位于共享磁盘资源上。
  • FILESTREAM文件组可位于压缩卷上。

启用FILESTREAM(文件流)

默认情况下,FILESTREAM(文件流)特性是被禁用了的,因此在使用之前,你必须按照下面的步骤配置服务器和数据库实例:

1、要启用服务器实例上的FILESTREAM(文件流),打开SQL Server配置管理器,在SQL Server服务上点击右键,然后点击打开,你会看到一串服务器,在你想要启用FILESTREAM(文件流)的SQL Server实例上点击右键,从右键菜单中选择“属性”,切换到FILESTREAM(文件流)标签,检查“为Transact-SQL访问启用FILESTREAM(文件流)”选项,你也可以在这个标签页为文件I/O流访问启用FILESTREAM(文件流)。

2、要为数据库实例启用FILESTREAM(文件流),执行系统存储过程sp_configure,并设置filestream_access_level参数的值为2,如下:

EXEC sp_configure filestream_access_level, 2

GO

RECONFIGURE

GO

filestream_access_level参数有效的值包括:

◆ 0 在该实例上禁用FILESTREAM(文件流),这是默认值。

◆ 1 为Transact-SQL访问启用FILESTREAM(文件流)

◆ 2 为Transact-SQL和Win32流访问启用FILESTREAM(文件流)

完成服务器和数据库实例配置后,接下来是创建存储数据的真实数据库,因为FILESTREAM(文件流)是专门为存储在文件系统上的二进制数据创建的

3、打开SSMS连接到数据库实例,右击数据库实例,选择“属性”选项,系统将打开SQL Server实例的属性窗口。

4、切换的“高级”选项页,在文件流访问级别下拉列表框中选择“已启用完全访问”选项,如图所示。

5、单击“确定”按钮,然后重启数据库实例,FILESTREAM在数据库实例中设置完成。

在启用了数据库实例的FILESTREAM后,接下来就需要设置数据库的FILESTREAM和创建具有FILESTREAM数据列的表:

6、对应新建的数据库,则在创建数据库时创建FILESTREAM文件组,如果是现有数据库,则使用ALTER DATABASE添加FILESTREAM的文件组,例如对TestDB1数据库添加FILESTREAM的文件组,具体SQL脚本如代码:

ALTER DATABASE [sq_shuntcn] 
ADD FILEGROUP [FileStreamGroup] CONTAINS FILESTREAM --添加FILESTREAM文件组 
GO

ALTER DATABASE [sq_shuntcn] 
ADD FILE ( NAME = N'FileStream', FILENAME = N'C:\FileStream') --添加FILESTREAM文件 
TO FILEGROUP [FileStreamGroup] 
GO

系统将自动创建C:\FileStream文件夹并在其中写入filestream.hdr文件,该文件是 FILESTREAM容器的头文件不能删除,一定要确保在运行该语句之前C:\FileStream并不存在。

7、创建了FILESTREAM文件组后便可创建和修改表,指定某varbinary(max)类型的列包含FILESTREAM数据。例如创建Files表,该表包含FileID和FIleContent列,具体脚本如代码:

CREATE TABLE PhotoAlbum( 
PhotoId int PRIMARY KEY, 
RowId uniqueidentifier ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWID(), 
Description varchar(max), 
Photo varbinary(max) FILESTREAM DEFAULT(0x)

)

按照msdn说明,RowId 列是一个ROWGUIDCOL列,Photo 作为文件存储的列不仅是VARBINARY(MAX)类型 ,同时还需要赋予一个fileStream特性

在创建好FILESTREAM表后即可向其中添加、修改和读取数据。SQL Server支持使用T-SQL和WIN32 API两种方式访问FILESTREAM。

对于T-SQL访问FILESTREAM数据列来说,FILESTREAM是完全透明的,也就是说,T-SQL仍然使用一般的访问varbinary(max)数据列的方式访问,并不会因为是FILESTREAM列而有所不同。

代码访问FILESTREAM数据列参考文章 Using SqlFileStream with C# to Access SQL Server FILESTREAM Data

SQL Server 2008 FILESTREAM特性管理文件的更多相关文章

  1. SQL Server 2008新特性——策略管理

    策略管理是SQL Server 2008中的一个新特性,用于管理数据库实例.数据库以及数据库对象的各种属性.策略管理在SSMS的对象资源管理器数据库实例下的“管理”节点下,如图: 从图中可以看到,策略 ...

  2. SQL Server 2008新特性——更改跟踪

    在大型的数据库应用中,经常会遇到部分数据的脱机和多个数据库的合并问题.比如现在有一个全省范围使用的应用程序,每个市都部署了单独的相同的应用程序服务器和数据库服务器,每个月需要将全省所有市的数据全部汇总 ...

  3. SQL Server 2008中删除errorlog文件的方法

    删除error咯个文件[SSQL\MSSQL10.MSSQLSERVER\MSSQL\Log目录下面] 由于默认情况下,SQL Server 保存 7 个 ErrorLog 文件,名为: ErrorL ...

  4. SQL Server 2008 导入MDF数据库文件

    1.将.MDF和.LDF文件拷到SQL Server2008数据目录,如:\\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\ ...

  5. SQL Server 2008 清空删除日志文件(瞬间日志变几M)

    sql 在使用中每次查询都会生成日志,但是如果你长久不去清理,可能整个硬都堆满哦,笔者就遇到这样的情况,直接网站后台都进不去了.下面我们一起来学习一下如何清理这个日志吧 SQL2008清空删除日志: ...

  6. Sql Server 2008 压缩数据库日志文件

    第一步:将数据库设置为简单模式 选中数据库点右键->属性: 第二步:收缩数日志文件 1, 2,   第三步:将恢复模式改回为完整模式     如果你觉得用UI界面麻烦,那你就用SQL语句吧   ...

  7. SQL Server 2008 清空删除日志文件

    USE [master]GOALTER DATABASE STAR9SQL SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE STAR9SQL SET ...

  8. SQL Server 2008 清空删除日志文件 130G日志 10秒内变10M

    SQL2005: Backup Log DNName with no_log  '这里的DNName是你要收缩的数据库名,自己注意修改下面的数据库名,我就不再注释了. go dump transact ...

  9. SQL Server 2008 收缩日志(log)文件

    USE TestDB; GO ALTER DATABASE TestDB SET RECOVERY SIMPLE; --设置简单恢复模式 GO ); GO ALTER DATABASE TestDB ...

随机推荐

  1. 自己写的一个Yeoman的Generator-Require-Angularjs

    Yeoman是一个常见的工作流,能够很方面的搭建属于自己的脚手架. 这段时间我用闲暇时间写了一个Generator来玩了一下,这个Generator的主要目的是快速建立一个RequireJS+Angu ...

  2. Hadoop - Azkaban 作业调度

    1.概述 在调度 Hadoop 的相关作业时,有以下几种方式: 基于 Linux 系统级别的 Crontab. Java 应用级别的 Quartz. 第三方的调度系统. 自行开发 Hadoop 应用调 ...

  3. 从今天起,记录CEF使用开发心得经验

    已经使用CEF来呈现桌面程序界面大半年了,从来没有写过相关博文.发现网上的中文资料甚至英文已经无法满足我的开发需求,不少问题只得自己探索.在此先谢过网络上各位CEF使用开发博文的贡献者,没有你们我也难 ...

  4. 导出 C/C++ API 给 Lua 使用[转]

    导出 C/C++ API 给 Lua 使用   cocos2d-x 和 quick-cocos2d-x 的底层代码都是使用 C++ 语言开发的.为了使用 Lua 脚本语言进行开发,我们利用 tolua ...

  5. android 开发环境

    http://blog.csdn.net/shulianghan/article/details/38023959

  6. Github的基本配置与使用

    第一步:尝试创建SSH key ssh-keygen -t rsa -C xxxxx@gmail.com 默认在~/.ssh目录生成id_rsa与id_rsa.pub. -t代表密钥类型,常见的类型有 ...

  7. itextpdf JAVA 输出PDF文档

    使用JAVA生成PDF的时候,还是有些注意事项需要处理的. 第一.中文问题,默认的itext是不支持中文的,想要支持,需要做些处理. 1.直接引用操作系统的中文字体库支持,由于此方案限制性强,又绑定了 ...

  8. 数据库同步工具HKROnline SyncNavigator SQL Server互同步MySQL

    需要联系我QQ:786211180 HKROnline SyncNavigator 是一款专业的 SQL Server, MySQL 数据库同步软件.它为您提供一种简单智能的方式完成复杂的数据库数据同 ...

  9. Oracle数据库入门——高水位线详解

    一.什么是水线(High Water Mark)? 所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称 ...

  10. PowerShell 启动应用程序【转】

    当你在PowerShell中,启动带参数启动可执行应用程序时,可能会碰到参数解析的错误.最好的方式是使用命令 Start-Process,该命令有两个优点: 程序的路径和程序参数分开,可以使用-Fil ...