SqlServer 2012 FileTable 文件表
来源:互联网 发布:中国知乎 编辑:程序博客网 时间:2024/06/11 06:17
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, FILENAME = 'G:\database\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 文件表
- SQL SERVER 2012 文件表(FILETABLE)新体验之一
- SQL SERVER 2012 文件表(FILETABLE)新体验之二
- [SQLServer大对象]——FileTable初体验
- SQL Server 2012的FileStream和FileTable介绍
- SQL Server 2012新特性(1)T-SQL操作FileTable目录实例
- OpenRowSet SQLServer 2012中 打开excel文件
- SQLSERVER 2012 日志文件过大处理方法
- Sqlserver 2012 导入大文件sql
- sqlserver复制文件
- 缩小SQLSERVER日志文件
- VS2008 添加SQLServer文件
- sqlserver 导入 MDF文件
- SQLSERVER ErrorLog文件
- SqlServer导入bak文件
- sqlserver 压缩日志文件。
- SQLSERVER导入EXCEL文件
- sqlServer 读取dbf文件
- HDU1083 最大二分匹配
- C++中类的多态与虚函数的使用
- Java程序员的6个级别
- 快速幂取余
- android 布局文件的权重问题
- SqlServer 2012 FileTable 文件表
- Error Code: 1318. Incorrect number of arguments for PROCEDURE company.new_procedure; expected 2, got
- C#获取CSV文件内容对逗号和引号分隔的处理
- scala 函数学习
- 表中含有重复键,连接会产生很大的记录
- Android的GridView和ScrollView的嵌套
- zerglurker的C语言教程004——指针初步讲解
- UVA 10891 Game of Sum 区间dp
- Netty-一个简单的服务器