Qual a forma mais correcta de migrar dados de SQL Server 2005 Express para SQL Server 2007 R2 Standard

Viva,
Estou agora a migrar alguns websites de um servidor antigo para um novo, e uma das coisas que preciso de fazer é migrar os dados.
O servidor antigo tem SQL Server 2005 Express, o novo é 2008 R2 Standard.
Qual é a forma mais correcta de fazer esta migração?
 
A minha primeira aproximação seria backup da bd de 2005 e restore em 2008, mas tenho curiosidade em saber se ha melhores formas.
Obrigado,
Bruno Lopes

Migração de BD de SQL 2005 Express para SQL Server 2008 R2 Std

Boas,
Em primeiro lugar como estamos a partir de uma instancia Express as opções são mais limitadas. A meu ver o Backup/Restore oferece a possibilidade de efectuar uma operação de Rollback mais fácil,
Quando se efectua o detach na origem a informação da base de dados é retirada da master o que implica que se usarmos um move dos ficheiros e fizermos um attach dos mesmos na nova instância já não poderemos efectuar a operação inversa, para isso teremos de ter duas cópias dos ficheiros. Consideranto o processo de cópia dos ficheiros e posterior attach, poderá ser mais viavel, efectuar a cópia após a paragem do serviço na origem, seguindo-se a copia dos ficheiros para a nova localização e depois o respectivo attach.
Após o processo de restore, deverá ser garantido que ou não se efectuam alterações no destino ou que se tem a capacidade de reproduzir as mesmas alterações efectuadas na nova copia da BD, na BD de origem (através de T-SQL, de processos de Import/Export ou por via aplicacional).
Como estamos a falar de uma ediçao express, não deverão existir processos desenvolvidos em cima do SQL Server Agent, pelo que não existe a preocupação de migrar Jobs.
http://www.microsoft.com/sqlserver/2005/en/us/compare-features.aspx
Nem existe a preocupação de migrar packages de Integration services.
Pelo que a maior preocupação será em migrar os Logins existentes na instancia original para a instancia de destino, para que os logins usados pela(s) aplicação(ões) cliente possam continuar a funcionar. Será também importante garantir que essas aplicações são redireccionadas para a nova instância, ou por alteração da connection string, alias, dns record:
http://blogs.msdn.com/b/blogdoezequiel/archive/2010/06/21/the-sql-swiss-army-knife-2.aspx
Em relação à DB poderá ser utilizado o Upgrade Advisor para validar se esta ferramenta detecta algumas issues que possam ser corrigidas antes da migração (isto claro tendo em conta se queremos ou não manter o compatibility level) 
http://msdn.microsoft.com/en-us/library/ms189624(SQL.90).aspx
http://msdn.microsoft.com/en-us/library/bb510680.aspx (compatibility level)
Após a migração deverá ser efectuado de imediato um Backup da ou das BDs para garantir que temos um backup válido após a migração de versão de SQL Server, o que provoca o upgrade automatico da versão da BD.
Podem ser considerados processos de manutenção para efectuar a validação da consistência da BD (DBCC CHECKDB), rebuild dos indices, upgrade das estatisticas (nas colunas das tabelas) isto para garantir que o QP tem ao seu dispor a informação mais actualizada, quando começar a executar os pedidos vindos da aplicação cliente.
Deverão ser feitos testes com, por exemplo, Database Backup Compression e validadas que outras funcionalidades poderão ser usadas na Standard Edition do 2008 R2:
http://msdn.microsoft.com/en-us/library/cc645993.aspx#High_availability
Lista de novidades ao nivel do Database Engine, no sql server 2008 R2:
http://msdn.microsoft.com/en-us/library/bb510411.aspx
Cumpts,
Luís.

Viva, As aplicações que usam

Viva,
As aplicações que usam estas BDs não vão ser alteradas, na sua maioria, pelo que o aproveitamento de novas capacidades seria maioritariamente ao nivel da base de dados.
Curiosamente estava agora a ver e apenas tenho nivel de compatibilidade Sql Server 2008 (100). Esqueci-me de alguma coisa?
Alguma configuração extra que valha a pena fazer nas BDs agora que vão estar em 2008? 
Em relação á migração acho que vou mesmo por backup/restore.
Obrigado,
Bruno Lopes

2008 R2

Acho que o nível de compatilibilidade (compatibility level - COMPATIBILITY_LEVEL) de R2 é 100, a contrário de número interno de engine que é de facto 105. Mesmo se vais utilizar o «alter database set compatibility_level», não existe o 105, mas sim o 100.
Atenção - posso estar errado, pois não experimentei muito com o R2. :( 
Espero que alguem aqui ajuda confirmar esta questão.
Bruno, existe muita coisa que podes reaproveitar, pois a differença entre 2008 e 2005 é significativa - Date, Time, DateTime2 - são os novos tipos de dados que permitem poupar no espaço. Dependente de drivers, talvez consegues alterar algumas colunas sem mudar a aplicação. No 2008 R2 Standard podes utilizar a compressão de dados, e de qualquer modo - se tiveres stored procedures, podes começar a utilizar algumas «enhancements» como MERGE por exemplo, ou mesmo GROUPING SETS ;)
Outra coisa fantástica são colunas SPARSE - se tiveres muitos nulls - pode ser interessante a experimentar. 
http://www.microsoft.com/sqlserver/2008/en/us/whats-new.aspx

Um abraço,
Niko

Migração

Viva Bruno !
Acho que a questão de migração também depende se tu queres aproveitar as novas funcionalidades de 2008/2008 R2 ou não. A mim também passou pela cabeça detach/attach como um modo bastante práctico e rápido, mas realmente o maior desafio será a reaproveitamento de novas funcionalidades - os novos tipos de dados, aproveitamento de compressão, etc.
 
Cumprimentos,
Niko Neugebauer

Viva Bruno, Realmente o

Viva Bruno,
Realmente o backup/restore ou o dettach/attach serão as formas mais rápidas de se migrarem bases de dados.
Não te esqueças que no fim da migração deverás alterar a compatibilidade da BD de 9 (SQL 2005) para 10.5 (SQL 2008 R2) de modo a poder aproveitar todas as potencialidades do SQL Server 2008 R2.
 
Um abraço,
Vitor Montalvão