none
Backup/Restore de FileGroup RRS feed

  • Pergunta

  • Olá,

     

    Li bastante sobre backups e restores de filegroups, e bom, tudo OK. menos pelo o que eu preciso.

    Tenho os servidores A e B

    No servidor A tenho a base X com o filegroup primary e algumas tabelas no filegroup MOVE

    Preciso tirar o backup deste filegroup MOVE diariamente e restaurar em uma base no servidor B

     

    Porem não estou conseguindo isso...alguem poderia dizer como faz?


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCTS SQL Server 2008
    Developer Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 28 de julho de 2011 14:47
    Moderador

Respostas

  • Boa Tarde Fabrizzio,

    Vou entrar em reunião daqui há pouco e não vou conseguir postar os códigos (rs), mas vamos lá:

    Para restaurar um FILEGROUP em Partial Restore será sempre necessário restaurar o PRIMARY então eu sugiro os seguintes passos:

    - Faça um backup do PRIMARY
    - Faça um backup do Move
    - Tire um backup de log

    No novo servidor faça o seguinte:

    - Não crie nenhuma base
    - Restaure o PRIMARY
    - Restaure o MOVE (Partial Restore)
    - Aplique o LOG

    Agora que a base existe no novo servidor (só com o PRIMARY e o MOVE) e refere-se ao mesmo banco do servidor antigo, você pode repetir o procedimento, mas nas próximas restaurações, use o REPLACE.

    Esse procedimento eu sei que funciona, mas ainda não testei se o RESTORE de FILEGROUP funciona com mecanismos de Stand By. Se você for alterar os dados no backup recém restaurado no outro servidor, então só nos resta a estratégia anterior, ou seja, restaurar sempre o PRIMARY e o MOVE. Se você for realmente só ler no novo servidor, então poderíamos testar o Stand By com o Restore de FILEGROUP (aplicar só os logs subsequentes), mas se for esse o caso, não seria melhor restaurar o FULL por completo e aplicar somente os logs com Stand By ?

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 28 de julho de 2011 18:13

Todas as Respostas

  • No object explorer, clique com o botão direto em cima da base x -> talks -> backup, em componente de backup escolha a opção files and filegroups, escolha o filegroup desejado. As outas opções são similares as opções de backup da base.

    Para restaurar clique com o botão direito na base do servidor b ->talks -> restore -> files and filegroups.

    Até mais.

     


    Rafael Godoi Sabadin
    http://www.linkedin.com/pub/rafael-godoi-sabadin/30/b20/a0b


    Classifique as respostas. O seu feedback é essencial.


    quinta-feira, 28 de julho de 2011 14:54
  • Rafael,

     

    Em relação ao criar backups, tudo bem, sem problemas, mas não existe essa opção na GUI de restore.

     

    Estou tentando tambem um Partial Restore, aonde atravez do backup de um FileGroup criar uma nova base, isso ja me atenderia, mas por enquanto sem sucesso....

     

    Estou tentando rodar este comando:

    ----------------------CRIAÇÃO DA BASE PRIMARIA-----------------------------------------

    USE [master]

    GO

    CREATE DATABASE [DB1] ON PRIMARY

    ( NAME = N'DB_1', FILENAME = N'D:\DataFiles\DB1.mdf' , SIZE = 5MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%),

    FILEGROUP [FG1]

    ( NAME = N'FG_DT1', FILENAME = N'D:\DataFiles\FG_DT1_DB1.ndf' , SIZE = 5MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%),

    FILEGROUP [FG2]

    ( NAME = N'FG_DT2', FILENAME = N'D:\DataFiles\FG_DT2_DB1.ndf' , SIZE = 5MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)

    LOG ON

    ( NAME = N'DB1_log', FILENAME = N'D:\DataFiles\DB1_log.ldf' , SIZE = 5MB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

    GO

    EXEC dbo.sp_dbcmptlevel @dbname=N'DB1', @new_cmptlevel=90

    GO

     

    -----------------------CRIAÇÃO DA BASE SECUNDARIA----------------------------------------

    USE [master]

    GO

    CREATE DATABASE [DB2] ON PRIMARY

    ( NAME = N'DB_2', FILENAME = N'D:\DataFiles\DB2.mdf' , SIZE = 5MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%),

    FILEGROUP [FG1]

    ( NAME = N'FG_DT1', FILENAME = N'D:\DataFiles\FG_DT1_DB2.ndf' , SIZE = 5MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%),

    FILEGROUP [FG2]

    ( NAME = N'FG_DT2', FILENAME = N'D:\DataFiles\FG_DT2_DB2.ndf' , SIZE = 5MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)

    LOG ON

    ( NAME = N'DB2_log', FILENAME = N'D:\DataFiles\DB2_log.ldf' , SIZE = 5MB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

    GO

    EXEC dbo.sp_dbcmptlevel @dbname=N'DB2', @new_cmptlevel=90

    GO

     

    ------------------------CRIANDO TABELA-------------------------------------------------

    USE DB1

    GO

    CREATE TABLE T1(ID INT IDENTITY(1,1), FName NVARCHAR(20)) ON FG1

    INSERT T1(FName) SELECT 'Name1'

    GO

     

    ------------------------CRIANDO BACKUP DO FILEGROUP--------------------------------------

    USE MASTER

    GO

    BACKUP DATABASE [DB1]

    FILEGROUP = N'FG1'

    TO DISK = N'D:\DataFiles\Backups\Parcial\DB1_Full_FilegroupFG1Backup.BAK'

    WITH NOFORMAT, INIT,

    NAME = N'FG1BKP',

    SKIP, NOREWIND, NOUNLOAD, STATS = 10

    GO

     

    -------------------------RESTAURANDO O FILEGROUP--------------------------------------------

    USE MASTER

    GO

    RESTORE DATABASE [DB2]

    FILE = N'FG_DT1'

    FROM DISK = N'D:\DataFiles\Backups\Parcial\DB1_Full_FilegroupFG1Backup.BAK'

    WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10

    GO

     

     

    Porem ao executar a parte final do restore, tenho o seguinte erro:

    Msg 3154, Level 16, State 4, Line 1

    The backup set holds a backup of a database other than the existing 'DB2' database.

    Msg 3013, Level 16, State 1, Line 1

    RESTORE DATABASE is terminating abnormally.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCTS SQL Server 2008
    Developer Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 28 de julho de 2011 15:02
    Moderador
  • Fabrizzio,

    Tente assim:

    USE MASTER

    GO

    RESTORE DATABASE [DB2]

    FILE = N'FG_DT1',

    FILEGROUP = N'FG1'

    FROM DISK = N'D:\DataFiles\Backups\Parcial\DB1_Full_FilegroupFG1Backup.BAK'

    WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10

    GO

    Tambem dê uma olhada no modelo de recovery.


    Rafael Godoi Sabadin
    http://www.linkedin.com/pub/rafael-godoi-sabadin/30/b20/a0b


    Classifique as respostas. O seu feedback é essencial.


    quinta-feira, 28 de julho de 2011 16:52
  • Rafael,

     

    Mesma coisa, os recovery model estão em full, nas 2 bases.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCTS SQL Server 2008
    Developer Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 28 de julho de 2011 16:56
    Moderador
  • Fabrizzio,

    Dei uma pesquisada, segue a sugestão:

    USE MASTER
    GO

    RESTORE DATABASE [DB2]
    FILE = N'FG_DT1',
    FILEGROUP = N'FG1'
    FROM DISK = N'D:\DataFiles\Backups\Parcial\DB1_Full_FilegroupFG1Backup.BAK'
    WITH FILE = 1,
    MOVE N'FG_DT1'
        TO N'D:\DataFiles\FG_DT1_DB2.ndf', NORECOVERY,
    NOUNLOAD, REPLACE, STATS = 10
    GO

    Acho que o link a seguir pode te ajudar: http://social.technet.microsoft.com/Forums/pt-BR/admingeralpt/thread/ecb47dec-7937-4cef-8eab-548abe8f407a/

     


    Rafael Godoi Sabadin
    http://www.linkedin.com/pub/rafael-godoi-sabadin/30/b20/a0b


    Classifique as respostas. O seu feedback é essencial.

    quinta-feira, 28 de julho de 2011 17:39
  • Boa Tarde,

    Há alguns impecilhos que não vão viabilizar que isso realmente funcione.

    O primeiro e mais simples item é que você não pode restaurar um banco por cima de outro existente senão for o mesmo banco. Se você criou o banco DB1 e fez o backup do banco DB1, o RESTORE deverá criar o banco DB1 ou ser restaurado por cima de um banco DB1 já existente (ou restaurado a partir de um outro backup). Você não pode simplesmente criar um banco DB2 e pedir para ele ser sobrescrito por um Restore do banco DB1 já que são banco diferentes (por isso o erro "The backup set holds a backup of a database other than the existing 'DB2' database.", ou seja, o backup refere-se ao banco DB1 e o banco a ser sobrescrito é DB2. Nesse caso, é mais interessante matar o banco DB2 e apenas restaurar o banco DB1 deixando que o próprio RESTORE crie o banco e não sobrescreva um já existente. Opcionalmente, o primeiro restore da base DB1 não irá sobrescrever nada, mas cria um banco no próprio Restore. As restaurações subsequentes poderão sobrescrevê-lo, pois, tratar-se-á de um banco DB1 (ainda que uma restauração).

    Quanto ao Restore dos FILEGROUPs, creio haver um certo equívoco de como eles realmente funcionam. O FILEGROUP PRIMARY é o que possui as definições dos objetos e será sempre necessário em qualquer processo de restauração (mesmo um Partial Restore). No seu caso, o FILEGROUP FG1 contém apenas os dados das tabelas, mas é no PRIMARY que estão as lista de colunas, constraints e outros objetos. Não seria possível restaurar o FG1 separadamente, pois, teríamos um monte de dados sem qualquer noção de suas estruturas. De forma análoga ao ORACLE é como querer voltar uma base sem a TABLESPACE SYSTEM, ou seja, sem os metadados não faria sentido algum.

    Se você possui apenas dois FILEGROUPs, não será proveitoso trabalhar com o Partial Restore com o FILEGROUP FG1, pois, você poderá restaurar no máximo o PRIMARY sozinho, ou o PRIMARY com o FG1 (que é idêntico a um FULL). Não será possível restaurar o FG1 sem o PRIMARY. Um projeto baseado em FILEGROUPs normalmente isola o PRIMARY e não cria nenhum objeto nele para deixá-lo exclusivamente com metadados. Assim, quando você for restaurar apenas um FILEGROUP, você restaura o PRIMARY e esse FILEGROUP. O PRIMARY com os metadados, o outro FILEGROUP (FG1) com os dados de fato.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 28 de julho de 2011 17:40
  • gustavo,

     

    É exatamente esse meu cenario, terei 3 files groups: Primary, main e move

     

    O filegroup move eu preciso passar ele para outro servidor, bom, entendi que não posso então ir restaurando-o em cima, então eu precisaria criar uma nova base a partir dele certo? Qual seria exatamente os steps? (Se puder ajudar com a codificação tambem eu ficaria agradecido...)

    Não havera dados a não ser o dicionario no primary, main tabelas comuns, e move tabelas que irao ser movidas, lembrando que nenhuma tabela do grupo move tera relacionamento com alguma do grupo main.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCTS SQL Server 2008
    Developer Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 28 de julho de 2011 17:43
    Moderador
  • Boa Tarde Fabrizzio,

    Vou entrar em reunião daqui há pouco e não vou conseguir postar os códigos (rs), mas vamos lá:

    Para restaurar um FILEGROUP em Partial Restore será sempre necessário restaurar o PRIMARY então eu sugiro os seguintes passos:

    - Faça um backup do PRIMARY
    - Faça um backup do Move
    - Tire um backup de log

    No novo servidor faça o seguinte:

    - Não crie nenhuma base
    - Restaure o PRIMARY
    - Restaure o MOVE (Partial Restore)
    - Aplique o LOG

    Agora que a base existe no novo servidor (só com o PRIMARY e o MOVE) e refere-se ao mesmo banco do servidor antigo, você pode repetir o procedimento, mas nas próximas restaurações, use o REPLACE.

    Esse procedimento eu sei que funciona, mas ainda não testei se o RESTORE de FILEGROUP funciona com mecanismos de Stand By. Se você for alterar os dados no backup recém restaurado no outro servidor, então só nos resta a estratégia anterior, ou seja, restaurar sempre o PRIMARY e o MOVE. Se você for realmente só ler no novo servidor, então poderíamos testar o Stand By com o Restore de FILEGROUP (aplicar só os logs subsequentes), mas se for esse o caso, não seria melhor restaurar o FULL por completo e aplicar somente os logs com Stand By ?

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 28 de julho de 2011 18:13
  • Oi Fabrizzio,

    Agora eu me confundi (rs). Não entendi muito bem o seu cenário e nem como o Backup de Filegroup se encaixa.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 28 de julho de 2011 18:55
  • Oi Fabrizzio,

    Chama ele pro fórum então (rs).

    Quando você diz Shared Database, está se referindo ao Large Scalable Shared Databases do SQL Server ?

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 28 de julho de 2011 19:02
  • Exatamente...

    link bol é esse aqui: ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_4deptrbl/html/e1d2a62d-95f6-4839-be8f-53cb9a2c3981.htm


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCTS SQL Server 2008
    Developer Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 28 de julho de 2011 19:03
    Moderador
  • Oi Fabrizzio,

    O Large Scalable Shared Database não funciona dessa maneira e não dependerá de Filegroups e Restores. Em linhas gerais:

    - Você instala múltiplas instâncias de SQL Server
    - Você atacha a mesma base em cada instância
    - Todas as instâncias lêem a mesma base simultaneamente

    Claro que há várias restrições como a base tem de ser somente leitura, quando a base necessitar ser atualizada você terá que desatachar todo mundo e deixar só uma instância atachar além do que é necessário ter o Windows Storage Server para gerenciar. Você vai conseguir obedecer esses pré-requisitos básicos ?

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 28 de julho de 2011 19:26
  • Gustavo,

     

    Acho que com tanta informação, me perdi um pouco no processo que aplicaremos aqui, vou me informar mais, qualquer coisa volto a te perturbar rs...( Alias, bem fora do topico, parabens e obrigado pelos artigos de XML, realmente muito didaticos e praticos, aprendi muito)


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCTS SQL Server 2008
    Developer Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 28 de julho de 2011 19:33
    Moderador
  • Oi Fabrizzio,

    Tranquilo. No que eu puder ajudar estamos aí...

    [OFF]Que bom que gostou dos artigos. Fico feliz que puderam ajudá-lo. Estava bem animado quando os escrevi[/OFF]

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 28 de julho de 2011 19:39