FILESTREAM功能被禁用

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' 
View Code


还原数据库

--还原数据库
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
View Code


错误信息是说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%'
View Code

请按步骤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
View Code

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
View Code

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

--备份数据库
BACKUP DATABASE [AdventureWorks2008] TO  DISK = N'E:\AdventureWorks2008_F_20161109.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'AdventureWorks2008-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
GO
View Code

你已经有了一个备份文件,那么就可以回到文章的开始了。。。
当然,你也可以创建一个全新的带文件流的数据库

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')
View Code

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
)
View Code

3、禁用FILESTREAM功能

USE master
GO
EXEC sp_configure filestream_access_level, 0
GO
RECONFIGURE
GO
View Code


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]
View Code

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

4、参考文档

解决FILESTREAM 功能被禁用:http://www.cnblogs.com/samsonhuang/articles/2342598.html
文件流知识介绍:http://database.51cto.com/art/201109/288736.htm

posted @ 2016-12-01 22:24  Uest  阅读(1087)  评论(0)    收藏  举报