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'

还原数据库
--还原数据库 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关键字,如下边的建表语句:
View CodeUSE 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库,则不会删除对应的文件流文件夹。在下次使用相关的文件夹时会报错
4、参考文档
解决FILESTREAM 功能被禁用:http://www.cnblogs.com/samsonhuang/articles/2342598.html
文件流知识介绍:http://database.51cto.com/art/201109/288736.htm
|
|
【作者】: 醒嘞 |
| 【出处】: http://www.cnblogs.com/Uest/ | |
| 【声明】: 本文内容仅代表个人观点。如需转载请保留此段声明,且在文章页面明显位置给出原文链接! |
浙公网安备 33010602011771号