Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
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?
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.
0 comment threads