如何利用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
第一步:获得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
相关文章推荐
- C# WinForm如何部署数据库
- 如何用C#来部署数据库[转]
- 如何用C#来部署数据库
- 如何用C#来部署数据库续
- 如何用C#来部署数据库
- 如何用C#来部署数据库
- 如何用C#来部署数据库
- c#.net连接access操作类 (转)|| C#中如何连接Access2007数据库
- 如何在C#下利用RichTextBox打开一个有文字格式和图片的Word文档
- 如何利用SendMessage实现C#进程间通信?收藏
- 如何高效率读取数据库并分页显示(利用limit)
- C#中数据库数据如何导出至Excel表格
- (C#)如何利用Graphics画出一幅图表
- C#里面如何利用流获取一个记事本内容的行数
- (精)如何利用T_SQL实现数据库备份与还原处理之一--(如何利用sql语句,正确还原数据库)
- 如何利用ASP把图片上传到数据库
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现) .
- C# 利用log4net 把日志写入到数据库表中
- C#基础视频教程6.3 如何简单读写数据库
- asp.net教程-如何利用C#创建和调用DLL