1

さまざまな従業員によって維持される一連の SSAS 2005 データベースがあります。フォーマット文字列などを含むメタデータ/スキーマは、かなりの量の作業を表すように進化しており、定期的に変更されています。ビジネス インテリジェンス プロジェクトをソース管理下に置くことを試みましたが、データ自体を除いて、すべての SSAS メタデータの夜間バックアップを作成することもできれば便利です。(データはもちろん巨大で再現可能ですが、スキーマは小さいです。)

Microsoft.AnalysisServices.Server.Databases コレクションを使用して、すべての SSAS データベースをプログラム (C#) で簡単にループできますが、データなしでスキーマをバックアップする簡単な方法は見つかりませんでした。SSMS を使用して、データベースを右クリックし、たとえば [スクリプト データベース]-->[CREATE To]-->[ファイル ...] を選択して、データベース メタデータ全体を表す XMLA を取得できます。これはここで参照されています:http://msdn.microsoft.com/en-us/library/ms174589.aspx、これにはバックアップしたいすべての情報が含まれていると思います...しかし、方法が見つかりませんMicrosoft.AnalysisServices アセンブリで同様の機能を提供しており、他にどこを見ればよいかわかりません。

4

2 に答える 2

2

少し遅れるかもしれませんが、ここにあります。

これはPowerShellですが、C#への変換は簡単です。

$svrName = "localhost\sql08"
$sourceDB = "Adventure Works DW 2008"
$sourceCube = "Adventure Works"

# load the AMO library (redirect to null to 'eat' the output from assembly loading process)
[System.Reflection.Assembly]::LoadwithpartialName("Microsoft.AnalysisServices") > $null
# connect to the AS Server
$svr = New-Object Microsoft.AnalysisServices.Server
$svr.Connect($svrName)

# get a reference to the database
$db= $svr.Databases.Item($sourceDB)
# get a reference to the cube
$cub = $db.Cubes.FindByName($sourceCube)

# setup the scripter object
$sb = new-Object System.Text.StringBuilder
$sw = new-Object System.IO.StringWriter($sb)
$xmlOut = New-Object System.Xml.XmlTextWriter($sw) 
$xmlOut.Formatting = [System.Xml.Formatting]::Indented
$scr = New-Object Microsoft.AnalysisServices.Scripter

# create an array of MajorObjects to pass to the scripter
$x = [Microsoft.AnalysisServices.MajorObject[]] @($cub)

$scr.ScriptCreate($x,$xmlOut,$false)

$sb.ToString() > c:\data\tmpCube2.xmla

# clean up any disposeable objects
$sw.Close()
$svr.Disconnect()
$svr.Dispose()

それは私のものではありません。DarrenGosbellが投稿し場所で見つけました。

于 2011-08-08T07:19:24.647 に答える
2

私は解決策を見つけました:

void ScriptDb(string svrName, string dbName, string outFolderPath)
{
  using (var svr = new Server())
  {
    svr.Connect(svrName);

    // get a reference to the database
    var db = svr.Databases[dbName];

    // setup the scripter object
    var sw = new StringWriter();
    var xmlOut = new XmlTextWriter(sw);
    xmlOut.Formatting = Formatting.Indented;
    var scr = new Scripter();

    // create an array of MajorObjects to pass to the scripter
    var x = new MajorObject[] { db };
    scr.ScriptCreate(x, xmlOut, true);

    // todo: would be wise to replace illegal filesystem chars in dbName
    var outPath = Path.Combine(outFolderPath, dbName + ".xmla");
    File.WriteAllText(outPath, sw.ToString());

    // clean up any disposeable objects
    sw.Close();
    svr.Disconnect();
    svr.Dispose();
  }
}
于 2012-01-06T17:31:06.260 に答える