SQL Server 7 Transaction log failure to truncate

  • Hi all,

    I would greatly appreciate some help.  I can't get a SQL Server 7 log file to truncate.

    I've done:

    1 a full SQL backup,

    2 a transaction log back up (we have a server backup for last night if things go wrong)

    3 DBCC Shrink file of the log file

    4 DBCC Shrink database

    5 Tried DBCC OPENTRAN with no problems detected.

    The data file is 260Mb whilst the log file is 13Gb!

    Any ideas why it won't shrink?

    Cheers

  • Over the years I have found the follwoing script to be most use full

     

    DBCC OPENTRAN (DBNAME)

    SET NOCOUNT ON

       DECLARE @LogicalFileName sysname,

               @MaxMinutes INT,

               @NewSize INT

       -- *** MAKE SURE TO CHANGE THE NEXT 4 LINES WITH YOUR CRITERIA. ***

       USE     [DBNAME]              -- This is the name of the database

                                      -- for which the log will be shrunk.

       SELECT  @LogicalFileName = FILE_NAME',  -- Use sp_helpfile to

          -- identify the logical file

          -- name that you want to shrink.

               @MaxMinutes = 10,      -- Limit on time allowed to wrap log.

               @NewSize    = 10       -- in MB

       -- Setup / initialize

       DECLARE @OriginalSize int

       SELECT @OriginalSize = size -- in 8K pages

         FROM sysfiles

         WHERE name = @LogicalFileName

       SELECT 'Original Size of ' + db_name() + ' LOG is ' +

               CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +

               CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'

         FROM sysfiles

         WHERE name = @LogicalFileName

       CREATE TABLE DummyTrans

         (DummyColumn char (8000) not null)

       -- Wrap log and truncate it.

       DECLARE @Counter   INT,

               @StartTime DATETIME,

               @TruncLog  VARCHAR(255)

       SELECT  @StartTime = GETDATE(),

               @TruncLog = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'

       -- Try an initial shrink.

       DBCC SHRINKFILE (@LogicalFileName, @NewSize)

       EXEC (@TruncLog)

       -- Wrap the log if necessary.

       WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

             AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  -- the log has not shrunk   

             AND (@OriginalSize * 8 /1024) > @NewSize  -- The value passed in for new size is smaller than the current size.

         BEGIN -- Outer loop.

           SELECT @Counter = 0

           WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

             BEGIN -- update

               INSERT DummyTrans VALUES ('Fill Log')  -- Because it is a char field it inserts 8000 bytes.

               DELETE DummyTrans

               SELECT @Counter = @Counter + 1

             END   -- update

           EXEC (@TruncLog)  -- See if a trunc of the log shrinks it.

         END   -- outer loop

       SELECT 'Final Size of ' + db_name() + ' LOG is ' +

               CONVERT(VARCHAR(30),size) + ' 8K pages or ' +

               CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'

         FROM sysfiles

         WHERE name = @LogicalFileName

       DROP TABLE DummyTrans

       PRINT '*** Perform a full database backup ***'

       SET NOCOUNT OFF

    Hope this helps...

    Ford Fairlane
    Rock and Roll Detective

  • Thanks very much.  That worked great!

    Much appreciated.

     

Viewing 3 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic. Login to reply