Назад | Перейти на главную страницу

Как на лету сократить журнал транзакций SQL Server для производственной БД?

Я хотел бы знать, какое из возможных решений является наилучшим для сокращения журнала транзакций SQL Server на действующем производственном сервере без простоев?

  1. Полная резервная копия базы данных - что должно фиксировать журнал транзакций? (как в Exchange Server?)

  2. выполнение следующего сценария T-SQL из SSMS вручную в рабочее время?

    ------------------------------------------------------------------------------
    -- Otto R. Radke - http://ottoradke.com
    -- Info: T-SQL script to shrink a database's transaction log. Just set the
    -- database name below and run the script and it will shrink the
    -- transaction log.
    ------------------------------------------------------------------------------
    ------------------------------------------------------------------------------
    -- Update the line below with the name of the database who's transaction
    -- log you want to shrink.
    ------------------------------------------------------------------------------
    USE 
    ------------------------------------------------------------------------------
    -- Don't change anything below this line.
    ------------------------------------------------------------------------------
    GO
    -- Declare variables
    DECLARE @SqlStatement as nvarchar(max)
    DECLARE @LogFileLogicalName as sysname
    -- Alter the database to simple recovery
    SET @SqlStatement = 'ALTER DATABASE ' + DB_NAME() + ' SET RECOVERY SIMPLE'
    EXEC ( @SqlStatement )
    -- Make sure it has been altered
    SELECT [name], [recovery_model_desc] FROM sys.databases WHERE [name] = DB_NAME()
    -- Set the log file name variable
    SELECT @LogFileLogicalName = [Name] FROM sys.database_files WHERE type = 1
    -- Shrink the logfile
    DBCC Shrinkfile(@LogFileLogicalName, 1)
    -- Alter the database back to FULL
    SET @SqlStatement = 'ALTER DATABASE ' + DB_NAME() + ' SET RECOVERY FULL'
    EXEC ( @SqlStatement )
    -- Make sure it has been changed back to full
    SET @SqlStatement = 'SELECT [name], [recovery_model_desc] FROM ' + DB_NAME() + '.sys.databases WHERE [name] = ''' + DB_NAME() + ''''
    EXEC ( @SqlStatement )
    ------------------------------------------------------------------------------
  1. Создание плана обслуживания - по требованию - для сжатия БД?

так в чем разница и цель этих методов?

Любая помощь будет принята с благодарностью.

Спасибо.

Вы используете резервные копии журналов для восстановления на определенный момент времени? Если нет, то одним из способов управления файлом журнала было бы установить для модели восстановления значение «Простая» и вручную сжать базу данных из SSMS (щелкнуть правой кнопкой мыши по базе данных ... Задачи ... Сжать ... База данных). Это уменьшит файлы базы данных для вас. Модель Simple Recovery должна вести журнал в строке.