Como atualizar um banco de dados utilizando Desanexar e Anexar (Transact-SQL)

Observação sobre segurançaObservação sobre segurança

Recomendamos que você não anexe ou restaure 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 fonte desconhecida ou não confiável, execute DBCC CHECKDB no banco de dados, em um servidor que não seja de produção e também examine o código, como procedimentos armazenados ou outro código definido pelo usuário, no banco de dados.

No SQL Server 2008, você pode usar operações de anexação e desanexação para atualizar um banco de dados de usuário no SQL Server 2000 ou no SQL Server 2005. Depois que você anexar um banco de dados do SQL Server 2005 ou do SQL Server 2000 no SQL Server 2008, o banco de dados estará disponível imediatamente e, em seguida, será atualizado.

Entretanto, as seguintes restrições se aplicam:

  • Cópias do banco de dados mestre, modelo ou msdb criadas usando o SQL Server 2000 ou SQL Server 2005 não podem ser anexadas.

  • Quando anexar um banco de dados replicado que foi copiado em vez de desanexado:

    • Se você anexar o banco de dados para uma versão atualizada da mesma instância do servidor, você deve executar sp_vupgrade_replication para atualizar a replicação depois que a operação de anexação tiver terminado. Para obter mais informações, consulte sp_vupgrade_replication (Transact-SQL).

    • Se anexar o banco de dados a uma instância de servidor diferente (independente da versão), você deverá executar sp_removedbreplication para remover a replicação depois que a operação de anexação tiver terminado. Para obter mais informações, consulte sp_removedbreplication (Transact-SQL).

  • Quando as palavras-chave APPLY, PIVOT, TABLESAMPLE ou UNPIVOT forem usadas em bancos de dados que são atualizados do SQL Server 2000 para o SQL Server 2008, o nível de compatibilidade do banco de dados deve ser definido como 100. Para definir o nível de compatibilidade do banco de dados, consulte sp_dbcmptlevel (Transact-SQL).

    Observação importanteImportante

    No SQL Server 2000 Service Pack 3 (SP3) e nas versões posteriores do SQL Server, anexe e desanexe desabilitar encadeamento de propriedades de banco de dados, para o banco de dados, definindo sua opção cross db ownership chaining como 0. Para obter informações sobre como habilitar o encadeamento consulte Opção cross db ownership chaining.

Opções de atualização do índice de texto completo

ObservaçãoObservação

Depois que você anexar um banco de dados do SQL Server 2005 ou do SQL Server 2000 no SQL Server 2008, o banco de dados estará disponível imediatamente e, em seguida, será atualizado. 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.

Procedimentos

Para atualizar um banco de dados utilizando desanexar e anexar

  1. Separe o banco de dados da instância de SQL Server 7.0 ou SQL Server 2000 usando o procedimento armazenado de sp_detach_db.

    Para obter mais informações, consulte os Manuais Online do SQL Server para essa versão do SQL Server.

    ObservaçãoObservação

    No SQL Server 2005, esse procedimento armazenado tem novas opções. Para obter mais informações, consulte sp_detach_db (Transact-SQL).

  2. Opcionalmente, mova o arquivo ou arquivos de banco de dados desanexados e o arquivo ou arquivos de log.

    Você deverá mover os arquivos de log junto com os arquivos de dados, mesmo se pretender criar novos arquivos de log. Em alguns casos, reanexar um banco de dados exige seus arquivos de log existentes. Portanto, mantenha todos os arquivos de log desanexados até que o banco de dados seja anexado com êxito sem eles.

    ObservaçãoObservação

    Se você tentar anexar o banco de dados sem especificar o arquivo de log, a operação de anexação procurará o arquivo de log em seu local original. Se ainda existir uma cópia original do log nesse local, essa cópia será anexada. Para evitar a utilização do arquivo de log original, especifique o caminho do novo arquivo de log ou remova a cópia original do arquivo de log (depois de copiá-la para o novo local).

  3. Anexe os arquivos copiados à instância de SQL Server 2005 usando a instrução CREATE DATABASE com o FOR ATTACH ou a opção de FOR ATTACH_REBUILD_LOG.

    ObservaçãoObservação

    Para obter informações sobre como anexar um banco de dados SQL Server 2005 usando o Pesquisador de Objetos, consulte Como anexar um banco de dados (SQL Server Management Studio).

  4. Recomendamos que você execute DBCC UPDATEUSAGE no banco de dados atualizado.

    Em versões anteriores do SQL Server, os valores para a tabela e contagens de linhas de índice e de páginas podem ficar incorretos. Assim, bancos de dados que foram criados em versões anteriores ao SQL Server 2005 podem conter contagens incorretas. Depois que você atualizar um banco de dados para o SQL Server 2005, recomendamos que execute DBCC UPDATEUSAGE para corrigir qualquer contagem inválida. Esta instrução DBCC corrige a contagem de linhas, páginas usadas, páginas reservadas, páginas soltas e páginas de dados para cada partição em uma tabela ou índice. Para obter mais informações, consulte DBCC UPDATEUSAGE (Transact-SQL).

  5. Opcionalmente, se você estiver fazendo uma cópia do banco de dados (em vez de movê-lo), você poderá reanexar o banco de dados original na instância do SQL Server 7.0 ou SQL Server 2000 usando o sp_attach_db ou o procedimento armazenado sp_attach_single_file_db.

    Para obter mais informações, veja os Manuais Online do SQL Server para essa versão do SQL Server.

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 herdam o nível de compatibilidade do banco de dados modelo.

Gerenciando metadados na instância do servidor atualizado

Quando você anexa um banco de dados à outra instância do servidor, para oferecer uma utilização consistente aos usuários e aplicativos, pode ser necessário recriar alguns, ou todos os metadados, para o banco de dados, como logons, trabalhos e permissões, na outra instância do servidor. Para obter mais informações, consulte Gerenciando metadados ao disponibilizar um banco de dados em outra instância do servidor.

Exemplos

O exemplo a seguir atualiza o banco de dados SQL Server 2000pubs para um banco de dados SQL Server 2005 usando instruções Transact-SQL para desanexar e anexar o banco de dados.

  1. Conecte o SQL Server 2000 Query Analyzer a uma instância do servidor à qual pubs está anexado e desanexe o banco de dados usando o procedimento armazenado sp_detach_db.

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'pubs';
    GO
    
  2. Para os objetivos deste exemplo, usando um método de sua escolha, copie os arquivos pubs (pubs.mdf e pubs_log.ldf) de C:\Arquivos de Programas\Microsoft SQL Server\MSSQL\Data\ (esta é a localização padrão de pubs no SQL Server 2000) para C:\Arquivos de Programas\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\ (este é o diretório de dados do SQL Server 2005).

    Observação importanteImportante

    Para um banco de dados de produção, coloque o banco de dados e o log de transações em discos separados.

    ObservaçãoObservação

    Para copiar arquivos pela rede para um disco em um computador remoto usando o nome UNC (Universal Naming Convention) do local remoto. Um nome UNC possui o formato \\Servername\Sharename\Path\Filename. Para gravar arquivos no disco rígido local, a conta do usuário usada pelo SQL Server deve ter as permissões necessárias concedidas, para ler ou gravar em um arquivo no disco remoto.

  3. Anexe o banco de dados copiado pubs e, opcionalmente, registre os arquivos a uma instância do SQL Server 2005 (este exemplo usa o mesmo nome de banco de dados). Em SQL Server Management Studio, abra uma nova consulta no Editor de consultas e conecte à instância do servidor na qual você quer anexar o banco de dados.

    Execute a seguinte instrução CREATE DATABASE.

    USE master;
    GO
    CREATE DATABASE pubs ON PRIMARY 
       (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs.mdf')
       LOG ON (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs_log.ldf')
       FOR ATTACH;
    GO
    
    ObservaçãoObservação

    No SQL Server Management Studio, um banco de dados anexado recentemente não é imediatamente visível no Pesquisador de Objetos. Para exibir o banco de dados, clique na janela do Pesquisador de Objetos e selecione Exibir >Atualizar. Quando o nó dos Bancos de Dados estiver expandido, o banco de dados anexado recentemente aparecerá então na lista de bancos de dados.

  4. Opcionalmente, reanexe o banco de dados original pubs à instância do SQL Server 2000 usando o procedimento armazenado sp_attach_db. No Query Analyzer, digite o seguinte:

    USE master;
    Go
    EXEC sp_attach_db @dbname = N'pubs', 
       @filename1 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', 
       @filename2 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf';
    GO