I must have encountered a bug in SQL Server 2005:
When you increase the initial size of a database using ALTER DATABASE, the DBCC shrinking commands ignores that size.
The following code illustrates this:
/* Create Testdb1 with initial size = 4096MB */
CREATE DATABASE Testdb1 ON PRIMARY
(NAME = N'Testdb1_data', FILENAME = N'C:\Program files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Testdb1_data.mdf', SIZE = 4096MB, FILEGROWTH=1024KB)
LOG ON
(NAME = N'Testdb1_log', FILENAME = N'C:\Program files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Testdb1_log.ldf', SIZE = 1024KB , FILEGROWTH=10%)
GO
/* Create Testdb2 with initial size = 3MB */
CREATE DATABASE Testdb2 ON PRIMARY
(NAME = N'Testdb2_data', FILENAME = N'C:\Program files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Testdb2_data.mdf', SIZE = 3MB, FILEGROWTH=1024KB)
LOG ON
(NAME = N'Testdb2_log', FILENAME = N'C:\Program files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Testdb2_log.ldf', SIZE = 1024KB , FILEGROWTH=10%)
GO
/* Increase initial size of Testdb2 to 4096MB */
ALTER DATABASE Testdb2 MODIFY FILE (NAME = N'Testdb2_data', SIZE = 4096MB)
GO
/*
Shrink both databases. Here is the result:
Testdb1_data.mdf = 4096MB
Testdb2_data.mdf = 3MB (expected result: 4096MB)
*/
DBCC SHRINKDATABASE('Testdb1')
DBCC SHRINKDATABASE('Testdb2')
GO