É possível restaurar o servidor sql-server e reduzir o log ao mesmo tempo?

26

Temos um arquivo bak de um cliente que transferimos para nossos escritórios de desenvolvedores para investigação de problemas. Atualmente, o backup é de 25 GB e o banco de dados restaurado tem aproximadamente o mesmo tamanho, no entanto, ele precisa de 100 GB para ser restaurado. Acredito que isso ocorre porque o banco de dados está configurado para ter um tamanho de log de transações de 75 GB. Depois de restaurar o banco de dados, podemos reduzir o arquivo de log, mas existe uma maneira de fazer isso na restauração?

Adam Butler
fonte
3
Estou ciente de que você não pode alterar o banco de dados até que ele conclua a restauração.
Shawn Melton
3
Eu estive na mesma situação e estou ansioso pela resposta. Só para comentar, existe um produto: a restauração virtual SQL do red-gate. Eu nunca usei isso, mas de acordo com o site: 'O banco de dados montado requer quase zero de armazenamento adicional sobre o arquivo de backup'.
StanleyJohns

Respostas:

16

Não há como reduzir o backup como parte do processo de restauração. O banco de dados restaurado deve se parecer exatamente com o banco de dados de origem, com a única exceção: é possível alterar as letras e as pastas da unidade.

mrdenny
fonte
34

Há um hack do tipo não-faça-isso-em-um-ambiente-ao-vivo que você pode usar onde o espaço é limitado, restaurando o arquivo de log em uma pasta compactada. Tente compactar uma pasta existente e restaurá-la resultará em um erro; portanto, é necessário trapacear com um link simbólico.

  1. Crie uma pasta compactada D:\LogCompressed\
  2. Crie um link simbólico para a pasta compactada mklink /D /J D:\Log\ D:\LogCompressed\

  3. Restaure seu banco de dados com o arquivo ldf apontando para D:\Log\

  4. Reduza o arquivo de log para um tamanho apropriado

  5. Desanexe o banco de dados, mova o arquivo de log para uma pasta não compactada, anexe

Está sujo, está trapaceando, NUNCA FAÇA AO VIVO , mas funciona. O teste rápido de um banco de dados recém-criado com um arquivo de log de 32 MB mostra que ele ocupa 330kb no disco quando compactado, descompacta a pasta e o tamanho do disco volta a 32MB.

Mark Storey-Smith
fonte
2
@ Mark: Este hack funciona, mas não é perfeito. Mesmo se o arquivo de log ocupar muito menos espaço que seu tamanho real, você não poderá restaurar o banco de dados, a menos que o disco tenha realmente espaço livre igual ao tamanho real do banco de dados. Por outro lado, durante a restauração, o tamanho atuarial do arquivo de log diminui lentamente do tamanho real, é doloroso. No entanto, ainda é um hack muito bom. Obrigado.
chenwq
9

Acredito que o motivo do seu backup seja de 25 GB e o banco de dados restaurado de 100 GB não seja por causa do seu log de transações. Meu palpite é que seus arquivos de banco de dados têm 100 GB de espaço alocado e há 25 GB de dados reais no banco de dados.

Há uma diferença entre o espaço no arquivo do banco de dados alocado e o espaço de dados utilizado . Nesse caso, o primeiro tem 100 GB e o segundo, 25 GB.

Thomas Stringer
fonte
11
O cliente aloca 75 GB para o log de transações. Após a restauração, atualmente altero a alocação de log para 1 GB. Se possível, eu gostaria de restaurar esse banco de dados em um servidor em que as unidades tenham menos de 100 GB de espaço livre. Sem precisar restaurar para outro servidor, trunque, faça backup e restaure novamente.
Adam Butler
@ Adam Butler, seria possível restaurar temporariamente para o primeiro servidor para diminuir o tamanho do arquivo, fazer um backup da cópia e restaurá-lo no servidor de destino?
DForck42