Como reduzir rapidamente o log de transações do SQL Server para o banco de dados de produção?

2

Gostaria de saber qual é a melhor solução possível para reduzir o log de transações do SQL Server no servidor de produção ao vivo sem tempo de inatividade?

  1. Backup completo do banco de dados - o que deve confirmar o log de transações? (como no Exchange Server?)

  2. executando o seguinte script T-SQL a partir do SSMS manualmente durante o horário de produção?

    ------------------------------------------------------------------------------
    -- 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. Criando plano de manutenção - On Demand - para redução de DB?

então, qual é a diferença e o propósito desses métodos?

Qualquer ajuda seria muito apreciada.

Obrigado.

    
por Senior Systems Engineer 15.04.2011 / 03:28

1 resposta

3

Você está usando os backups de log para recuperação pontual? Caso contrário, um método para gerenciar o arquivo de log seria definir o Modelo de Recuperação como Simples e reduzir manualmente o banco de dados do SSMS (banco de dados do botão direito do mouse ... Tarefas ... Encolher ... Banco de Dados). Isso reduzirá os arquivos do banco de dados para você. O modelo de recuperação simples deve manter o log in line.

    
por 15.04.2011 / 03:45