lundi 23 janvier 2012

Exécuter un script XMLA dynamique (via commande SQL)

J’avais besoin d’automatiser la restauration d’une base Analysis Service avec un nommage dynamique (inclure la date du jour dans le nom de la base).

Le script de sauvegarde est comme suit :
<Restore xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<File>C:\sauvegarde\TestAnalysisService.abf</File>
<DatabaseName>TestAnalysisService</DatabaseName>
<AllowOverwrite>true</AllowOverwrite>
<DbStorageLocation xmlns="http://schemas.microsoft.com/analysisservices/2008/engine/100/100">c:\restauration</DbStorageLocation>
</Restore>

Une possibilité pour rendre dynamique ce script sera d’exécuter via une commande SQL.
declare @nomBD varchar(50);
declare @cmdRestauration nvarchar(500);
set @nomBD='TestAnalysisService_'+ convert(varchar,getdate() ,112);

SET @cmdRestauration = '<Restore xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
  <File>C:\sauvegarde\TestAnalysisService.abf</File>
  <DatabaseName>'+@nomBD+'</DatabaseName>
  <AllowOverwrite>true</AllowOverwrite>
  <DbStorageLocation xmlns="http://schemas.microsoft.com/analysisservices/2008/engine/100/100">c:\restauration</DbStorageLocation>
</Restore>';

print @cmdRestauration;
Exec (@cmdRestauration) at TEST_SSAS;
Afin de pouvoir  l’exécuter, il faut d’abord créer un serveur lié vers le serveur Analysis Service.
Test_SSAS est le nom du serveur lié.
A l’exécution de la commande SQL ci-dessus, une base AnalysisService nommé TestAnalysisService_AAAAMMDD sera créée.
L’exécution de la commande SQL peut être planifiée via un travail SQL Server.