Sql2012文件表的使用
一、文件表 使用的相关配置
1.在实例级别启用 FILESTREAM:
右键SQLserver服务——属性——FILESTREAM ——勾选——重启服务
2.更改此 SQL Server 实例的 FILESTREAM 访问级别 :
exec sp_configure N'filestream access level' ,2
reconfigure with override
3.可能需要配置将防火墙配置为进行 FILESTREAM 访问。
二、文件组的操作
-- 创建数据库时创建 FILESTREAM 文件组
CREATE DATABASE FileStreamDB
ON
PRIMARY (
NAME = FileStreamDB,
FILENAME = 'D:\data\FileStreamDB.mdf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB
),
FILEGROUP FileStreamGroup CONTAINS FILESTREAM(
NAME = FileStreamFile,
FILENAME = 'D:\data\FileStreamFile',
MAXSIZE = 50 MB
)
LOG ON (
NAME = FileStreamDB_log,
FILENAME = 'D:\data\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 = 'D:\data\FileStreamFile',
MAXSIZE = 50 MB
)
TO FILEGROUP FileStreamGroup
GO
-- 在数据库级别上指定 非事务性访问级别 和 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
三、文件表的操作
--创建文件表DocumentStore
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
-- 查看文件表信息
SELECT * FROM sys.filetables;
SELECT * FROM sys.tables WHERE is_filetable = 1;
-- 文件表 的相关对象
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';
--禁用完全非事务性访问权限:
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
SELECT * FROM [dbo].[DocumentStore]
-- 获取特定 FileTable 或当前数据库的根级 UNC 路径。
SELECT FileTableRootPath();
SELECT FileTableRootPath(N'DocumentStore');
SELECT FileTableRootPath(N'dbo.DocumentStore');
-- 也可以用GetFileNamespacePath查看 FileTable 中文件或目录的 UNC 路径。
SELECT
file_stream.GetFileNamespacePath()
,file_stream.GetFileNamespacePath(1, 0)
FROM [dbo].[DocumentStore]
-- 删除表 FileTable 中的记录,文件也会被删除
DELETE FROM [dbo].[DocumentStore] WHERE stream_id = 'BA483ECA-AE0E-E511-8367-005056C00008'
Sql2012文件表的使用
最新推荐文章于 2024-06-09 19:08:50 发布