Prinzipiell sollte es möglich sein eine Datenbank oder einzelne Dateien, z.B. das LOG zu verkleinern. Aber diese werden niemals kleiner, als die „Inital Size“.
Wenn es jedoch immer noch nicht funktioniert, kann es an vorhandenen Indizes liegen, die auch sehr stark fragmentiert sein können.
Gute „vorbereitete Lösung“ habe ich gefunden bei:
https://blog.pmd-media.com/2009/10/08/howto-verkleinern-einer-microsoft-sql-server-datenbank/
--Erst alle Indizes neu aufbauen DECLARE @TableName varchar(255) DECLARE TableCursor CURSOR FOR SELECT DISTINCT QUOTENAME(TABLE_SCHEMA)+'.'+QUOTENAME(table_name) FROM information_schema.tables WHERE table_type = 'base table' order by 1 asc OPEN TableCursor FETCH NEXT FROM TableCursor INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN print @TableName+'....' DBCC DBREINDEX(@TableName,' ',90) FETCH NEXT FROM TableCursor INTO @TableName END CLOSE TableCursor DEALLOCATE TableCursor print 'FERTIG' --Und nachher wirklich shrinken: go dbcc shrinkdatabase (0, 10, NOTRUNCATE) --Erster Parameter := Aktuelle DB --Zweiter Parameter := Wieviel Prozent soll "leer" bleiben go dbcc shrinkdatabase (0, 10, TRUNCATEONLY) --dto. GO /* --Quelle: https://qastack.com.de/server/31554/how-to-check-progress-of-dbcc-shrinkfile --In einem anderem Fenster könnte man sehen wie weit der Shrink-Prozess ist: select T.text, R.Status, R.Command, DatabaseName = db_name(R.database_id) , R.cpu_time, R.total_elapsed_time, R.percent_complete as [ca.percent] from sys.dm_exec_requests R cross apply sys.dm_exec_sql_text(R.sql_handle) T */