筆者在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之類的所謂熱門數據庫。
同樣地,對于我們備份數據的環節,不是生產數據庫,分析數據型使用的數據倉庫,也不用太緊張數據層面的丟失,反而對經常變化的元數據如視圖、存儲過程等的變化多一份備份更管用。
希望本篇所討論和分享的工具,對大家可以有所幫助,為大家備上一份后悔藥。