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.


dimanche 22 janvier 2012

Sauvegarde d'une base Analysis Service via script XMLA (SQL Server 2008)

Manuellement, nous pouvons faire la sauvegarde d’une base Analysis Service  via  l’assistant de Management Studio.

Afin d’automatiser la sauvegarde, j’ai besoin de script que je peux exécuter et planifier via un travail SQL Server.
Pour ce faire :
1.       Se connecter sur la base Analysis Service à sauvegarder  via Management Studio.
2.       Cliquer droit -> Sauvegarder.


3. Sélectionner l’emplacement et les options.
4. Cliquer sur Script en haut de la page -> Générer le script.


Un script XMLA pour la sauvegarde est généré.

 5. Dans un nouveau travail (Agent SQL Server), créer une nouvelle étape du type Commande SQL Server Analysis Service.
6. Définir le compte d’exécution ainsi que le serveur.
7.Copier coller le script XMLA généré précédemment.
8.Planifier le travail et enregistrer.

mardi 17 janvier 2012

Création Snapshot avec nommage dynamique

J’avais besoin de créer des snapshots de base de données à chaque intervalle pour l’historisation.

Il était nécessaire de retrouver la date sur le nom de chaque snapshot.
Le nom devait être sous forme [NomSnapshot]_AAAAMMDD.
J’ai utilisé la fonction Transact-SQL CONVERT pour  convertir la date du jour (la date de création de snapshot)  à une chaîne de caractère du format AAAAMMDD.
J'ai utilisé le script ci-dessous dans un travail SQL Server planifié sur un intervalle défini. 
use master;
declare @nomSnapshot varchar(50);
declare @cmdSuppression nvarchar(225);
declare @cmdCreation nvarchar(225);
set @nomSnapshot='[NomSnapshot]_'+ convert(varchar,getdate() ,112);
--Etape 1 Suppression de snapshot
SET @ cmdSuppression = 'if DB_ID(''' + @nomSnapshot + ''') IS NOT NULL drop database ' + @nomSnapshot;
 --Etape 2 Création de snapshot
SET @ cmdCreation = 'Create database ' + @nomSnapshot +
' ON (NAME = [NomLogiqueFichierDonnees],
FILENAME = ''[CheminRepertoire]\' + @nomSnapshot + '.ds'')
as SNAPSHOT of [NomBD];
--print @ cmdSuppression;
Execute sp_executeSql @ cmdSuppression;
--print @ cmdCreation;
Execute sp_executeSql @ cmdCreation;