logo veeam

Veeam SQL Express database shrinken

Veeam Backup & Replication installeert met een SQL Express database. Daarbij heb je een limiet van de database van 10GB. Wanneer deze database in de buurt van die limiet komt krijg je een waarschuwing.

De tabellen in de database kun je comprimeren. Voer daarvoor op je SQL instance de volgende query uit:

SET NOCOUNT ON

SELECT 
   'ALTER TABLE [' 
   + s.[name] 
   + '].[' 
   + o.[name] 
   + '] REBUILD WITH (DATA_COMPRESSION=PAGE);'
FROM sys.objects AS o WITH (NOLOCK)
INNER JOIN sys.indexes AS i WITH (NOLOCK)
   ON o.[object_id] = i.[object_id]
INNER JOIN sys.schemas AS s WITH (NOLOCK)
   ON o.[schema_id] = s.[schema_id]
INNER JOIN sys.dm_db_partition_stats AS ps WITH (NOLOCK)
   ON i.[object_id] = ps.[object_id]
AND ps.[index_id] = i.[index_id]
WHERE o.[type] = 'U'
ORDER BY ps.[reserved_page_count]

SET NOCOUNT OFF

Deze query genereert een output, copy paste deze om deze uit te voeren.

Vervolgens comprimeer je de indexen van de Veeam database:

SET NOCOUNT ON

SELECT 
   'ALTER INDEX "' 
   + i.[name] 
   + '" ON "' 
   + s.[name] 
   + '"."' 
   + o.[name] 
   + '" REBUILD WITH (DATA_COMPRESSION=PAGE);'
FROM sys.objects AS o WITH (NOLOCK)
INNER JOIN sys.indexes AS i WITH (NOLOCK)
   ON o.[object_id] = i.[object_id]
INNER JOIN sys.schemas s WITH (NOLOCK)
   ON o.[schema_id] = s.[schema_id]
INNER JOIN sys.dm_db_partition_stats AS ps WITH (NOLOCK)
   ON i.[object_id] = ps.[object_id]
AND ps.[index_id] = i.[index_id]
WHERE o.type = 'U' 
AND i.[index_id] >0
ORDER BY ps.[reserved_page_count]

SET NOCOUNT OFF

Ook dit genereert weer een output welke je dient te copy paste om eveneens uit te voeren.

Voer als laatste een shrink uit binnen SQL Management Studio. Dit heeft mij meerdere malen 2GB aan ruimte op geleverd.

Eventueel kun je met een truncate van de SQL Logfiles ook nog ruimte winnen.