管理SQL数据库的FILESTREAM文件组的方法

480 阅读5分钟

在这篇文章中,我们将学习如何管理SQL数据库的FILSTREAM文件组。我将涵盖以下主题。

  1. 在SQL Server中配置FILESTREAM功能。
  2. 使用SQL Server管理工作室和T-SQL语句创建FILESTREAM文件组。
  3. 在文件组中添加多个FILESTREAM文件。

首先,让我们启用FILESTREAM功能。

启用FILESTREAM功能

我们可以使用SQL Server配置管理器工具启用FILESTREAM。要做到这一点,打开SQL Server配置管理器🡪,右击你想启用FILESTREAM功能的SQL Server实例,并点击属性

SQL Server configuration manager

在SQL Server属性对话框中,点击FILESTREAM并勾选以下选项。

  1. 启用FILESTREAM进行Transact-SQL访问
  2. 为文件I/O访问启用FILESTREAM
  3. Windows共享名称文本框中指定所需的Windows共享名称
  4. 允许远程客户端访问FILESTREAM数据

屏幕截图

Enable filestream feature

单击 "**确定 "**以保存配置参数。一旦更改被应用,重新启动SQL服务。

配置FILESTREAM的访问级别

一旦FILESTREAM在SQL服务器实例上被启用,我们必须配置FILESTREAM的访问级别。有效的配置值如下。

选项的描述

T-SQL命令中的值

在SQL服务器管理工作室的选项

FILESTREAM访问被禁用

0

禁用

T-SQL查询的FILESTREAM访问

1

启用事务性SQL访问

为T-SQL查询和窗口流提供FILESTREAM访问。

2

启用全面访问

要使用SQL Server管理工作室设置上述参数的值,请打开SSMS并连接到SQL Server实例。右键单击实例并选择属性。

Open SQL Server instance properties

在 "服务器属性 "对话框中,点击 "高级"。从FILESTREAM访问级别下拉框中选择启用完全访问选项。

Enable FILESTREAM Access level

点击 "确定",保存配置并重新启动SQL Server服务。

另外,你可以运行sp_configure命令来设置FILESTREAM的文件访问级别。设置访问级别的配置参数是filestream_access_level。如果你想为T-SQL查询和窗口流启用FILESTREAM访问,查询的写法如下。

1
2
3
4
5
6
使用 master
exec sp_configure 'filestream_Access_level', 2
重新配置

一旦参数被设置,你必须重新启动服务。一旦服务被重新启动,运行sp_configure命令来查看filestream_access_level参数的值。

use master
  go
  exec sp_configure 'filestream_Access_level', 2
  reconfigure

查询输出

View configuration of SQL Server instance

正如你所看到的,filestream_access_level参数的值是二(2)。现在,让我们创建一个FILESTREAM文件组。

使用SQL Server Management Studio创建一个FILESTREAM文件组

要使用SSMS创建FILESTREAM文件组,打开它并连接到SQL Server数据库引擎 🡪 右击EltechDB数据库 🡪 选择属性。

SQL Database properties

数据库属性对话框中,点击文件组。单击 "添加文件组"。这将在FILESTREAM网格视图中添加一行。在网格视图中指定以下参数。

  1. **名称。**指定文件组的名称。
  2. **FILESTREAM 文件。**FILESTREAM 文件的总数。默认值是零(0)。
  3. **Read-Only(只读)。**如果你想使新的文件组成为只读文件组,那么在只读一栏打勾。
  4. **默认:**如果你想使新的文件组成为一个默认的FILESTREAM文件组,那么请勾选默认列。

我们正在创建一个名为EmployeeDocument的文件组,所以数据库属性对话框看起来像下面这样。

Add FILESTREAM filegroup

现在我们必须指定FILESTREAM容器的路径,你想在其中存储文件。要做到这一点,点击数据库属性中的文件。在文件屏幕上,配置选项如下。

  1. 逻辑名称。指定FILESTREAM容器的名称。在这个演示中,文件名是DF_EmployeeDocument
  2. **文件类型。**从下拉框中选择FILESTREAM数据。
  3. 文件组。选择FILESTREAM文件组。在这个演示中,文件组的名称是EmployeeDocument
  4. **路径。**指定我们存储文件的目录的位置。在这个演示中,位置是 D:\EltechDB\EmployeeDocuments。

数据库属性对话框看起来像下面这样。

Add FILESTREAM datafile in SQL database

点击 "确定"来创建一个FILESTREAM容器。现在,让我们了解如何使用T-SQL创建一个FILESTREAM容器。

使用T-SQL查询创建一个FILESTREAM文件组

我们可以使用ALTER DATABASE ADD FILEGROUP语句。我们正在SQL数据库中添加一个FILESTREAM文件组;因此,我们必须指定CONTAINS FILESTREAM关键字。它必须被指定在文件组名称的后面。

添加一个FILESTREAM文件组的语法如下所示。

USE [master]
GO
ALTER DATABASE [DB_Name] ADD FILEGROUP [Filegroup_Name] CONTAINS FILESTREAM 
GO

在语法上。

  1. **Db_name:**指定你要创建FILESTREAM文件组的数据库名称。
  2. **Filegroup_name:**指定所需的文件组的名称。

我们正在EltechDB数据库中添加一个名为EmployeeDocument的文件组。ADD FILGROUP语句如下

USE [master]
GO
ALTER DATABASE [EltechDB] ADD FILEGROUP [EmployeeDoucment] CONTAINS FILESTREAM 
GO

现在,我们必须指定文件流容器的位置。我们正在使用 ALTER DATABASE ADD FILE TO FILEGROUP语句。要添加一个文件,运行下面的T-SQL查询。

USE [master]
GO
ALTER DATABASE [EltechDB] ADD FILE ( NAME = N' DF_Employeedocuments', FILENAME = N' D:\EltechDB\EmployeeDocuments\' ) TO FILEGROUP [EmployeeDoucment]
GO

现在,运行以下查询,查看FILESTREAM文件组的详细信息。


  USE eltechdb
  go
  SELECT df.NAME          AS [Logical Name],
         df.size / 128    AS [File Size],
         fg.NAME          AS [FileGroup Name],
         df.physical_name AS [Physical Path]
  FROM   sys.database_files AS df
         INNER JOIN sys.filegroups AS fg
                 ON df.data_space_id = fg.data_space_id;
 

输出。

View Filegroups in database

正如你所看到的,名为EmployeeDocument的FILESTREAM文件组已经被创建,一个名为DF_EmployeeDocuments的数据文件已经被添加。

在FILESTREAM文件组中添加多个FILESTREAM数据文件

我们可以使用ALTER DATABASE ADD FILE TO FILEGROUP语句在数据库中的Filegroup中添加一个二级FILESTREAM数据文件。假设我们想在EltechDB数据库中添加一个名为DF_EmployeeContract的数据文件。FILSTREAM数据文件的位置是D:\EltechDB\EmployeeContract。查询的内容如下。

USE [master]
GO
ALTER DATABASE [EltechDB] ADD FILE ( NAME = N' DF_EmployeeContracts', FILENAME = N'D:\EltechDB\EmployeeContracts' ) TO FILEGROUP [EmployeeDoucment]
GO

运行以下查询以查看数据文件的详细信息。


  USE eltechdb
  go
  SELECT df.NAME          AS [Logical Name],
         df.size / 128    AS [File Size],
         fg.NAME          AS [FileGroup Name],
         df.physical_name AS [Physical Path]
  FROM   sys.database_files AS df
         INNER JOIN sys.filegroups AS fg
                 ON df.data_space_id = fg.data_space_id;

输出

View Filegroups in database

你可以看到,数据文件DF_EmployeeContracts已经被添加到EltechDB的SQL数据库中。

总结

在这篇文章中,我们学习了如何在SQL数据库中管理文件组。我们学习了以下几种情况。

  1. 如何启用FILESTREAM功能。
  2. 使用SSMS和T-SQL查询添加一个FILESTREAM文件组。