您的位置:首页 > 数据库

如何利用c#部署SSAS数据库

2014-01-28 14:23 627 查看
方法一:通过执行xmla文件

第一步:获得SSAS部署脚本
在SSAS服务器选取一个相似数据库,生成脚本,将该脚本保存为xmla文件。注意,要正确生成,需要用deployment wizard,而且要正确设置connection string,还有模拟账户里建议选择service account(后文有描述)。

第二步:添加Analysis Management Objects
在项目的"引用"里添加Microsoft.AnalysisServices.dll

第三步:执行代码
Server _server
= new Server();
[align=left] _server.Connect( ".\\MSSQLSERVER2014");[/align]
[align=left] //load xmla content to string.[/align]
StreamReader sr
= new StreamReader( "cube000333.xmla",
System.Text.Encoding .Default);
string strXMLA
= sr.ReadToEnd();
[align=left] sr.Close();[/align]
[align=left] xmlaTemplateCommand = xmlaTemplateCommand.Replace([/align]
"$(ASDatabaseID)" ,
<yourasdatabasename>);
[align=left] xmlaTemplateCommand = xmlaTemplateCommand.Replace([/align]
"$(ASDatabaseName)" ,
<yourasdatabasename>);
[align=left] xmlaTemplateCommand = xmlaTemplateCommand.Replace([/align]
"$(DataSourceConnectionString)" ,
<yourconnectionstring>);
[align=left] //execute[/align]
XmlaResultCollection _result
= _server.Execute(xml);

方法二:通过克隆数据库对象

第0步:获得模板数据库、服务器等信息
Server destDbServer和Database tmplateDb这两个对象,其中tmplateDb可以通过如下方式获得:
Database asdatabase = server.Databases.FindByName( <yourAsDbName>);
第一步:克隆
Database newAnalysisDatabase = templateDb.Clone();
第二步:修改ID,Name,模拟方式等内容
[align=left] newAnalysisDatabase.ID = analysisDBName;[/align]
[align=left] newAnalysisDatabase.Name = analysisDBName;[/align]
newAnalysisDatabase.DataSourceImpersonationInfo.ImpersonationMode
= ImpersonationMode.ImpersonateServiceAccount;

第三步:Server对新数据库做Add,旧数据库则做Update
[align=left] destDbServer.Databases.Add(newAnalysisDatabase);[/align]

newAnalysisDatabase.Update( UpdateOptions.ExpandFull);

常见问题:
[align=left] 1 部署后,可以正常Process,但是如果Browse数据,会提示:[/align]
"OLAP 存储引擎中存在错误: 处理 ID 为“DimSiteResource”、名称为“DimSiteResource”的 dimension 时出错。

高级关系引擎中存在错误。 无法与 DataSourceID 为“AttributionModelDataMart”、名称为“AttributionModelDataMart”的数据源建立连接。出现以下系统错误: 提供的名称不是正确格式的帐户名。

高级关系引擎中存在错误。 无法与 DataSourceID 为“AttributionModelDataMart”、名称为“AttributionModelDataMart”的数据源建立连接。出现以下系统错误: 提供的名称不是正确格式的帐户名。 "

问题原因:连接数据仓库的账户不正确。在"Windows事件查看器\安全"中可以看出认证失败,而且得到下述信息:
SubjectUserName MSOLAP$MSSQLSERVER2014
SubjectDomainName NT Service
在采用模拟账户时,服务账户MSOLAP$MSSQLSERVER2014会模拟用户的登陆凭据。如果用户的身份验证失败,那么系统就无法用服务账户正确登陆。那么为何用户身份验证会失败呢?我们在对模板数据库生成模板xmla的时候,里面会填写account,但密码则出于安全性的考虑被剪了,所以如果直接用这个模板xmla,就会让MSOLAP&MSSQLSERVER2014会模拟一个只有用户名、没有密码的账户。所以,我们的模板文件上要加入账户密码。或者干脆选择模拟服务账户。

解决方法:
如果是通过xmla部署:
方法1:在xmla文件中ImpersonationInfo节点下填入如下信息,特别是password
< ImpersonationMode>ImpersonateAccount </ImpersonationMode>
[align=left] < Account>$(Account) </Account>[/align]
[align=left] < Password>$(Password) </Password>[/align]

方法2:也可以xmla文件中所需要的DataSource节点中把ImporsonationMode改为ImpersonateServiceAccount,如下

[align=left] < ImpersonationInfo>[/align]
[align=left] <ImpersonationMode>ImpersonateServiceAccount</ImpersonationMode>[/align]
[align=left] </ImpersonationInfo>[/align]

如果是通过克隆模板数据库部署:
方法1:newAnalysisDatabase.DataSourceImpersonationInfo.ImpersonationMode里设置为ImpersonateAccout,然后设置newAnalysisDatabase.DataSourceImpersonationInfo.Account属性和newAnalysisDatabase.DataSourceImpersonationInfo.Password属性

方法2:newAnalysisDatabase.DataSourceImpersonationInfo.ImpersonationMode里设置为ImpersonateServiceAccount
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: