SQL ServerSQL Server 2008 FILESTREAM特性管理文件

每当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

相关文章