SQL Server 2012 FileTable 文件表

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‘ ,2
reconfigure with override

可能需要配置将防火墙配置为进行 FILESTREAM 访问

数据库级别创建 FILESTREAM 文件组:

数据库必须首先具有 FILESTREAM 文件组,然后您才能在该数据库中创建 FileTable。

--    创建数据库时创建 FILESTREAM 文件组
CREATE DATABASE FileStreamDB
ON
PRIMARY (
    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 FileStreamGroup
GO

创建文件时 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_desc
FROM sys.database_filestream_options
WHERE 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]
GO
CREATE TABLE [DocumentStore]
AS FileTable
WITH (
    --文件目录,不区分大小写,不指定则为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_objects
ORDER BY FileTable, ‘System-defined Object‘;

至此,已经配置完成!~

现在查看文件表,没有记录。可以查看该表的 UNC 路径,在系统文件中打开该路径。

--    查看 FileTable
SELECT * FROM [dbo].[DocumentStore]

--    获取特定 FileTable 或当前数据库的根级 UNC 路径。
SELECT FileTableRootPath();
SELECT FileTableRootPath(N‘DocumentStore‘);
SELECT FileTableRootPath(N‘dbo.DocumentStore‘);

在该路径中,可以直接将系统其它文件拷贝进去:

再查看 FileTable ,数据已经自动记录

--    查看 FileTable
SELECT * 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)

时间: 2024-12-28 22:03:31

SQL Server 2012 FileTable 文件表的相关文章

SqlServer 2012 FileTable 文件表

SQL Server 2012 提供一种特殊的"文件表",也称为"FileTable". FileTable 是一种专用的用户表,它包含存储 FILESTREAM 数据的预定义架构以及文件和目录层次结构信息.文件属性.FileTable 功能为 SQL Server 中存储的文件数据提供对 Windows 文件命名空间的支持以及与 Windows 应用程序的兼容性支持.即可以在 SQL Server 中将文件和文档存储在称作 FileTable 的特别的表中,但是从

sql server 2012日志文件超大,清除日志的处理过程

有一个项目使用了sql server2012版本的数据库,一开始可能没有注意到日志文件,使得日志文件越来越大,当使用sql2008的收缩文件的方法进行操作时,问题出现了. DUMP TRANSACTION BigData WITH NO_LOG BACKUP LOG BigData WITH NO_LOG 使用上面的方法并不能解决问题,因为2012已经不支持transaction了. 通过百度搜索了大量前人的解决方式,最终找到一个解决的办法: 给出原办法出处:http://www.itpub.n

SQL Server 2012 “阻止保存要求重新创建表”的更改问题的设置方法

我们在用SQL Server 2012 建完表后,插入或修改任意列时,提示:当用户在在SQL Server 2012企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改. 如果强行更改会出现以下提示:"不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了"阻止保存要求重新创建表的更改"选项".如下图: 解决方法: 工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器 -> 阻止保存要

【转】使用SQL Server 2012的FileTable轻松管理文件

一 .FileStream和FileTable介绍 我们经常需要把结构化数据(int.Char等)和非结构化数据(如Varbinary(max))一起存储,那我们在怎么存储的呢? 1. 在SQL Server 2008之前,我们通常在数据库中存储结构化的数据,并且将非结构化数据(例如文档.音频.视频等)存储在NTFS文件系统中,然后在数据库中存放这些文件的路径.但是显而意见,很难保证文件系统和数据库的一致性. 2. 在SQL Server 2008,新增了FileStream,它允许我们将Var

SQL Server 2012入门图解:建表、备份、还原

SQL Server 2012入门图解:建表.备份.还原_.NET教程网——简单专业的.NET技术网站 http://www.soaspx.com/dotnet/sql/sql2012/sqlserver212_20120504_9079.html 作者:汪宇杰 一.建立你的第一个数据库和表 例:建立一个用于描述一个学校学生情况的数据库.把它命名为School.并且要在School数据库下建立保存学生信息的表Student.在可视化界面下,我们通常这样操作.(本文是入门教程,不介绍如何用SQL语

SQL Server 2012设置某用户对某些表的记录限制其删除操作

第一步:用sa用户进入SSMS: 第二步:在安全性---用户上面点击右键---"属性": 第三步:在选择页中选择"安全对象",点击"搜索",弹出添加对象页面,这里默认为特定对象不用选择: 第四步:点击对象类型对话框,打开选择对象类型,选择"表": 第五步:对要进行加权限限制的表进行选择: 第六步:对所选择的表进行授权设置,点击完成即可.我这里主要是限制不可以删除,选择相应的表,勾选删除即可. SQL Server 2012设置

Sql Server 遍历数据库文件找出使用了某个表/存储过程的所有存储过程

Sql Server 遍历数据库文件找出使用了某个表/存储过程的所有存储过程. 1 CREATE Procedure SP_GetProc 2 @Object_Name Varchar(50) 3 as 4 Set nocount on 5 6 DECLARE @tmptable TABLE 7 ( 8 ID int IDENTITY (1, 1), 9 [DataBase] Varchar(100), 10 Name Varchar(500), 11 Type Varchar(100), 12

SQL Server 2012 各版本功能比较

转载来自 <一棵树-博客园>  地址:http://www.cnblogs.com/atree/p/SQL_Server_2012_Enterprise_Standard.html SQL Server 2012 各版本功能比较 有关不同版本的 SQL Server 2012 所支持的功能的详细信息. 功能名称 Enterprise 商业智能 Standard Web Express with Advanced Services Express with Tools Express 单个实例使

SQL Server 2012 FileTables 简介

本文将介绍有关 SQL Server 2012 FileTables. 大家都知道像是 SQL Server 这类的关联式数据库擅长处理大量结构化数据,对于文件或目录这类型的非结构化数据的管理及查询,相对而言比较难以处理. 以一般网站应用程序开发为例,常常会需要提供使用者透过浏览器上传文件的功能,应用程序要如何记录这些文件的相关资讯,大致上都是采用这两种方法,一是只在 DBMS 中纪录文件名称.大小.类型等资讯,实际文件还是存放在文件系统当中,二是把上传的文件转成二进制后保存到 DBMS 中.