SqlServer 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-21 23:35:22

SqlServer 2012 FileTable 文件表的相关文章

SQL Server 2012 FileTable 文件表

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

SQLServer 2012 Always on配置全过程

SQLServer 2012 Always on是针对高可用性和灾难恢复的新解决方案.可以配置一个或多个辅助副本以支持对辅助数据库进行只读访问,并且可以将任何辅助副本配置为允许对辅助数据库进行备份. 这样就提供了硬件的使用效率. “可用性组”针对一组离散的用户数据库(称为“可用性数据库”,它们共同实现故障转移)支持故障转移环境.一个可用性组支持一组主数据库以及一至四组对应的辅助数据库.可用性组在可用性副本级别进行故障转移.故障转移不是由诸如因数据文件丢失或事务日志损坏而使数据库成为可疑数据库等数

SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题

原文:SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题 这是上周遇到的一个案例:对已有的硬件进行升级而引发的问题,期间还触发了一个比较严重的BUG,可谓多灾多难:不过值得庆幸的是,在一连串连锁问题出现的时候,并没有出现人工操作失误(这往往是在处理故障中风险最高.影响最大的问题)而扩大故障影响范围: ==========================华丽丽的分割线========================== 先说一下环境: 我做的是跨机房3节点alwayson

SqlServer导出数据文件(图)

1.对数据库右键->Tasks->Generate Scripts 2.点击Next 3.选择是导出整个数据库开始单个数据表 4.设置成保存为文件,并设置存储位置,然后点击高级按钮 5.根据选择是导出模式.模式加数据.还是仅数据,点击ok 6.会有让你review的一个窗口,点击next,再点击finish 7.以下是我只导出数据的文件结果 转载请注明:康瑞的部落 ? SqlServer导出数据文件

sqlserver -- 将一个数据库的表复制到另外一个数据库(备忘)

--复制结构+数据 select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 select * into Stockholder.dbo.SHInfo from dspring.dbo.HIREMEN --只复制结构 select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 where 1=0 后面的条件只要不成立就OK了 Learn From: http://www.cnblogs.com/New-world/archive/20

Unix文件系统学习笔记之二: 文件描述符、inode和打开文件表

Unix文件系统学习笔记之二: 文件描述符.inode和打开文件表 系统盘上数据的布局 文件系统无非是关于数据在磁盘上的组织以及存储空间管理的,为此,首先需要知道磁盘上数据的总体布局方式.以Unix为例,最重要的一张表如下: Unix 进程管理中和用户文件.io 最相关的数据结构:usr 数据结构 The procstructure does not record information related to file access.  However the userstructure con

Oracle bigfile 大文件表空间

Database 是由一个或多个被称为表空间(tablespace)的逻辑存储单位构成.表空间内的逻辑存储单位为段(segment),段又可以继续划分为数据扩展(extent).而数据扩展是由一组连续的数据块(datablock)构成. 大文件表空间 在Oracle中用户可以创建大文件表空间(bigfile tablespace).这样Oracle数据库使用的表空间(tablespace)可以由一个单一的大文件构成,而不是若干个小数据文件.这使Oracle可以发挥64位系统的能力,创建.管理超大

文件描述符、文件描述符表、打开文件表、目录项、索引节点之间的联系

文件描述符.文件描述符表.打开文件表.目录项.索引节点之间的联系如下图所示: 每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针,已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体. 在file结构体中维护File Status Flag(file结构体的成员f_flags)和当前读写位置(file结构体的成员f_pos).在上图中,进程1和进程2都打开同一文件,

Editplus+Oracle+Visual Studio 2012+SqlServer 2008+SqlServer 2012+MyEclipse 10.6+MyEclipse 2015+WebStorm 11+WebStorm 10+WPS专业版--所有安装包,加破解 下载地址

Editplus  下载链接:https://share.weiyun.com/76924b230d140da21ea4ed877309eb5e (密码:Oftbnq) Oracle  下载链接:https://share.weiyun.com/1cc1209f483b7c298499228256f36b66 (密码:q5sPUC) Visual Studio 2012  下载链接:https://share.weiyun.com/599d9f7b1ba2826ba045f1e56297dcf2