设为首页 收藏本站
查看: 1843|回复: 0

[经验分享] Microsoft SQL Server 2000 Analysis Services 数据库部署

[复制链接]

尚未签到

发表于 2015-7-1 10:45:58 | 显示全部楼层 |阅读模式
  1. 部署方式
  按照微软的操作指南,分析服务数据库发布有四种方式:存档和恢复、复制粘贴、基于文件的备份和恢复以及无支持的(unsupported)DSO/XML Scripting Utility。本文采取第一种方式并结合DSO(Decision Support Objects)对分析服务数据库进行配置。
  1.1 存档和恢复
  通过Analysis Manager把要发布的分析服务数据库存档成CAB包,把这个包分发到目标应用环境,通过DSO把CAB包恢复到分析服务器,并且再做一些需要的配置。
  1.2 复制粘贴
  通过Analysis Manager复制源分析服务数据库到目标分析服务器。这种方式需要主要靠人工干预,不做讨论。
  1.3 基于文件的备份和恢复
  这是基于分析服务数据库文件的备份和恢复,不推荐用这种方式,具体的内容请查看微软相关资料。
  1.4 DSO/XML Scripting Utility
  这是四种方式中最好的一种。微软提供的一种基于.net的工具,把分析服务数据库导成经过定义的XML文件,发布的时候,可以对XML做一些修改,然后通过这个工具导入到目标分析服务器中,类似于数据库的发布过程。可惜的是目前这种方式还是未支持的(unsupported),将来的版本应该会完善。
  2. 存档和恢复方式实践
  在这一节,我们讨论在存档和恢复方式下的部署问题,文章假设,目标计算机上已经安装并配置好Microsoft SQL Server 2000 Analysis Services,发布的程序可以正确调用DSO,并且发布程序只针对本机的分析服务器进行相关配置。
  2.1存档
  存档的过程相当简单,通过Analysis Manager把开发环境下的分析服务器数据库存档成CAB文件即可。这个文件就是我们安装包中需要分发的文件。
  2.2 恢复
  通过msmdarch.exe外部程序把CAB文件导入到分析服务器中。msmdarch.exe在分析服务器安装目录的Bin子目录下Program Files\Microsoft Analysis Services\Bin。





  msmdarch格式说明
  存档数据库:
  msmdarch /A Server OLAPDataPath DatabaseName BackupFileName [LogFileName [TempDirectory]]
  还原数据库:
  msmdarch /R Server OLAPDataPath BackupFileName [LogFileName [TempDirectory]]
  仅当数据库不存在时还原该数据库:
  ?msmdarch /RS Server OLAPDataPath BackupFileName [LogFileName [TempDirectory]]
  ?
  (获取更详细的信息请查看帮助)

  注意:
  1. 用命令行的方式执行msmdarch命令Windwos Shell会马上返回,而不是等到任务执行完成。用批处理可以解决这个问题。
  2. 带空格的文件名或路径名作参数传递需要加双引号。
  3. Server参数传入计算机名,传入IP地址或localhost都是不允许的。
  4. 参数非法msmdarch命令会马上返回并且日志文件往往不能被成功创建。
  ?
  下面是C#的示例:




//CAB包包含的分析服务器数据库名称
private const string REGIONOLAPDATABASENAME = "OLAP_BACKUP";
//取得分析服务器Bin路径
private static string GetAnalysisServiceBinPath()
{
object obj = null;
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(        "SOFTWARE\\Microsoft\\OLAP Server\\Server Connection Info");
if (regKey != null)
{
obj = regKey.GetValue("Locks Directory");
}
regKey.Close();
Registry.LocalMachine.Close();
return obj.ToString();
}
//取得Msmdarch文件名
private static string GetMsmdarchFileName()
{
return GetAnalysisServiceBinPath() + "\\msmdarch";
}
//取得分析服务器数据路径
private static string GetAnalysisServiceDataPath()
{
object obj = null;
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(        "SOFTWARE\\Microsoft\\OLAP Server\\CurrentVersion");
if (regKey != null)
{
obj = regKey.GetValue("RootDir");
}
regKey.Close();
Registry.LocalMachine.Close();
return obj.ToString();
}
//把CAB包导入到当前计算机的分析服务器中
private static void LoadOLAPDatabase(  string TempDir, string OLAPBackupFileName,   string OLAPServer, out string OLAPCatalog)
{
string sWordDir = GetAnalysisServiceBinPath();
string sMsmdarchFileName = GetMsmdarchFileName();
string sDataPath = GetAnalysisServiceDataPath();
string sBackupFileName = OLAPBackupFileName;
string sTempDir = TempDir;
if (TempDir[TempDir.Length-1] != '\\') TempDir += "\\";
string sTempBatch = sTempDir + @"\Msmdarch.bat";
string sCommand = "\"" + sMsmdarchFileName + "\"" +
@" /R " +
OLAPServer + " " +
"\"" + sDataPath + "\" " +
"\"" + sBackupFileName + "\"";
if(sWordDir == null || sWordDir == "")
throw new Exception("分析服务器尚未安装,请先安装分析服务器!");
if (!Directory.Exists(sTempDir))         Directory.CreateDirectory(sTempDir);
FileInfo fiBatch = new FileInfo(sTempBatch);
if (fiBatch.Exists) fiBatch.Delete();
using (StreamWriter sw = fiBatch.CreateText())
{
sw.WriteLine(sCommand);
}
ProcessStartInfo psi = new ProcessStartInfo(sTempBatch);
psi.WindowStyle = ProcessWindowStyle.Normal;
psi.WorkingDirectory = sWordDir;
Process p = Process.Start(psi);
p.WaitForExit();
DSO.Server dsoServer = new DSO.ServerClass();
dsoServer.Connect(OLAPServer);
try
{
if (!dsoServer.MDStores.Find(REGIONOLAPDATABASENAME))
{
throw new Exception("导入CAB包到分析服务器失败!");
}
}
finally
{
dsoServer.CloseServer();
}
OLAPCatalog = REGIONOLAPDATABASENAME;
}
  2.3 更改分析服务数据库名称
  通过msmdarch命令导入的分析服务数据库的名称是固定的,在发布以后需要改名。目前,笔者还没有发现可以直接更改数据库名称的方法,一个替代的方法是将这个导入的数据库复制成一个指定名称的数据库然后把原来的这个数据库删除。所有这些操作通过DSO完成。
  下面是C#的示例:




private static void MoveOLAPDatabase(
  string OLAPServer,
  string SourceCatalog,
  string DestCatalog
)
{
if (string.Compare(SourceCatalog, DestCatalog, true) == 0) return;
DSO.Server dsoServer = new DSO.ServerClass();
dsoServer.Connect(OLAPServer);
try
{   
if (!dsoServer.MDStores.Find(SourceCatalog))
{
throw new Exception(
string.Format("源OLAP数据库\"{0}\"不存在!", SourceCatalog)
);
}
DSO.MDStore dbSource =
(DSO.MDStore)(dsoServer.MDStores.Item(SourceCatalog));
if (dsoServer.MDStores.Find(DestCatalog))
{
dsoServer.MDStores.Remove(DestCatalog);
}
DSO.MDStore dbDest = (DSO.MDStore)dsoServer.MDStores.AddNew(
DestCatalog,
DSO.SubClassTypes.sbclsRegular
);
dbSource.Clone(dbDest, DSO.CloneOptions.cloneMajorChildren);
dbDest.Update();
dsoServer.MDStores.Remove(SourceCatalog);
}
finally
{
dsoServer.CloseServer();
}
}
  2.4 更改分析数据库中的数据源
  分发到目标计算机上的分析服务数据库的数据源依然指向开发环境的数据库,在分发的时候需要加以定制。
  下面是调用DSO的C#示例:




private static void UpdateOLAPDataSource(
string OLAPServer,
string OLAPCatalog,
string DBServer,
string DBSUserID,
string DBSPassword,
string DBName
)
{
DSO.Server dsoServer = new DSO.ServerClass();
dsoServer.Connect(OLAPServer);
try
{
DSO.Database dsoDB = (DSO.Database)dsoServer.MDStores.Item(OLAPCatalog);
dsoDB.LockObject(
DSO.OlapLockTypes.olaplockWrite,
"config datasource"
);
try
{
DSO.DataSource dsoDS =
(DSO.DataSource)dsoDB.DataSources.Item(
REGIONOLAPDATASOURCENAME
);
dsoDS.ConnectionString =
"Provider=SQLOLEDB.1;Password=" +
DBSPassword +
";Persist Security Info=True;User ID=" +
DBSUserID + ";Initial Catalog=" +
DBName + ";Data Source=" +
DBServer +
";Connect Timeout=15";
dsoDS.Update();
}
finally
{
dsoDB.UnlockObject();
}
}
finally
{
dsoServer.CloseServer();
}
}
  3. 小结
  通过以上的介绍可以发现,用存档和恢复的方式发布分析服务数据库主要通过DSO完成的,关于DSO的用法可以参看微软的相关文档。通过比较可以发现存档和恢复的方式的不足指出是不能远程对分析服务进行部署,所以,我们期待微软分析服务的下一个版本全面支持DSO/XML Scripting Utility。
  ?
  A. 参考资料
  A.1. Microsoft SQL Server 2000 Analysis Services Operations Guide

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-82179-1-1.html 上篇帖子: SQL Server (一):SQL Server 2005概述 下篇帖子: Sql Server Reporting Service的页面分页讨论
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表