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/ | |
【声明】: 本文内容仅代表个人观点。如需转载请保留此段声明,且在文章页面明显位置给出原文链接! |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?