隐藏

sql2014针对FILESTREAM功能被禁用

发布:2024/7/6 16:18:31作者:管理员 来源:本站 浏览次数:42

本文目录


   1、背景

   2、启用FILESTREAM功能

       2.1、启用SQL Server服务中的文件流支持

       2.2、配制数据库来支持文件流存储

       2.3、定义支持文件流存储的列

   3、禁用FILESTREAM功能

   4、参考文档


2016-03-08 17:56 整理,未发布

返回顶部

1、背景


从别处拿来一备份文件


restore headeronly from DISK = N'E:\AdventureWorks2008_F_20161109.bak'

restore filelistonly from DISK = N'E:\AdventureWorks2008_F_20161109.bak'



还原数据库

复制代码


--还原数据库

RESTORE DATABASE [AdventureWorks2008New] FROM DISK = N'E:\AdventureWorks2008_F_20161109.bak' WITH FILE = 1

,  MOVE N'AdventureWorks2008_Data' TO N'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\AdventureWorks2008New_Data.mdf'

,  MOVE N'AdventureWorks2008_Log' TO N'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\AdventureWorks2008New_Log.ldf'

,  MOVE N'AdventureWorks2008_Fs' TO N'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\AdventureWorks2008New_Fs'

,  NOUNLOAD,REPLACE,STATS = 10

GO


复制代码



错误信息是说FILESTREAM 功能被禁用。

返回顶部

2、启用FILESTREAM功能


   文件流特性通过将二进制大字段数据存储在本地文件系统中,从而将Windows新技术文件系统(NTFS)和SQL Server数据库引擎集成在一起。你可以使用Transact-SQL语句来查询、插入或更新数据,或者使用Win32文件系统界面来直接访问数据。


2.1、启用SQL Server服务中的文件流支持


Step1、SQL Server配制管理器->服务属性->文件流->勾选[针对Transact-SQL访问启用文件流]

Step2、设置文件流访问级别

复制代码


USE master

GO

EXEC sp_configure filestream_access_level, 2 --同时支持T-SQL和Win32流访问

GO

RECONFIGURE

GO

--查看value

SELECT * FROM sys.sysconfigures s WHERE comment LIKE '%filestream%'


复制代码


请按步骤1->步骤2的顺序操作,如果按步骤2->步骤1,在还原时会提示FILESTREAM 功能被禁用,此时需要再次执行步骤2语句。

单独只操作步骤1或步骤2还原会提示FILESTREAM 功能被禁用。

复制代码


--再次还原数据库,成功还原

RESTORE DATABASE [AdventureWorks2008New] FROM DISK = N'E:\AdventureWorks2008_F_20161109.bak' WITH FILE = 1

,  MOVE N'AdventureWorks2008_Data' TO N'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\AdventureWorks2008New_Data.mdf'

,  MOVE N'AdventureWorks2008_Log' TO N'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\AdventureWorks2008New_Log.ldf'

,  MOVE N'AdventureWorks2008_Fs' TO N'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\AdventureWorks2008New_Fs'

,  NOUNLOAD,REPLACE,STATS = 10

GO


复制代码

2.2、配制数据库来支持文件流存储


这里我针对示例数据库添加一个文件流,确保你已启用FILESTREAM功能

复制代码


--添加文件流文件组、文件

USE [master]

GO

ALTER DATABASE [AdventureWorks2008] ADD FILEGROUP [FileStreamGrp] CONTAINS FILESTREAM

GO

ALTER DATABASE [AdventureWorks2008] ADD FILE ( NAME = N'AdventureWorks2008_Fs', FILENAME = N'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\AdventureWorks2008_Fs' ) TO FILEGROUP [FileStreamGrp]

GO


复制代码


此时数据库已包含一个文件流,备份数据库


--备份数据库

BACKUP DATABASE [AdventureWorks2008] TO  DISK = N'E:\AdventureWorks2008_F_20161109.bak'

WITH NOFORMAT, NOINIT,  NAME = N'AdventureWorks2008-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10

GO


你已经有了一个备份文件,那么就可以回到文章的开始了。。。

当然,你也可以创建一个全新的带文件流的数据库

复制代码


USE master

GO

IF EXISTS(SELECT name FROM sys.databases WHERE name = 'HumanResources')

DROP DATABASE HumanResources

GO

CREATE DATABASE HumanResources

ON

PRIMARY(

NAME = HumanRscsDat,

FILENAME = 'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\HumanRscsDat.mdf'),

FILEGROUP FileStreamGrp CONTAINS FILESTREAM(

NAME = HumanRscsFs,

FILENAME = 'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\HumanRscsFs')

LOG ON(

NAME = HumanRscsLog,

FILENAME = 'D:\SQL08R2\MSSQL10_50.SQL08R2\MSSQL\DATA\HumanRscsLof.ldf')


复制代码

2.3、定义支持文件流存储的列


   要使一张表包含一个文件流列,它必须也要包含一个ROWGUIDCOL关键字,且此关键字需要配制为非空和唯一约束。这个文件流列对于支持Win32文件流访问来说是必须的。此文件流列本身必须配制为varbinary(max)类型,并包含FILESTREAM关键字,如下边的建表语句:

   复制代码


   USE HumanResources

   GO

   IF OBJECT_ID ( N'Candidate', N'U') IS NOT NULL

   DROP TABLE dbo.Candidate

   GO

   CREATE TABLE Candidate(

   CandidateId INT IDENTITY PRIMARY KEY,

   CandidateGuid UNIQUEIDENTIFIER ROWGUIDCOL

   NOT NULL UNIQUE DEFAULT NEWID(),

   CandidateResume VARBINARY(MAX) FILESTREAM NULL

   )


   复制代码


返回顶部

3、禁用FILESTREAM功能

复制代码


USE master

GO

EXEC sp_configure filestream_access_level, 0

GO

RECONFIGURE

GO


复制代码



SQL Server配制管理器->服务属性->文件流->去掉[针对Transact-SQL访问启用文件流]

禁用FILESTREAM功能,必须重启数据库服务才能生效!

复制代码


--Clear

--AdventureWorks2008

USE [AdventureWorks2008]

GO

ALTER DATABASE [AdventureWorks2008]  REMOVE FILE [AdventureWorks2008_Fs]

GO

ALTER DATABASE [AdventureWorks2008] REMOVE FILEGROUP [FileStreamGrp]

GO

--HumanResources

DROP DATABASE HumanResources

--AdventureWorks2008New

DROP DATABASE [AdventureWorks2008New]


复制代码


提醒:如果在FILESTREAM功能启用后,执行上面的语句会删除对应的文件流文件夹。如果在FILESTREAM功能禁用,且重启数据库服务生效后,删除HumanResources库,则不会删除对应的文件流文件夹。在下次使用相关的文件夹时会报错



ALTER DATABASE [test3]
ADD FILEGROUP [DataFiles] CONTAINS FILESTREAM
GO
 
ALTER DATABASE [test3]
ADD FILE ( NAME = [test3_Fs], FILENAME = 'E:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER2014\MSSQL\DATA\DATAFILE' )
TO FILEGROUP [DataFiles]
GO




sql2014 开启FILESTREAM 功能


为了在SQL Server 2014中启用FILESTREAM功能,您需要执行以下步骤:


  1.    打开SQL Server Configuration Manager。
  2.    点击SQL Server服务。
  3.    右击SQL Server实例,选择“属性”。
  4.    切换到“FILESTREAM”标签页。
  5.    勾选“启用FILESTREAM for Transact-SQL 访问”。
  6.    如果您想通过Windows访问FILESTREAM数据,请勾选“启用FILESTREAM for 文件I/O 流访问”。
  7.    指定FILESTREAM共享的根目录。
  8.    确认更改并重新启动SQL Server服务。

以下是相应的SQL命令,用于启用FILESTREAM:


EXEC sp_configure 'filestream_access_level', 2

RECONFIGURE

这里的sp_configure存储过程用于设置FILESTREAM的访问级别,而RECONFIGURE语句用于更新配置。

请注意,启用FILESTREAM可能需要重新启动服务器。此外,确保在执行这些步骤之前您具有适当的权限,并且已经根据您的系统配置了必要的硬件和软件先决条件。