SQL Server安装后是否有使用VBScript启用FileStream的替代方法?

时间:2010-05-31 09:04:31

标签: sql-server vbscript filestream

要在DB 3上使用Filestream,必须执行以下步骤:

1)启用服务器/实例级别

2)在数据库级别启用它(sp_configure

3)创建支持文件流的varbinary(max)字段

使用T-SQL

可以轻松完成

(2)和(3)

(1)可以从SQL Server配置管理器手动完成,基本上我需要检查所有3个复选框:

alt text http://www.sql-server-performance.com/admin/article_images_new/2008_images/Configure_Filestream_in_SQL_Server_2008/Image2.jpg

但如何自动化呢?

我发现这个artcile "Enabling filestream usin a VBScript",有没有比使用VBScripts更好的方法呢?可能只有2008R2可以做的事情吗?

如果VBScript是唯一的解决方案,那可能是缺点?

3 个答案:

答案 0 :(得分:5)

除了单击配置管理器之外,唯一的方法是通过WMI(这是VBScript所做的)。如果你不喜欢VB,这就是我从C#配置它的方法(注意代码需要以管理员权限运行(提升)):

private ManagementObject GetFilestreamManagementObject(string machineName, string instanceName)
{
    string managementPath = string.Format(@"\\{0}\root\Microsoft\SqlServer\ComputerManagement10", machineName);
    ManagementScope managementScope = new ManagementScope(managementPath);
    managementScope.Connect();

    SelectQuery query = new SelectQuery("FilestreamSettings", string.Format("InstanceName='{0}'", instanceName));
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(managementScope, query))
    {
        ManagementObjectCollection moc = searcher.Get();
        if (1 != moc.Count)
        {
            string exceptionText = String.Format("Expected single instance of FilestreamSettings WMI object, found {0}.", moc.Count);
            throw new FilestreamConfigurationException(exceptionText);
        }
        ManagementObjectCollection.ManagementObjectEnumerator enumerator = moc.GetEnumerator();
        if (false == enumerator.MoveNext())
        {
            throw new FilestreamConfigurationException("Couldn't move ManagementObjectEnumerator to the first entry.");
        }
        return (ManagementObject)enumerator.Current;
    }
}

private void EnableFilestream(int accessLevel)
{
    ManagementObject filestreamSettingsObject = GetFilestreamManagementObject("myMachine", "MSSQLSERVER");
    ManagementBaseObject methodArgs = filestreamSettingsObject.GetMethodParameters("EnableFilestream");
    methodArgs["AccessLevel"] = accessLevel;
    methodArgs["ShareName"] = ""; //default

    ManagementBaseObject returnObject = filestreamSettingsObject.InvokeMethod("EnableFilestream", methodArgs, null);
    if (returnObject == null)
    {
        throw new FilestreamConfigurationException("Result of calling filestreamSettingsObject.InvokeMethod(\"EnableFilestream\", methodArgs, null)" is null);
    }
    uint returnValue = (uint)returnObject.GetPropertyValue("ReturnValue");

    const uint errorSuccessRestartRequired = 0x80070BC3;
    if (returnValue != 0 && returnValue != errorSuccessRestartRequired)
    {
        Win32Exception win32Exception = new Win32Exception((int)returnValue);
        string exceptionText =
                string.Format("'EnableFilestream' method returned {0}: {1}", returnValue, win32Exception.Message);
        throw new FilestreamConfigurationException(exceptionText);
    }
}

答案 1 :(得分:3)

跑吧。

USE master
Go
EXEC sp_configure 'show advanced options'
GO
EXEC sp_configure filestream_access_level, 3
GO
EXEC sp_filestream_configure 
  @enable_level = 3
, @share_name = N'FS';
GO
RECONFIGURE WITH OVERRIDE
GO

更多关于此

http://www.mssqltips.com/tip.asp?tip=1489

  

0 =禁用(这是默认值)

     

1 =仅对T-SQL访问启用

     

2 =启用T-SQL访问和本地访问   文件系统访问

     

3 =启用T-SQL访问,本地   文件系统访问和远程文件   系统访问

您可以将脚本存储在存储过程中,然后从您的应用程序或任何您想要的地方调用它。

以下是此主题的链接

http://www.mssqltips.com/tip.asp?tip=1838

http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/03/filestream-configuration-and-setup-changes-in-sql-server-2008-february-ctp.aspx

http://technet.microsoft.com/en-us/library/cc645923.aspx

http://www.sql-server-performance.com/articles/dba/Configure_Filestream_in_SQL_Server_2008_p1.aspx

修改

回答你的评论。

这就是我所说的第2步

CREATE DATABASE Archive 
ON
PRIMARY ( NAME = Arch1,
    FILENAME = 'c:\data\archdat1.mdf'),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM( NAME = Arch3,
    FILENAME = 'c:\data\filestream1')
LOG ON  ( NAME = Archlog1,
    FILENAME = 'c:\data\archlog1.ldf')
GO

http://technet.microsoft.com/en-us/library/cc645585.aspx

检查所有步骤的链接

Filestream in Sql Server 2008 Express

祝你好运!

答案 2 :(得分:1)

Pawel的解决方案对我们很有用。我们使用VBS看到了50%的失败率 - Pawel的方法还没有看到失败。与Greg的结果不同,它对我们来说非常适合本地系统。实际上,这就是我们尝试过的所有内容。

我们确实需要对Pawel的代码进行一些调整。这条线

throw new FilestreamConfigurationException("Result of calling filestreamSettingsObject.InvokeMethod(\"EnableFilestream\", methodArgs, null)" is null);

最终引用字符不合适。它应该在“is null”之后,就在“);”之前。

我们还必须确保正确构建了instanceName。例如,如果我们有“mymachine \ myinstance”,我们必须确保“instanceName = myinstance”而不是全名。此外,如果我们有“mymachine”(默认实例),我们必须有“instanceName = MSSQLSERVER”。也许这就是Greg的问题 - 当我们将instanceName设置为错误时,我们得到的结果与Greg报告相同。