Technical Article

Backup all SSAS databases using TSQL

,

This script enumerates all SSAS databases and backups them using a MSOLAP linked server.

Especially usefull if your BI dudes don't allways tell the DBA they added a new SSAS database, but *do* expect that everyting is allways backed up!

Usage: 

Set the backup path to your desired location (line 15)

Replace the <YourServerName> stub, and run the commented part of the script once (between /* and */) , this will setup a linked server for the XMLA script

And thats it, hit F5 and see the .abf files apearing 🙂

After that you can tweak it to your specific situation, have datetime stamps, etc.

Enjoy, 

Theo

-- ********************************************************************************* 
-- Name: Backup all SSAS databases 
-- Description : Enumerates and backups all SSAS databases using MSOLAP linked server
-- Used By: Backup all job
-- Author: Theo Ekelmans
-- Version/Date: 1.0, 2012-03-13
-- **********************************************************************************

DECLARE @name VARCHAR(50) -- Cube name  
DECLARE @path VARCHAR(256) -- Backup path
DECLARE @fileName VARCHAR(256) -- Backup filename 
DECLARE @DT VARCHAR(20) -- Used for optional file name timestamp
Declare @XMLA nvarchar(4000) -- The SSAS command in XML format

SET @path = 'B:\SQL_backup\' + @@SERVERNAME + '\' -- Do not forget to add on the closing backslash !!!

/*
-- Setup a linked server first: replace <YourServerName> for your servername

USE [master]

EXEC master.dbo.sp_addlinkedserver @server = N'<YourServerName>-SSAS', @srvproduct=N'', @provider=N'MSOLAP', @datasrc=N'localhost'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'<YourServerName>-SSAS',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'collation compatible', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'dist', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'pub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'rpc', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'rpc out', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'sub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'connect timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'collation name', @optvalue=null
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'lazy schema validation', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'query timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'<YourServerName>-SSAS', @optname=N'remote proc transaction promotion', @optvalue=N'true'

*/
-- Change timestamp to this format: _YYYY-MM-DD_HHMMSS
Set @DT = '_' + Replace(Replace(Convert(nvarchar, getdate(), 120), ':', ''), ' ', '_');

DECLARE curCube CURSOR FOR  
SELECT CATALOG_NAME 
FROM openquery([<YourServerName>-SSAS], 'SELECT [CATALOG_NAME] FROM $SYSTEM.DBSCHEMA_CATALOGS') as a

OPEN curCube   
FETCH NEXT FROM curCube INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN   



-- Create the XMLA string (overwrites the same files again and again)
Set @XMLA = N'
<Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>' + @name + '</DatabaseID>
</Object>
<File>' + @path + @name + '.abf</File>
<AllowOverwrite>true</AllowOverwrite>
</Backup>
';

-- Create the XMLA string (add a DT stamp to the filename)
-- Set @XMLA = N'
-- <Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
-- <Object>
-- <DatabaseID>' + @name + '</DatabaseID>
-- </Object>
-- <File>' + @path + @name + @DT + '.abf</File>
-- <AllowOverwrite>true</AllowOverwrite>
-- </Backup>
-- ';

-- Execute the string across the linked server (SSAS)
Exec (@XMLA) At [<YourServerName>-SSAS]

FETCH NEXT FROM curCube INTO @name   
END   

CLOSE curCube   
DEALLOCATE curCube

Rate

★ ★ ★ ★ ★ ★ ★ ★ ★ ★

4.14 (7)

You rated this post out of 5. Change rating

Share

Share

Rate

★ ★ ★ ★ ★ ★ ★ ★ ★ ★

4.14 (7)

You rated this post out of 5. Change rating