笔者在2019年分享过自己写的一个小工具,用于备份Sqlserver数据库的元数据。近期在一个PowerBI项目中,发现很有必要也备份下SSAS分析模型的元数据,防止不小心服务器坏了或使用Tabular Editor连接数据库方式开发过程中,不小心覆盖了有用的信息,无法挽回,特别是存在多人开发的场景特别容易出状况。故再次开发了一个小工具,用于SSAS的数据库元数据备份。
工具下载地址:https://easyshu.lanzoub.com/b00w39nzi 密码:2uup
点击阅读原文可跳转到下载链接
SSAS元数据备份原理
使用过Tabular Editor开发的朋友们,想必也更深刻地理解PowerBI建模层的原理,其实就是一段json的字符串,用于定义整个模型的连接、关系、表、度量值、计算列等元数据,只要拿到这段json,就可以通过XMLA查询的方式,直接部署到Sqlserver的SSAS分析服务上。
而bim文件,就是存储这些json信息的文件,通过Tabular Editor直接读取bim文件,就可以把整个模型的信息读进Tabular Editor,然后经过它部署到SSAS服务器上。
所以对于BI项目来说,备份这个bim文件或json文件信息,比备份整个SSAS数据库来得更科学和方便快捷。
BackupTMSL小工具使用方式
整个工具是绿色软件,只需双击【BackupTMSL.exe】文件即可。瞬间就可以备份完成。
备份出来的文件,带上了时间戳,会自动删除30天前生成的文件。
在使用上,需要自行设置一下SSAS服务器连接信息和备份文件夹,建议在部署的服务器上运行此程序,因为若非域环境管理员的帐号,可能没有备份访问SSAS对象模型的权限。
在计划任务上,生成一个任务,定时运行此程序,就可以达到备份的效果,例如工作日时间,9点钟开始备份,每隔1小时备份一次,备份12个小时,基本可以达到防止误操作或模型损坏,丢失了SSAS的数据库元数据的目的。
以下为历史文章,备份Sqlserver元数据程序分享。
数据库备份听得多了,元数据备份可能较少听说,但对于数据分析来说,创建数据仓库,商业智能项目的数据源引用等,产生大量的数据库表、视图、存储过程等关键信息,这些元数据未经备份,不小心覆盖了,损失可大,很有必要对其进行备份。本篇介绍的备份方式,乃是使用dotNET自己写的一个小工具,比较简陋,有总比没有好,真正出问题时可以帮助我们挽回不少的损失。
备份原理分享
因Sqlserver数据库是一款非常完善的商业数据库,微软给它打造了SSMS客户端管理,并配置了大量的命令让我们可以轻松管理它,当然备份整个数据库的元数据,也只需界面上一个操作即可完成。
具体的操作为【生成脚本】这个命令完成。
微软一贯的作风,复杂事情简单化,让门槛足够低,你看,就是简单下一步就完事了。
备份完的这些sql语句,随时可以还原到新的数据库上,当然我们更多的是使用在某个视图、存储过程不小心改错了,重新回来找后悔药吃,看回之前写的版本。
当然如果有高手可以直接在Sqlserver上找回某个对象的过往版本,欢迎留言告之一下,让笔者也学习下。
让界面化的操作自动化起来
因为以上的操作是界面操作,总不能要求自己每天都这样操作一轮吧,然后也用不着用那些所谓的先进的RPA玩意来搞一遍。
因微软对其自身的产品是开放了API接口调用的,类似Excel里的VBA一样,可以调用这些产品的各个功能,实现自动化。
当然,Sqlserver的功能调用,使用的是SMO对象模型,也不是所有语言都支持调用,只有亲儿子dotNET语言才可以。
笔者使用dotNET简单几句代码,给大家做好了工具,直接拿去用就行了。
工具使用的是Console命令行工具的方式开发,所以使用时,可以在Sqlserver的作业上调用一下,因为是生成文件的操作,好像是有些权限限制的问题,所以最好使用计划任务的方式来调用。
工具配置
下载工具后,解压到某个文件夹里,然后程序里有个配置文件,可以根据实际情况修改下。
BackDbNames:备份的数据名称
BackupDir:备份的文件夹路径
DaysBeforeToDelete:备份文件存放多久,过了这个天数自动帮忙删除它。
SqlserverConnectString:如果是远程服务器,就抄一段连接字符串过来,如果是本机的数据库,就默认就可以,当然实例名不是默认的也要改,反正就是SqlServer的连接字符串,自己到http://www.connectionstrings.com/上抄一下就好。
作好这些配置后,就可以测试下是否生成成功,生成没问题,就用计划任务每天跑一下,万一不小心改错了,最多也就丢掉一天的活,比重头开始划算得多了。
结语
正如笔者过往写的文章里提到数据分析师最该使用的数据库是Sqlserver一样,许多的数据库复杂的操作,微软已经帮我们做好,作为分析师类的职能,没必要自己傻折腾IT领域的东西太多,一个自动化工具,自己有能力学习点编程技术,就可以几句代码调用接口做出来,完全没必要跟着潮流来选择MySQL之类的所谓热门数据库。
同样地,对于我们备份数据的环节,不是生产数据库,分析数据型使用的数据仓库,也不用太紧张数据层面的丢失,反而对经常变化的元数据如视图、存储过程等的变化多一份备份更管用。
希望本篇所讨论和分享的工具,对大家可以有所帮助,为大家备上一份后悔药。