Introdução No Microsoft SQL Server 2005, você pode reduzir os arquivos de log de transações em um banco de dados para remover páginas não utilizadas. O mecanismo de banco de dados reutilizará o espaço com eficiência. No entanto, quando um arquivo de log de transações cresce inesperadamente, pode ser necessário reduzi-lo manualmente.
Este artigo descreve como usar a instrução DBCC SHRINKFILE para reduzir manualmente os arquivos de log de transações em um banco de dados SQL Server 2005 no modelo de recuperação completa. O método usado para reduzir um arquivo de log de transações no SQL Server 2005 pode ser diferente do método usado para reduzir um arquivo de log de transações no SQL Server 2000. Para obter mais informações sobre como reduzir arquivos de log de transações no SQL Server 2000, clique no número abaixo para visualizar o artigo correspondente na Base de Conhecimento da Microsoft:
272318 ( http://support.microsoft.com/kb/272318/ ) INF: Reduzindo logs de transações no SQL Server 2000 usando DBCC SHRINKFILE
Voltar ao topo
Mais informações No SQL Server 2005, a operação de redução (DBCC SHRINKFILE) tenta imediatamente reduzir o ficheiro de registo de transacções especificado para o tamanho necessário. Para reduzir manualmente os arquivos de log de transações no modelo de recuperação completa, primeiro faça backup dos arquivos de log de transações. Em seguida, use a instrução DBCC SHRINKFILE para reduzir o arquivo de log de transações.
Geralmente, reduzir os arquivos de log de transações no SQL Server 2005 é mais rápido do que reduzir os arquivos de log de transações no SQL Server 2000. O motivo é que o SQL Server 2005 Log Manager cria ou reutiliza arquivos de log virtuais inativos com base na ordem de armazenamento do disco físico. Portanto, a parte inativa de um arquivo de log de transações geralmente está localizada no final do arquivo.
Por exemplo, um arquivo de log de transações pode conter 100 arquivos de log virtuais, mas usar apenas 2 arquivos de log virtuais. O SQL Server 2000 armazena o primeiro arquivo de log virtual usado no início do arquivo de log de transações e o segundo arquivo de log virtual usado no meio do arquivo de log de transações. Para reduzir o arquivo de log de transações para apenas dois arquivos de log virtuais, o SQL Server preencherá o restante do segundo arquivo de log virtual com entradas de log virtuais. O SQL Server move o início do log lógico para o próximo arquivo de log virtual disponível especificado pelo gerenciador de log. O gerenciador de log pode criar um arquivo de log virtual no meio do arquivo de log de transações, antes do último arquivo de log virtual ativo. Nesse caso, diversas operações de backup de log e diversas operações de redução devem ser usadas para reduzir com êxito o arquivo de log de transações para dois arquivos de log virtuais. Na pior das hipóteses, talvez seja necessário usar 50 operações de backup de log e 50 operações de redução para reduzir com êxito o arquivo de log de transações para 2 arquivos de log virtuais.
No entanto, no SQL Server 2005, você pode reduzir imediatamente o arquivo de log de transações para dois arquivos de log virtuais executando uma instrução DBCC SHRINKFILE. Isso ocorre porque o SQL Server 2005 Log Manager cria dois arquivos de log virtuais na ordem em que são armazenados no disco físico. Ambos os arquivos de log virtuais estão localizados no início do arquivo de log de transações.
Ao tentar reduzir um arquivo de log de transações que possui muito pouco espaço livre no SQL Server 2005, você deverá executar outra operação de backup de log. Essa operação adicional de backup de log trunca o arquivo de log de transações para um tamanho menor. Ao reduzir os arquivos de log de transações no SQL Server 2000, além de executar as três etapas acima, você também deve executar esta operação de backup de log. Para obter mais informações, consulte o artigo da Base de Dados de Conhecimento Microsoft mencionado na seção "Introdução". Para reduzir um arquivo de log de transações com muito pouco espaço livre no SQL Server 2005, siga estas etapas: 1. Faça backup dos arquivos de log de transações para que a maioria dos arquivos de log virtuais ativos fique inativa. Portanto, os arquivos de log virtuais inativos podem ser excluídos posteriormente. Para fazer isso, execute uma instrução Transact-SQL semelhante à instrução Transact-SQL a seguir. LOG DE BACKUP <DatabaseName> PARA DISCO = '<BackupFile>'
Nota: Nesta instrução, <DatabaseName> é um espaço reservado para o nome do banco de dados do qual será feito backup. Nesta instrução, <BackupFile> é um espaço reservado para o caminho completo para o arquivo de backup.
Por exemplo, execute a instrução Transact-SQL a seguir. LOG DE BACKUP TestDB TO DISK='C:TestDB1.bak'
2. Reduza o arquivo de log de transações. Para fazer isso, execute uma instrução Transact-SQL semelhante à instrução Transact-SQL a seguir. DBCC SHRINKFILE (<Nome do arquivo>, <TargetSize>) COM NO_INFOMSGS
Nota: Nesta instrução, <FileName> é um espaço reservado para o nome do arquivo de log de transações. Nesta instrução, <TargetSize> é um espaço reservado para o tamanho de destino do arquivo de log de transações. O tamanho do alvo deve ser razoável. Por exemplo, você não pode reduzir um arquivo de log de transações para menos de dois arquivos de log virtuais.
3. Se a instrução DBCC SHRINKFILE não reduzir o arquivo de log de transações para o tamanho de destino, execute a instrução BACKUP LOG mencionada na etapa 1 para tornar mais arquivos de log virtuais inativos.
4. Execute a instrução DBCC SHRINKFILE mencionada na etapa 2. Depois de fazer isso, o arquivo de log de transações deve estar próximo do tamanho de destino.
Em resumo, o algoritmo que o Log Manager usa para selecionar o próximo arquivo de log virtual foi alterado no SQL Server 2005. Portanto, a redução dos arquivos de log de transações no SQL Server 2005 difere da redução dos arquivos de log de transações no SQL Server 2000 das seguintes maneiras: • Se o arquivo de log tiver uma grande quantidade de espaço livre, a redução do arquivo de log de transações no SQL Server 2005 será mais rápida do que reduzindo o arquivo de log de transações no SQL Server 2000 Reduzir os arquivos de log de transações é mais rápido.
• Reduzir um arquivo de log de transações no SQL Server 2005 é o mesmo que reduzir um arquivo de log de transações no SQL Server 2000 se o arquivo de log não tiver espaço livre.
• A redução de um arquivo de log de transações no SQL Server 2005 requer mais uma operação de backup de log do que a execução dessa operação no SQL Server 2000 se o arquivo de log tiver muito pouco espaço livre.