昨天安装SQL Server 2008,在进行系统检查的时候被告知Visual Studio 2008为低版本,无法继续安装。终于在今天等到了VS2008的SP1,安装后再来安装SQL Server
安装倒是很简单,过程乏善可陈,由于选择的组件比较少,安装也很快。安装完成后照例准备装上示例数据库体验一下数据库引擎的新功能,在CodePlex上下载示例数据库:http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=16040
由于是在我本机上测试, 还是32位系统,也没有安装集成服务,商业智能等组件,这里只选择SQL2008.AdventureWorks_OLTP_DB_v2008.x86.msi下载
安装示例数据库其实只是创建了一个目录而已.......数据库还需要执行脚本完成创建和还原的,那么问题开始了
执行安装目录下 Tools\Samples\RestoreAdventureWorks2008.sql,提示错误:
FILESTREAM 功能被禁用。
xxxx其余错误若干
上网Google了一下,发现中文系统虽然看起来方便,但是出了问题真是不好找啊....换成英文关键字 FILESTREAM feature is disabled,果然有不少说明,怀着非常浮躁的心态,找到一篇Blog就开始看,立刻照着解决。其实很简单,只需要在管理器中左侧导航栏中服务实例上右键菜单->属性->高级->文件流,相应设置为“已启用 Transact-SQL 访问”,确认关闭,重启MSSQLSERVER服务,满心欢喜的等待SQL语句能够执行,没想到问题依旧
又仔细看了两眼CodePlex和MSDN的说明,似乎可能需要重启下系统,照做之....还是不可用啊..真是:“也许可能大概是,然而未必不见得”...
最后又查找了一系列文章,执行了多次SQL语句
RECONFIGURE
GO
仍然没有解决问题,真是很奇怪啊......
最后终于在MSDN的Blog里找到了答案,似乎是一个Bug....地址在这里:http://blogs.msdn.com/sqlserverstorageengine/archive/2008/06/09/enabling-filestream-post-sql2008-setup-a-known-issue-in-sql-config-manager.aspx
估计有和我一样不愿意仔细看的朋友,这里简单说一下解决办法:
1,下载这个脚本,解压后执行:http://www.codeplex.com/SQLSrvEngine/Release/ProjectReleases.aspx?ReleaseId=14071;
2,重新启动MSSQLSERVER服务;
3,执行恢复AdventureWorks2008的SQL脚本,注意需要设置其中的代码:
SET @source_path = 'C:"Program Files"Microsoft SQL Server"100"'
4,OK
再来说说FILESTREAM和问题原因:
FILESTREAM是SQL Server 2008的新特性之一,MSDN里的说明如下:
每天创建的大部分数据(如文本文档、图像和视频)均为非结构化的数据。这类非结构化的数据通常存储在数据库之外,以便与数据库中的结构化数据分隔开来。这种分隔可能会增加数据管理的复杂程度。或者,如果数据与结构化存储相关联,则可能会限制文件流功能和性能。
通过将 varbinary(max) 二进制大型对象 (BLOB) 数据以文件形式存储在文件系统上,FILESTREAM 使 SQL Server 数据库引擎和 NTFS 文件系统成为了一个整体。Transact-SQL 语句可以插入、更新、查询、搜索和备份 FILESTREAM 数据。通过 Win32 文件系统接口可以流式方式访问数据。
FILESTREAM 使用 NT 系统缓存来缓存文件数据。这有助于减少 FILESTREAM 数据可能对数据库引擎性能产生的任何影响。由于没有使用 SQL Server 缓冲池,因此该内存可用于查询处理。
由于AdventureWorks2008作为示例数据库,自然会尽量展现新特性, 在表中就使用了FileStream作为存储,因此在恢复时出错;
那么为什么按照说明执行 EXEC sp_configure 'filestream_access_level', '2' 没有生效呢,那篇Blog提到了其中的原因,简述如下:
"当你在已经安装了VS2008的机器上安装SQL Server 2008时,并且在安装SQL Server的过程中没有启用FILESTREAM,之后又希望启用FILESTREAM(比如要安装AW2008的示例库),那么你必须首先在SQL配置管理器里启用FILESTREAM,并且执行一系列Windows的配置步骤。"
原文:
The most common case is when you decide to install SQL 2008 on a machine where you installed Visual Studio 2008 (install with default settings) and during SQL 2008 setup you didn't want to enable FILESTREAM; then decide to decide to enable FILESTREAM post setup (for example, in order to use the SQL 2008 AdventureWorks database samples, which require FILESTREAM to be enabled). In this case, you need to enable FILESTREAM in SQL Config Manager first for needed Windows configuration steps.
如上所述,我正好是这种情况(还有一种情况是先装了SQL Server 2008未启用FILESTREAM,后来又安装了VS2008,同时包括附带的SQL Server 2005 Express),那么文中也并没有具体提到后续的Windows配置步骤,而是给出了CodePlex的链接,通过那个脚本可以解决这个困扰,在我的机器上已经正常启用并成功安装示例库。文章中还提到,这个问题将在下一个版本被修正,可Blog的Post时间是6月,当时还是RC呢,现在安装的RTM似乎还存在这个问题....如果你准备安装SQL Server 2008并且已安装了VS2008,也希望安装示例库,那么最好的解决办法就是在安装SQL Server 2008的时候某一步骤的选项中注意启用FILESTREAM,中文应该是文件流,这应该是最省事的方法了.......
问题很简单,希望遇到同样问题的朋友少走弯路:)