• 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