使用AMO创建Analysis Services数据库完全副本时生成空库如何解决
Analysis Services 自动化克隆数据库为空的修复方案
问题原因
你调用的无参Clone()方法仅克隆数据库对象的顶层基础属性,不会递归克隆数据源、数据表、分区、角色等下级子对象,最终只会生成没有元数据结构的空数据库,对应你在SSMS中看到的现象如下:
修复代码
只需要将Clone()改为带参数的重载方法Clone(true)即可实现深克隆,完整代码如下:
using (var server = new Server()) { server.Connect(connString); var sourceDb = server.Databases.GetByName(dbName); // 传入true开启深克隆,递归复制所有子级对象 var newDb = sourceDb.Clone(true); newDb.Name = newDbName; newDb.ID = server.Databases.GetNewID(); server.Databases.Add(newDb); newDb.Update(UpdateOptions.ExpandFull); // 可选:需要同步源库数据时开启全量处理 // newDb.Process(ProcessType.ProcessFull); server.Disconnect(); }
额外注意事项
- 如果你只需要克隆数据库的元数据结构,不需要同步数据,不需要添加上面注释的
Process代码;如果需要新库和源库数据一致,取消注释执行全量处理即可。 - 操作前确认使用的连接账号对源数据库有读取权限,对目标Analysis Services实例有创建数据库的权限,避免权限不足导致部分对象克隆失败。
- 该逻辑同时适配本地SQL Server Analysis Services、Azure Analysis Services、Power BI Premium工作区的克隆操作。
内容的提问来源于stack exchange,提问作者gmarchi
相关产品推荐
相关产品推荐

