在SQLServer中启用FileStream

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SQLServer中启用FileStream相关的知识,希望对你有一定的参考价值。

参考技术A

  最近在研究在数据库中存储大数据文件 看到了FileStream 这个功能 记录下来以备后用

  FileStream 一般在安装的时候默认是不启用的 如果你留意的话 在选择数据库文件路径那个窗口 有一个标签是 FileStream

  如果在安装的时候你没有启用 安装后可以通过以下设置来开启FileStream 功能

   打开 SQL Server 配置管理器 在SQL server 服务下找到你要启用的SQL Server服务(默认实例一般是 MSSQLServer) 右击该服务 选择属性 在属性窗口你可以看到FileStream 标签 选中 针对 Transact SQL 访问启用 FILESTREAM

   执行以下命令在s *** s

  EXEC sp_configure filestream_access_level

  RECONFIGURE

   创建支持FileStream 的数据库

  [sql]

  CREATE DATABASE test

  ON

  ( NAME = test_dat

  FILENAME = C:\\Program Files\\Microsoft SQL Server\\MSSQL MSSQLSERVER\\MSSQL\\DATA\\testdat mdf )

  FILEGROUP testGroup CONTAINS FILESTREAM

  ( NAME = testgroup_dat

  FILENAME = C:\\Program Files\\Microsoft SQL Server\\MSSQL MSSQLSERVER\\MSSQL\\DATA\\testGroup ndf )

  LOG ON

  ( NAME = Sales_log

  FILENAME = C:\\Program Files\\Microsoft SQL Server\\MSSQL MSSQLSERVER\\MSSQL\\DATA\\testlog ldf ) ;

  当然你也可以用以下脚本 在已存在的数据库添加一个文件组用于支持FileStream

  [sql]

  ALTER database test

  ADD FILEGROUP FileStreamRecord

  CONTAINS FILESTREAM

  GO

   Add a file for storing database photos to FILEGROUP

  ALTER database test

  ADD FILE

  (

  NAME= FileStreamRecord

  FILENAME = D:\\Program Files\\Microsoft SQL Server\\MSSQL MSSQLSERVER\\MSSQL\\DATA\\TestFileStreamRecord ndf

  )

  TO FILEGROUP FileStreamRecord

  GO

   创建可以存储FileStream 的数据表

  CREATE TABLE FileStreamRecording

  [sql]

  (

  ID int

  RowGuidColumn UNIQUEIDENTIFIER

  NOT NULL UNIQUE ROWGUIDCOL

  FILESTREAMColumn varbinary(MAX) FILESTREAM

  )

  [sql]

  [sql]

   使用

  [sql]

  INSERT INTO FileStreamRecording VALUES( NEWID() x )

  INSERT INTO FileStreamRecording VALUES( NEWID() x )

  INSERT INTO FileStreamRecording VALUES( NEWID() x )

  GO

  SELECT FILESTREAMColumn PathName() AS PathName FROM FileStreamRecording;

lishixinzhi/Article/program/SQLServer/201311/22146

如何使用Sqlserver 2012 Always on技术

一、启用FileTable  1、修改数据库引擎的属性  打开“SQLServer配置管理器”,修改SQLServer数据库引擎的属性。使用此页可针对此MicrosoftSQLServer2012安装启用FILESTREAM。  (1)针对Transact-SQL访问启用FILESTREAM  选中此项可针对Transact-SQL访问启用FILESTREAM。必须选中此控制选项,才能使用其他控制选项。如果不启用此选项,就不能添加FileStream文件组。  (2)针对文件I/O流访问启用FILESTREAM  选中此项可针对FILESTREAM启用Win32流访问。  (3)Windows共享名  使用此控制选项可输入将用来存储FILESTREAM数据的Windows共享的名称。默认为该SQLServer实例的名称。  (4)允许远程客户端针对FILESTREAM数据启用流访问  选中此控制选项可允许远程客户端访问此服务器上的此FILESTREAM数据。    2、修改服务器的属性  打开“SQLServerManagementStudio”,修改该实例的配置。默认配置如下:  上述选项解释如下:  (1)“FILESTREAM访问级别”显示SQLServer实例上支持的FILESTREAM的当前级别。若要更改访问级别,请选择以下值之一:  已禁用  无法将二进制大型对象(BLOB)数据存储在文件系统中。此为默认值。即filestreamaccesslevel=0  已启用Transact-SQL访问  可使用Transact-SQL访问FILESTREAM数据,但不能通过文件系统进行访问。即filestreamaccesslevel=1  已启用完全访问  FILESTREAM数据可使用Transact-SQL以及通过文件系统进行访问。即filestreamaccesslevel=0  注意:在首次启用FILESTREAM时,您可能需要重新启动计算机才能配置驱动程序。  (2)“FILESTREAM共享名称”显示在安装过程中选择的FILESTREAM共享的只读名称。    在本次实验中,我们将“FILESTREAM访问级别”设定为:已启用完全访问。  如果是通过T-SQL脚本执行,则运行以下脚本:  EXECsys.sp_configureN'filestreamaccesslevel',N'2'  RECONFIGUREWITHOVERRIDE    注意:设置完成之后,重启实例。    3、配置防火墙  若要在防火墙保护的环境中使用FILESTREAM,客户端和服务器都必须能够将DNS名称解析为包含FILESTREAM文件的服务器。FILESTREAM要求Windows文件共享端口139和445处于打开状态。    二、配置文件组  1、添加文件组  完成上述操作之后,就可以为该数据库添加专用于FileStream的文件组。  如果是通过脚本操作,请运行以下脚本:  ALTERDATABASE[db01]ADDFILEGROUP[FileStreamFileGroup]CONTAINSFILESTREAM    2、添加文件  完成上述操作之后,就可以为该数据库添加FilStream类型的数据库文件。  在本例中,系统并没有为“FileStream数据”的文件类型创建mdf或ndf文件,而是在文件夹C:\SqlData下面自动创建以逻辑名称命名的文件夹,即C:\SqlData\FileData。其中filestream.hdr文件是FILESTREAM容器的头文件。当这个数据库被删除时,mdf、ndf、log连同这个文件夹都会被删除。  如果是通过脚本操作,请运行以下脚本:  ALTERDATABASE[db01]ADDFILE(NAME=N'FileData',FILENAME=N'C:\SqlData\FileData')TOFILEGROUP[FileStreamFileGroup]  注意:在上例中,在运行脚本之前,必须存在C:\SqlData,建议使用右侧的选择按钮选择路径。如果路径不存在,就会报错:  同时不能存在重复的文件夹,即不能存在C:\SqlData\FileData。否则也会报错:    3、启动非事务访问  FileTable使Windows应用程序可以获取FILESTREAM数据的Windows文件句柄而不需要SQLServer事务。为了允许对SQLServer中存储的文件进行此非事务性访问,必须为要包含FileTable的每个数据库在数据库级别上指定所需的非事务性访问级别。  选项解释如下:  (1)FILESTREAM非事务访问  为从文件系统到FileTables中存储的FILESTREAM数据的非事务性访问指定以下选项之一:OFF、READ_ONLY或FULL。  如果在服务器上未启用FILESTREAM,则该值将设置为OFF并且被禁用。在本次实验中,将其设置为FULL。  (2)FILESTREAM目录名称  为与所选数据库相关联的FILESTREAM数据指定目录名称。在FileTable文件夹层次结构中,此数据库级目录将成为在实例级别为FILESTREAM指定的共享名称的子级以及在数据库中创建的FileTable的父级。  如果启用非事务性访问时没有提供目录名称,则在以后必须提供它,这样才能在数据库中创建FileTable。  如果是通过脚本执行,如下:  ALTERDATABASEdb01  SETFILESTREAM(NON_TRANSACTED_ACCESS=FULL,DIRECTORY_NAME=N'ImageFiles')  注意:更改现有数据库时,调用带DIRECTORY_NAMEFILESTREAM选项的ALTERDATABASE(Transact-SQL)语句。使用这些选项更改目录名称时,数据库必须以独占方式锁定,没有打开的文件句柄。  说明:为检查是否在数据库上启用了非事务性访问,可以查询目录视图,脚本如下:  SELECTDB_NAME(database_id),non_transacted_access,non_transacted_access_desc  FROMsys.database_filestream_options    三、创建FileTable  1、创建第一个FileTable  “SQLServerManagementStudio”只提供一个脚本模板,要想创建FileTable还是得用脚本完成:  USEdb01  CREATETABLEImageTable1ASFILETABLE  官方的范本为:  USE[db01]  CREATETABLE[dbo].[ImageTable1]ASFILETABLEON[PRIMARY]FILESTREAM_ON[FileStreamFileGroup]  WITH  (FILETABLE_DIRECTORY=N'ImageTable1',FILETABLE_COLLATE_FILENAME=Chinese_PRC_CI_AS)    2、创建第二个FileTable  CREATETABLEImageTable2ASFILETABLE    3、获取共享路径  文件表创建之后,就会相应的产生一个文件表共享目录,该目录路径可以通过内建函数获取:  SELECTFileTableRootPath('ImageTable1')  本次实验所返回的结果为:\\SQL1\SqlFile\ImageFiles\ImageTable1    4、查看  通过Windows资源管理器,可见已经创建了以GUID命名的文件夹。    通过SQLServerManagementStudio,查看表的结构。    四、操作  1、向文件夹中添加文件  通过“Windows资源管理器”,向文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1中添加一个文件A01.GIF。然后运行脚本:  select*fromImageTable1  结果如下:    可见,SQLServer自动在Table中添加了记录。    2、文件改名  运行以下脚本:  updateImageTable1setname='Cup.GIF'wherename='A01.GIF'  通过“Windows资源管理器”,查看文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1,可见文件A01.GIF已经被改名为Cup.GIF。    3、查看共享文件夹  我们可以继续复制其他文件,然后通过“Windows资源管理器”,查看文件夹。    4、删除文件  可以使用脚本删除,例如:  DeleteImageTable1wherename='Cup.GIF'  或者,通过“Windows资源管理器”直接删除该文件。    五、备份和还原    1、备份数据库  使用SQLServer备份数据库时,FILESTREAM数据将与数据库中的结构化数据一起备份。    2、部分备份  如果不想将FILESTREAM数据与关系数据一起备份,则可以使用部分备份将FILESTREAM文件组排除在外。    六、相关说明  详见/zh-cn/library/gg492086.aspx  1、AlwaysOn  在包含FILESTREAM或FileTable数据的数据库属于某一AlwaysOn可用性组时:  FILESTREAM和FileTable函数接受或返回虚拟网络名称(VNN),而非计算机名称。有关这些函数的详细信息,请参阅Filestream和FileTable函数(Transact-SQL)。  通过文件系统API对FILESTREAM或FileTable数据进行的所有访问都应该使用VNN,而非计算机名称。    2、表分区  FileTable不支持分区。通过对多个FILESTREAM文件组的支持,在大多数方案中可以解决纯向上扩展问题,而不必使用分区(不像SQL2008FILESTREAM)。    3、复制  FileTable不支持复制和相关功能(包括事务性复制、合并复制、更改数据捕获和更改跟踪)。    4、视图  可以像为任何其他表一样为FileTable创建视图。但是对于为FileTable创建的视图有以下注意事项:  视图将不具有任何FileTable语义,也就是说,视图中的列(包括“文件属性”列)的行为与常规视图列一样,不具有任何特殊语义,对于表示文件/目录的行也是如此。  可以基于“可更新视图”语义更新视图,但是基础表约束可能拒绝更新,就像在表中一样。  可以通过将文件的路径添加为视图中的显式列,在视图中显示该路径。例如:  CREATEVIEWMP3FILESASSELECTcolumn1,column2,…,GetFileNamespacePath()ASPATH,column3,…FROMDocuments 参考技术A 选项的意义

主角色中的连接

允许所有连接

如果当前server是primary角色时,primary instance允许所有连接(如:读/写/管理)

允许读/写连接

如果当前server是primary角色时,primary instance只允许读/写连接(如果通过ssms连接,将报错、sqlcmd也是报错)

可读辅助副本



如果当前server是primary角色时,所有的secondary servers都是可以看的(通过ssms能看结构、数据,但不能更改)

仅读意向

如果当前server是primary角色时,所有的secondary
servers只允许读连接(需要在建立连接时加入key来标明为只读连接:ApplicationIntent=ReadOnly)



如果当前server是primary角色时,所有的secondary servers都不可以看

以上是关于在SQLServer中启用FileStream的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 中启用与登录显示表单冲突的内容

SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

[error]:启用sqlserver配置管理器异常,内存不足

sqlserver 2008express版本启用混合登陆和sa

SQL Server:检查触发器是启用还是禁用?

连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法