none
Problema na duplicação do banco RRS feed

  • Pergunta

  •  

    Bom Dia a todos!

     

    Gostaria de fazer a cópia de um banco no Sql 2000 para o próprio SQL 2000 porém preciso mudar o nome do banco...

     

    Exemplo: Possuo o banco A, preciso nomea-lo para B mas idêntico ao A, tem algum jeito fácil para fazer isso?

     

    Desde já agradeço a atenção!

     

    Fabiano Rates

    quinta-feira, 31 de julho de 2008 13:03

Respostas

  • Ok,

     

    Vamos verificar então:

     

    Code Snippet

    -- Faz o backup

    BACKUP DATABASE SideralV3 TO DISK = 'C:\SideralV3.BAK'

     

    -- Restaura os backup mudando os caminhos físicos

    -- Mantém os lógicos, pois, esses não podem ser alterados

    RESTORE DATABASE Olimpo FROM DISK = 'C:\SideralV3.BAK'

    WITH

    MOVE 'SideralV3_Data' TO 'D:\SQL2000Data\Olimpo_Data.MDF',

    MOVE 'SideralV3_Log' TO 'D:\SQL2000Data\Olimpo_Log.LDF',

    MOVE 'SideralV3_Idx' TO 'D:\SQL2000Data\Olimpo_Idx_Data.NDF'

    GO

     

    -- Muda os nomes lógicos

    ALTER DATABASE Olimpo

    MODIFY FILE (NAME='SideralV3_Data', NEWNAME='Olimpo_Data')

    ALTER DATABASE Olimpo

    MODIFY FILE (NAME='SideralV3_Log', NEWNAME='Olimpo_Log')

    ALTER DATABASE Olimpo

    MODIFY FILE (NAME='SideralV3_Idx', NEWNAME='Olimpo_Log')

     

     

    [ ]s,

     

    Gustavo

     

     

    quinta-feira, 31 de julho de 2008 21:10

Todas as Respostas

  • Olá Fabiano,

     

    Um backup e um RESTORE resolvem. Tente o seguinte

     

    BACKUP DATABASE BancoA TO DISK = 'C:\BancoA.BAK'

     

    RESTORE FILELISTONLY FROM DISK = 'C:\BancoA.BAK'

    (Anote o nome dos Arquivos Lógicos e Arquivos Físicos de Data e de Log)

     

    RESTORE DATABASE BancoB FROM DISK = 'C:\BancoA.BAK'

    WITH

    MOVE 'Nome do Arquivo Lógico de Dados' TO 'Nome do Arquivo Físico de Dados (Troque o A por B)',

    MOVE 'Nome do Arquivo Lógico de Log' TO 'Nome do Arquivo Físico de Log (Troque o A por B)'

     

    [ ]s,

     

    Gustavo

    quinta-feira, 31 de julho de 2008 13:11
  • Olá Gustavo!

     

    O nome do Arquivo MDF deve ser igual ao do novo criado.... Não está dando certo, o nome dos arquivos devem ser diferentes ...

     

    /* Executei primeiro esse */

    BACKUP DATABASE BancoA TO DISK = 'C:\BancoA.BAK'

    RESTORE FILELISTONLY FROM DISK = 'C:\BancoA.BAK'

     

    /*Depois esse */

    RESTORE DATABASE BancoB FROM DISK = 'C:\BancoA.BAK'

    WITH

    MOVE 'BancoB_Data' TO 'D:\SQL2000\Data\BancoB _Data.MDF',

    MOVE 'BancoB_Idx' TO 'D:\SQL2000\Data\BancoB _Idx_Data.NDF',

    MOVE 'BancoB_Log' TO 'D:\SQL2000\Data\BancoB _Log.LDF'

     

     

     

    é assim que eu devo fazer?

     

     

     

    quinta-feira, 31 de julho de 2008 13:45
  • Olá Fabiano,

     

    Como o backup foi do banco A, você só poderá alterar no RESTORE o nome físico e não o nome lógico. Tente o seguinte:

     

    Code Snippet

    /* Executei primeiro esse */

    BACKUP DATABASE BancoA TO DISK = 'C:\BancoA.BAK'

    RESTORE FILELISTONLY FROM DISK = 'C:\BancoA.BAK'

     

    /*Depois esse */

    RESTORE DATABASE BancoB FROM DISK = 'C:\BancoA.BAK'

    WITH

    MOVE 'BancoA_Data' TO 'D:\SQL2000\Data\BancoB _Data.MDF',

    MOVE 'BancoA_Idx' TO 'D:\SQL2000\Data\BancoB _Idx_Data.NDF',

    MOVE 'BancoA_Log' TO 'D:\SQL2000\Data\BancoB _Log.LDF'

     

     

    Para manter a organização, após o RESTORE você pode alterar o nome lógico, rode o seguinte:

     

    Code Snippet

    ALTER DATABASE BancoB

    MODIFY FILE

    (NAME='BancoA_Data', NEWNAME='BancoB_Data')

     

     

    Faça isso para cada arquivo.

     

    [ ]s,

     

    Gustavo

    quinta-feira, 31 de julho de 2008 13:57
  • Vou tentar explicar melhor:

     

    O Banco A possui os arquivos:

    BancoA_Data.MDF

    BancoA_Idx_Data.NDF

    BancoA_Log.LDF

     

    Já no novo BancoB, o nome dos arquivos devem ser:

     

    BancoB_Data.MDF

    BancoB_Idx_Data.NDF

    BancoB_Log.LDF

     

    Há aguma maneira para fazer o Banco B se tornar idêntico ao BancoA internamente ( Tabelas,Dados,etc) mas com o nome dos Arquivos externos com o nome dos Arquivos do  Banco B?

    quinta-feira, 31 de julho de 2008 14:01
  • Olá Fabiano,

     

    Há sim. Basta você executar o script que passei acima. No momento do Restore, os arquivos físicos devem ser diferentes (senão você estaria tentando sobrescrever o banco A), mas como o backup original foi do banco A você não conseguirá mudar os nomes lógicos durante o RESTORE (apenas os físicos).

     

    Após o RESTORE você pode mudar os nomes lógicos. O script que passei acima não funcionou ?

     

    [ ]s,

     

    Gustavo

     

    quinta-feira, 31 de julho de 2008 14:06
  • Olá Gustavo,

     

    Ainda não consegui, acho que eu estou fazendo alguma coisa errada, mas não sei o que...

     

    Já fiz o Backup do Banco A...

    Logo após vou criar o Banco B, porem tenho algumas dúvidas:

    O nome do Banco B deve ser igual ao do Banco A?

    O nome dos Arquivos do Banco B devem ser BancoA_data ou BancoB_data?

     

    Logo após executo o código não é?

     

    Obrigado pela atenção e paciência...

     

    Fabiano Rates

     

    quinta-feira, 31 de julho de 2008 16:08
  • Olá Fabiano,

     

    Não estou entendendo o que pode estar sendo errado, mas vamos descobrir. Primeiro vamos às dúvidas:

     

    O nome do banco B deve ser igual ao do Banco A ?

    Não. Se você restaurar um banco com o mesmo nome não será outro banco, mas sim o mesmo banco

     

    O nome dos Arquivos do Banco B devem ser BancoA_data ou BancoB_data?

    Devem ficar como BancoA_data, pois, o backup só conhece o BancoA_data que era o nome gravado no momento do backup. Depois (somente depois) que você restaurar o backup, você poderá alterar esse nome se quiser.

     

    Então o passo é o seguinte:

     

    - Faça o backup do banco BancoA

    - Verifique os nomes lógicos (ex: BancoA_Data) e os nomes físicos (ex: C:\SQL\BancoA_Data.MDF)

    - Restaure o banco com outro nome e mude os nomes físicos (os lógicos devem continuar iguais)

     

    Veja se funciona dessa forma

     

    [ ]s,

     

    Gustavo

     

     

     

     

    quinta-feira, 31 de julho de 2008 17:57
  • Olá Gustavo,

     

    Agora está apresentando o seguinte erro, menos mau né?

     

    O erro é o seguinte:

     

    Msg 3141, Level 16, State 0, Line 1

    The database to be restored was named 'BancoA'. Reissue the statement using the WITH REPLACE option to overwrite the 'BancoB' database.

    Msg 3013, Level 16, State 1, Line 1

    RESTORE DATABASE is terminating abnormally.

     

    O que eu devo fazer?

     

     

    Obrigado pela atenção....

     

    Fabiano Rates

    quinta-feira, 31 de julho de 2008 18:39
  • Olá Fabiano,

     

    Estou vendo que há algum erro de digitação ou interpretação no seu problema. Vou tentar mais uma vez. Se não funcionar, vou demonstrar com um exemplo prático e você faz as devidas adaptações. Responda as seguintes perguntas:

     

    - Qual é o nome do banco de dados original ?

    - Qual é o retorno do comando sp_helpdb 'BancodeDadosOriginal' na colunas Name e FileName ?

    - Qual será o nome do banco de dados que será a cópia ?

     

    [ ]s,

     

    Gustavo

    quinta-feira, 31 de julho de 2008 19:13
  • Gustavo,

     

    O nome do Banco Original é: SideralV3

     

    Name ----------------------------------  Filename

    SideralV3_Data  --------------   D:\SQL2000Data\SideralV3_Data.MDF

    SideralV3_Log   -------------    D:\SQL2000Data\SideralV3_Log.LDF

    SideralV3_Idx    ---------------  D:\SQL2000Data\SideralV3_Idx_Data.NDF

     

    O nome do Banco que será a cópia será:   Olimpo

    quinta-feira, 31 de julho de 2008 19:27
  • Ok,

     

    Vamos verificar então:

     

    Code Snippet

    -- Faz o backup

    BACKUP DATABASE SideralV3 TO DISK = 'C:\SideralV3.BAK'

     

    -- Restaura os backup mudando os caminhos físicos

    -- Mantém os lógicos, pois, esses não podem ser alterados

    RESTORE DATABASE Olimpo FROM DISK = 'C:\SideralV3.BAK'

    WITH

    MOVE 'SideralV3_Data' TO 'D:\SQL2000Data\Olimpo_Data.MDF',

    MOVE 'SideralV3_Log' TO 'D:\SQL2000Data\Olimpo_Log.LDF',

    MOVE 'SideralV3_Idx' TO 'D:\SQL2000Data\Olimpo_Idx_Data.NDF'

    GO

     

    -- Muda os nomes lógicos

    ALTER DATABASE Olimpo

    MODIFY FILE (NAME='SideralV3_Data', NEWNAME='Olimpo_Data')

    ALTER DATABASE Olimpo

    MODIFY FILE (NAME='SideralV3_Log', NEWNAME='Olimpo_Log')

    ALTER DATABASE Olimpo

    MODIFY FILE (NAME='SideralV3_Idx', NEWNAME='Olimpo_Log')

     

     

    [ ]s,

     

    Gustavo

     

     

    quinta-feira, 31 de julho de 2008 21:10
  • Bom Dia Gustavo,

     

    Tudo bem?

     

    Muito Obrigado pela ajuda... Graças a você consegui fazer a cópia do Banco....

     

    Muito obrigado mesmo por tudo...

     

    Até a próxima....

     

    Fabiano Rates

    sexta-feira, 1 de agosto de 2008 13:01