我使用 SQL Server 2008 R2
和 SSAS。
我在 SSAS 中有一些维度数据库。
我需要创建一个作业,以便在每天从SSAS的所有数据库进行备份。
我该怎么做?
所以有几种方法:
1/使用 Analysis Services 命令作为步骤创建 SQL 作业,每个数据库使用类似于以下内容的代码创建一个
:<Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>DBName</DatabaseID>
</Object>
<File>\serversharefolderbackupFile.abf</File>
<AllowOverwrite>true</AllowOverwrite>
</Backup>
这很好,很容易,如果您只有几个 SSAS 数据库,您不会定期删除或添加更多数据库,那么维护起来相对轻松
2/创建一个 SSAS 链接服务器,然后在作业步骤中使用常规 SQL 语句传入命令(为您提供更大的灵活性,因为您可以使用变量来修改文件名等内容):
创建 SSAS 链接服务器
DECLARE @XMLA NVARCHAR(1000) ,
@timeStamp NVARCHAR(35);
SET @timeStamp = CONVERT(NVARCHAR, GETDATE(), 112) + '_'
+ REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), ':', '');
SET @XMLA = N'<Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>dbName</DatabaseID>
</Object>
<File>\serversharefolderdbName_'
+ @timeStamp + '.abf</File>
<AllowOverwrite>true</AllowOverwrite>
<ApplyCompression>false</ApplyCompression>
</Backup>';
EXEC (@XMLA) AT [SSAS_LinkedServer]
编辑:您还可以使用此方法执行以下操作轻松地从分析服务器获取SSAS数据库的列表:
SELECT [catalog_name] FROM OPENQUERY([SSAS_LinkedServer],'select [catalog_name] from $system.dbschema_catalogs')
然后,只需游标浏览此列表,通过链接服务器为列表中的每个数据库执行 SSAS 命令,这意味着在添加新的 SSAS 数据库时无需手动维护作业。
3/使用powershell,下面的这种方法在2008 R2上不起作用,但可以修改为直接使用SMO,而不是他们在SQL Server 2012中提供的不错的提供程序(这是我们使用的方法,下面是我的脚本中的示例):
import-module sqlps -disablenamechecking
$server = "SERVERINSTANCE"
$backupPath = "\backup-servershareSSAS$server"
#Get a list of the SSAS databases on the server
$ssasDBs = dir SQLSERVER:SQLAS$serverdatabases
#Backup each SSAS database on the server
foreach ($db in $ssasDBs)
{
$extension = Get-Date -UFormat "_%Y_%m_%d_%A_%H%M%S.abf"
$backupFile = $backupPath+$db+$extension
try
{
$db.Backup($backupFile)
}
catch
{
Write-Warning "Backup of $db Failed!!!"
}
}
此方法的优点是,如果添加新的 SSAS 数据库,则不必更改作业,脚本会自动备份该作业,无需更改。
我确信还有其他方法可以实现这一点,但这是我用来管理 SSAS 备份的 3 种方法,我通常发现 SSAS 的管理方面相当痛苦,因为它似乎有点缺乏,但也许这只是我。 不过,SQL 2012 中的新 powershell 位使它变得容易得多。
希望这至少有助于您了解您可以做什么。