Como restaurar um banco de dados em um novo local e com novo nome (Transact-SQL)

Este tópico explica como restaurar um backup completo de banco de dados em um novo local e, opcionalmente, com um novo nome. Este procedimento permite mover um banco de dados ou criar uma cópia de um banco de dados na mesma instância do servidor ou em uma instância de servidor diferente. Para obter mais informações sobre considerações de como mover um banco de dados, consulte Copiando bancos de dados com backup e restauração.

Pré-requisitos e recomendações

  • Para restaurar um banco de dados criptografado, é necessário ter acesso ao certificado ou à chave assimétrica usada para criptografar o banco de dados. Sem o certificado ou a chave assimétrica, o banco de dados não pode ser restaurado. Como resultado, o certificado usado para criptografar a chave de criptografia do banco de dados deve ser retido enquanto o backup for necessário. Para obter mais informações, consulte Certificados e chaves assimétricas do SQL Server.

  • Por motivos de segurança, é recomendável não anexar ou restaurar bancos de dados de origens desconhecidas ou não confiáveis. Esses bancos de dados podem conter um código mal-intencionado que pode executar código Transact-SQL involuntário ou provocar erros modificando o esquema ou a estrutura física do banco de dados. Antes de usar um banco de dados de uma origem desconhecida ou não confiável, execute DBCC CHECKDB no banco de dados, em um servidor que não seja de produção. Além disso, examine o código, como os procedimentos armazenados ou outro código definido pelo usuário, no banco de dados.

Nível de compatibilidade do banco de dados após a atualização

Os níveis de compatibilidade dos bancos de dados tempdb, modelo, msdb e Recurso são definidos como 100 depois da atualização. O banco de dados do sistema mestre mantém o nível de compatibilidade que ele tinha antes da atualização, a menos que esse nível seja inferior a 80. Se o nível de compatibilidade de master era inferior a 80 antes da atualização, ele será definido como 80 depois da atualização.

Se o nível de compatibilidade de um banco de dados de usuário era 80 ou 90 antes da atualização, ele permanecerá o mesmo depois da atualização. Se o nível de compatibilidade era 70 ou inferior antes da atualização, no banco de dados atualizado, o nível de compatibilidade será definido como 80, que é nível de compatibilidade suportado mais baixo no SQL Server 2008.

ObservaçãoObservação

Os novos bancos de dados de usuários herdarão o nível de compatibilidade do banco de dados modelo.

Procedimentos

Para restaurar um banco de dados em um novo local e com um novo nome

  1. Opcionalmente, determine os nomes lógicos e físicos dos arquivos no conjunto de backup que contém o backup completo de banco de dados que você deseja restaurar. Essa instrução retorna a uma lista de arquivos de banco de dados e de log contidos no conjunto de backup. A sintaxe básica é a seguinte:

    RESTORE FILELISTONLY FROM <backup_device> WITH FILE = backup_set_file_number

    ObservaçãoObservação

    Você pode obter o backup_set_file_number de um backup definido usando a instrução RESTORE HEADERONLY.

    Essa instrução também dá suporte a uma série de opções WITH. Para obter mais informações, consulte RESTORE FILELISTONLY (Transact-SQL).

  2. Use a instrução RESTORE DATABASE para restaurar o backup completo do banco de dados. Por padrão, os arquivos de dados e de log são restaurados em seus locais originais. Para realocar um banco de dados, use a opção MOVE para realocar cada um dos arquivos do banco de dados e para evitar colisões com arquivos existentes.

    A sintaxe Transact-SQL básica para restaurar o banco de dados em um novo local e com um novo nome é:

    RESTORE DATABASE new_database_name

    FROM backup_device [ ,...n ]

    [ WITH

       {

            [ RECOVERY | NORECOVERY ]

       [ , ] [ FILE ={ backup_set_file_number | @backup_set_file_number } ]

       [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]

       }

    ;

    ObservaçãoObservação

    Ao se preparar para realocar um banco de dados em um disco diferente, você deve verificar se espaço suficiente está disponível e identificar todas as colisões potenciais com arquivos existentes. Isso envolve o uso de uma instrução RESTORE VERIFYONLY que especifica os mesmos parâmetros MOVE que você planeja usar em sua instrução RESTORE DATABASE.

    A tabela a seguir descreve os argumentos dessa instrução RESTORE em termos de restauração de um banco de dados em um novo local. Para obter mais informações sobre esses argumentos, consulte RESTORE (Transact-SQL).

    • new_database_name
      O novo nome do banco de dados.

      ObservaçãoObservação

      Se você estiver restaurando o banco de dados em uma instância de servidor diferente, poderá usar o nome do banco de dados original em vez de um novo nome.

    • backup_device [ ,...n ]
      Especifica uma lista separada por vírgulas de 1 a 64 dispositivos de backup nos quais o backup de banco de dados precisa ser restaurado. Você pode especificar um dispositivo de backup físico ou especificar um dispositivo de backup lógico correspondente, se definido. Para especificar um dispositivo de backup físico, use a opção DISK ou TAPE:

      { DISK | TAPE } **=**physical_backup_device_name

      Para obter mais informações, consulte Dispositivos de backup.

    • { RECOVERY | NORECOVERY }
      Se o banco de dados usar o modelo de recuperação completa, você poderá precisar aplicar backups de log de transações depois de restaurar o banco de dados. Nesse caso, especifique a opção NORECOVERY.

      Caso contrário, use a opção de RECOVERY que é a padrão.

    • FILE = { backup_set_file_number | @backup_set_file_number }
      Identifica o conjunto de backup a ser restaurado. Por exemplo, um backup_set_file_number de 1 indica o primeiro conjunto de backup na mídia de backup e um backup_set_file_number de 2 indica o segundo conjunto de backup. Você pode obter o backup_set_file_number de um backup definido usando a instrução RESTORE HEADERONLY.

      Quando esta opção não está especificada, o padrão é usar o primeiro conjunto de backup no dispositivo de backup.

      Para obter mais informações, consulte "Especificando um conjunto de backup", em Argumentos de RESTORE (Transact-SQL).

    • MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' [ ,...n ]
      Especifica que o arquivo de log ou de dados especificado pelo logical_file_name_in_backup deve ser restaurado no local especificado pelo operating_system_file_name. Especifique uma instrução MOVE para cada arquivo lógico que você deseja restaurar do conjunto de backup para um novo local.

      Opção

      Descrição

      logical_file_name_in_backup

      Especifica o nome lógico de um arquivo de log ou de dados no conjunto de backup. O nome do arquivo lógico de um arquivo de log ou de dados em um conjunto de backup corresponde ao seu nome lógico no banco de dados quando o conjunto de backup foi criado.

      ObservaçãoObservação
      Para obter uma lista dos arquivos lógicos do conjunto de backup, use RESTORE FILELISTONLY.

      operating_system_file_name

      Especifica um novo local para o arquivo especificado por logical_file_name_in_backup. O arquivo será restaurado neste local.

      Opcionalmente, operating_system_file_name especifica um novo nome de arquivo para o arquivo restaurado. Isso será necessário se você estiver criando uma cópia de um banco de dados existente na mesma instância de servidor.

      n

      É um espaço reservado que indica que você pode especificar instruções MOVE adicionais.

ObservaçãoObservação

Após a restauração de um banco de dados do SQL Server 2005 ou do SQL Server 2000 no SQL Server 2008, o banco de dados estará imediatamente disponível e, em seguida, será atualizado de forma automática. Se o banco de dados tiver índices de texto completo, o processo de atualização importará, redefinirá ou recriará esses índices dependendo da configuração da propriedade de servidor upgrade_option. Se a opção de atualização for definida para importar (upgrade_option = 2) ou recriar (upgrade_option = 0), os índices de texto completo permanecerão indisponíveis durante a atualização. Dependendo da quantidade de dados a serem indexados, a importação pode levar várias horas, e a recriação pode ser até dez vezes mais demorada. Lembre-se também de que, quando a opção de atualização estiver definida para importar, os índices de texto completo associados serão recriados se um catálogo de texto completo não estiver disponível. Para alterar a configuração da propriedade de servidor upgrade_option, use sp_fulltext_service.

Exemplo

Descrição

Esse exemplo cria um novo banco de dados chamado MyAdvWorks. O MyAdvWorks é uma cópia do banco de dados AdventureWorks2008R2 existente que inclui dois arquivos: AdventureWorks2008R2_Data e AdventureWorks2008R2_Log. Esse banco de dados usa o modelo de recuperação simples. O banco de dados AdventureWorks2008R2 já existe na instância do servidor, portanto, os arquivos no backup devem ser restaurados em um novo local. A instrução RESTORE FILELISTONLY é usada para determinar o número e os nomes dos arquivos no banco de dados que está sendo restaurado. O backup do banco de dados é o primeiro conjunto de backup no dispositivo de backup.

ObservaçãoObservação

Para obter um exemplo de como criar um backup de banco de dados completo do banco de dados AdventureWorks2008R2, consulte Como criar um backup de banco de dados completo (Transact-SQL).

ObservaçãoObservação

Os exemplos de como fazer backup e restaurar o log de transações, inclusive restaurações pontuais, usam o banco de dados MyAdvWorks_FullRM que é criado de AdventureWorks2008R2 exatamente como no exemplo MyAdvWorks a seguir. Portanto, o banco de dados MyAdvWorks_FullRM resultante deve ser alterado para usar o modelo de recuperação completa: ALTER DATABASE MyAdvWorks_FullRM SET RECOVERY FULL.

Código

USE master
GO
-- First determine the number and names of the files in the backup.
-- AdventureWorks2008R2_Backup is the name of the backup device.
RESTORE FILELISTONLY
   FROM AdventureWorks2008R2_Backup
-- Restore the files for MyAdvWorks.
RESTORE DATABASE MyAdvWorks
   FROM AdventureWorks2008R2_Backup
   WITH RECOVERY,
   MOVE 'AdventureWorks2008R2_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf', 
   MOVE 'AdventureWorks2008R2_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf'
GO