SQL 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(文件流)

SQL Server,默许情形下,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、切换的“高级”选项页,在文书流访问级别下拉列表框中采取“已启用完全访问”选项,如图所示。

SQL Server 1

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

相关文章