Notifications
Mark all as read
Q&A

How can I can I reduce the size of a SQL Server database after being restored and massive embedded files stripped?

+1
−0

My project has the following set up for the production and preproduction ("clone") environment.

  • Production is not accessible at all for the development team, only the preproduction database.
  • Preproduction database is restored each day, but a post-restore script is run to strip away sensitive data such as embedded files (VARBINARY(MAX)) and e-mail addresses
  • This process leaves a preproduction database of about 50GB with 46GB available space which means that a lot of space is wasted

How can I optimize the used storage for the restored database?

Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

0 comments

1 answer

+1
−0

One way to solve this is to shrink the database and reindex all tables to fix the indexes fragmentation:

DBCC SHRINKDATABASE (TheDatabase);
GO

-- reindexing all tables to optimize performance after the DB shrink
declare @TableSchema varchar(255)
DECLARE @TableName varchar(255) 
 
DECLARE TableCursor CURSOR FOR
SELECT TABLE_SCHEMA, table_name FROM INFORMATION_SCHEMA.TABLES 
WHERE table_type = 'BASE TABLE' 
 
OPEN TableCursor 
FETCH NEXT FROM TableCursor INTO @TableSchema, @TableName 
WHILE @@FETCH_STATUS = 0 
BEGIN
	declare @TN varchar(255) = @TableSchema + '.' + @TableName
	print 'Reindexing ' + @TN
	DBCC DBREINDEX(@TN,' ',90) 
	FETCH NEXT FROM TableCursor INTO @TableSchema, @TableName 
END
 
CLOSE TableCursor 
DEALLOCATE TableCursor
GO

I am not sure if there are any side effects after performing this.

Why does this post require moderator attention?
You might want to add some details to your flag.

2 comments

What's the size for indexes and tables before and after the operations? .                                                .‭ 24 days ago

Not sure, but shrink gets the database to 4GB and reindexing gets it to about ~5GB. Alexei‭ 24 days ago

Sign up to answer this question »