我使用SQL Server 2008 R2
和SSAS。
我在SSAS中有一些维数据库。
我需要创建一份工作,以便每天从SSAS的所有DataBase备份。
我怎么做?
答案 0 :(得分:5)
所以有几种方法:
1 /使用Analysis Services命令创建SQL作业作为步骤,使用与此类似的代码为每个数据库创建一个:
<Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>DBName</DatabaseID>
</Object>
<File>\\server\share\folder\backupFile.abf</File>
<AllowOverwrite>true</AllowOverwrite>
</Backup>
这很简单,如果您只有一些SSAS数据库,您不会定期删除或添加更多数据库,维护相对轻松
2 /创建一个SSAS链接服务器,然后在作业步骤中使用常规SQL语句来传递命令(因为您可以使用变量来修改文件名等内容,因此可以提供更多的灵活性):
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>\\server\share\folder\dbName_'
+ @timeStamp + '.abf</File>
<AllowOverwrite>true</AllowOverwrite>
<ApplyCompression>false</ApplyCompression>
</Backup>';
EXEC (@XMLA) AT [SSAS_LinkedServer]
编辑:使用此方法您还可以使用以下方法从Analysis Server轻松获取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 = "SERVER\INSTANCE"
$backupPath = "\\backup-server\share\SSAS\$server\"
#Get a list of the SSAS databases on the server
$ssasDBs = dir SQLSERVER:\SQLAS\$server\databases
#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位使它变得更容易。
希望这至少可以帮助您解决一些问题。