sql Server 2012 提供一种特殊的“文件表”,也称为“filetable”。 filetable 是一种专用的用户表,它包含存储 fileSTREAM 数据的预定义架构以及文件和目录层次结构信息、文件属性。filetable 功能为 sql Server 中存储的文件数据提供对 windows 文件命名空间的支持以及与 windows 应用程序的兼容性支持。即可以在 sql Server 中将文件和文档存储在称作 filetable 的特别的表中,但是从 windows 应用程序访问它们,就好像它们存储在文件系统中,而不必对客户端应用程序进行任何更改。
在实例级别启用 fileSTREAM:(参考 启用和配置 FILESTREAM )
右键sqlserver服务——属性——fileSTREAM ——勾选——重启服务
更改此 sql Server 实例的 fileSTREAM 访问级别 :(参考 filestream access level 服务器配置选项)
exec sp_configure N'filestream access level',2reconfigure with overrIDe
可能需要配置 将防火墙配置为进行 FILESTREAM 访问。
数据库级别创建 fileSTREAM 文件组:
数据库必须首先具有 fileSTREAM 文件组,然后您才能在该数据库中创建 filetable。
-- 创建数据库时创建 fileSTREAM 文件组CREATE DATABASE fileStreamDB ONPRIMARY ( name = fileStreamDB,filename = 'G:\database\fileStreamDB.mdf',SIZE = 5MB,MAXSIZE = 25MB,fileGROWTH = 5MB),fileGROUP fileStreamGroup CONTAINS fileSTREAM( name = fileStreamfile,filename = 'G:\database\fileStreamfile',MAXSIZE = 50 MB)LOG ON ( name = fileStreamDB_log,filename = 'G:\database\fileStreamDB_log.ldf')WITH fileSTREAM ( NON_TRANSACTED_ACCESS = FulL,DIRECTORY_name = N'fileStreamPath' )GO
-- 或者在当前数据库中添加 fileSTREAM 文件组ALTER DATABASE [AdventureWorks2012]ADD fileGROUP fileStreamGroup CONTAINS fileSTREAM;ALTER DATABASE [AdventureWorks2012]ADD file( name = fileStreamfile,MAXSIZE = 50 MB)TO fileGROUP fileStreamGroupGO
创建文件时 filename 只指定目录,并且目录 fileStreamfile 在文件系统不存在,创建后会自动生成该目录文件夹
在数据库级别上指定 非事务性访问级别 和 filetable目录(数据库须独占):
-- 在数据库级别上指定 非事务性访问级别 和 filetable目录(数据库须独占)ALTER DATABASE [AdventureWorks2012]SET fileSTREAM ( NON_TRANSACTED_ACCESS = FulL,DIRECTORY_name = N'fileStreamPath' )-- 启用后即可查看到其状态信息SELECT DB_name(database_ID) [database],non_transacted_access,non_transacted_access_descFROM sys.database_filestream_optionsWHERE non_transacted_access_desc <> 'OFF'SELECT DB_name(database_ID) [database],directory_name FROM sys.database_filestream_options WHERE directory_name IS NOT NulL
将新表创建为 filetable :(参考 CREATE TABLE (Transact-SQL) )
USE [AdventureWorks2012]GOCREATE table [documentStore] AS filetableWITH ( --文件目录,不区分大小写,不指定则为filetable名称[documentStore] filetable_Directory = N'fileStreamPath',filetable_Collate_filename = database_default --排序规则);GO-- 更改目录ALTER table [documentStore] SET ( filetable_DIRECTORY = N'fileStreamPath' );GO每个目录创建都会在文件系统中生成一个文件夹:
相关查询:(FileTable 架构)
-- 查看 filetable 信息SELECT * FROM sys.filetables;SELECT * FROM sys.tables WHERE is_filetable = 1;-- filetable 的相关对象SELECT parent_object_ID,OBJECT_name(parent_object_ID) AS 'filetable',object_ID,OBJECT_name(object_ID) AS 'System-defined Object'FROM sys.filetable_system_defined_objectsORDER BY filetable,'System-defined Object';
至此,已经配置完成!~
现在查看文件表,没有记录。可以查看该表的 UNC 路径,在系统文件中打开该路径。
-- 查看 filetableSELECT * FROM [dbo].[documentStore]-- 获取特定 filetable 或当前数据库的根级 UNC 路径。SELECT filetableRootPath();SELECT filetableRootPath(N'documentStore');SELECT filetableRootPath(N'dbo.documentStore');
在该路径中,可以直接将系统其它文件拷贝进去:
再查看 filetable ,数据已经自动记录
-- 查看 filetableSELECT * FROM [dbo].[documentStore]
-- 也可以用GetfilenamespacePath查看 filetable 中文件或目录的 UNC 路径。SELECT file_stream.GetfilenamespacePath(),file_stream.GetfilenamespacePath(1,0)FROM [dbo].[documentStore]
删除表 filetable 中的记录,文件也会被删除:
-- 删除表 filetable 中的记录,文件也会被删除DELETE FROM [dbo].[documentStore] WHERE stream_ID = 'BA483ECA-AE0E-E511-8367-005056C00008'SELECT * FROM [dbo].[documentStore]
若要获取执行某些管理任务所需的独占访问权限,可能必须暂时禁用非事务性访问权限。
禁用完全非事务性访问权限:
ALTER DATABASE [AdventureWorks2012] SET fileSTREAM ( NON_TRANSACTED_ACCESS = OFF );GO-- 关闭后,路径无法打开-- \Kk-pc\mssqlserver\fileStreamPath\fileStreamPath-- 此时文件表 [documentStore] 仍可正常 *** 作ALTER DATABASE [AdventureWorks2012] SET fileSTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );GO-- 只读状态,路径可拷贝文件出来,但无法拷贝文件到该目录-- \Kk-pc\mssqlserver\fileStreamPath\fileStreamPath-- 此时文件表 [documentStore] 仍可正常 *** 作
重新启用完全非事务性访问权限:
-- 重新启用完全非事务性访问权限ALTER DATABASE [AdventureWorks2012] SET fileSTREAM ( NON_TRANSACTED_ACCESS = FulL );GO
禁用 filetable 命名空间将会禁用所有系统定义的约束并触发使用 filetable 创建的约束。
-- 禁用 filetable 命名空间-- (禁用后路径 \Kk-pc\mssqlserver\fileStreamPath\fileStreamPath 不可访问)ALTER table [documentStore] disABLE filetable_nameSPACE;GO
-- 重新启用 filetable 命名空间ALTER table [documentStore] ENABLE filetable_nameSPACE;GO
更多注意的事情还需要到参考官方文档: FileTable 与其他 SQL Server 功能的兼容性
更多参考:FileTable (SQL Server)
总结以上是内存溢出为你收集整理的SqlServer 2012 FileTable 文件表全部内容,希望文章能够帮你解决SqlServer 2012 FileTable 文件表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)