none
Espaço em disco (replicação) - diretório ...MSSQL\repldata\unc\ RRS feed

  • Pergunta

  • Ola pessoal, tudo bem?

    Possuo um SQL Server 2005, que replicada para ele mesmo (publicador, distribuidor e assintante), mas até aqui tudo bem.


    Tenho replicas transacionais e outras snap shot. O que acontece é que estou ficando sem espaço em disco no diretório:

    D:\Microsoft SQL Server\MSSQL.1\MSSQL\repldata\unc\

     

    Tenho pastas enormes dentro deste diretório.

     

    Dúvida:

    - Posso apagar as pastas mais antigas ?

    - Existe alguma forma de automatizar esta atividade ?

     

    Grato !

    • Movido Gustavo Maia Aguiar quinta-feira, 13 de outubro de 2011 15:54 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 30 de dezembro de 2008 14:59

Respostas

  • Olá Felipe, respondendo a suas perguntas:

    Sim, vc pode apagar os arquivos de snapshots gerados no local de armazenamento do mesmo, porém, isso só deve ser realizado caso vc tenha certeza que todos os assinantes receberam os dados existentes nos arquivos de snapshot.

     

    Como que funciona:

     

    Quando vc gera um snapshot, o SQL Server através dos agentes de replicação, aplicam os snapshots nos destinos(assinantes), e vc pode utilizá-lo para reaplicar várias vez, re-sincronizando os assinantes apartir de um anapshot já existente, sempre o último que foi gerado.

    No momento que vc gera um novo snapshot para uma publicação, o snapshot anterior é invalidado, ou seja, se já existe um snapshot mais atual, porque o SQL deveria aplicar o(s) antigo(s), então, todos os outros podem ser dropados.

     

    Automatização do processo de expurgo de snapshots antigos:

     

    Quando vc habilita um servidor como distribuidor, são criadas procedures de manutenção e uma delas se chama  "Distribution Clean up: Distribution",  essa procedure tem duas finalidades:

    • Realizar o expurgo de comandos que já foram replicados e por motivos de segurança estavam sendo armazenados numa tabela de histórica das replicações.
    • Realizar a remoção de arquivos de snapshots antigos, ou seja, arquivos de snapshots invalidados.

    Lembrando, que os arquivos de snapshots só são invalidados nas seguintes circunstâncias:

      • Quando vc gera um novo snapshot.
      • Quando vc realiza alguma intervenção na publicação("proriedades ou procedures") ou subscrição e utiliza o parâmetro "force_invalidate_snapshot=1", para forçar que um novo snapshot seja gerado.
      • Quando vc realiza alguma alteração no schema de algum artigo da publicação, pois, o mesmo se torna automáticamente invalido, pois, possui um schem que se aplicado causaria erro no destino, visto que o schema é outro.
      • Só lembro desses, pode haver mais, se eu lembrar te digo.

    Então, basicamente, as respostas são estas.

    Sim vc pode excluir os arquivos de snapshot inválidos, até mesmo os válidos, mas nesse caso se algum assinante ainda não recebeu o snapshot vc terá que gerar um novo snapshot.

    O processo de expurgo dos snapshots antigos pode ser automatizado executando-se o  "Distribution Clean up: Distribution", que é um job existente no distribuidor.

     

    Bom, qualquer coisa estou a disposição.

     

    terça-feira, 30 de dezembro de 2008 15:51
  • Felipe,

     

    Você pode apagar sim as pastas, pois o SQL Server se encarrega de gerar os novos snapshots.

     

    Sobre a automatização desta tarefa de exclusão, acredito que algum tipo de VBs ou arquivo .Bat possa ajudar.

    terça-feira, 30 de dezembro de 2008 23:02
    Moderador

Todas as Respostas

  • Olá Felipe,

     

    Não há problema em excluir as pastas mais antigas. Normalmente referem-se a Snapshots que já foram aplicados. Se você necessitar gerar um novo snapshot uma nova pasta será criada então não há problema em eliminar as anteriores.

     

    Só não conheço uma forma de automatizar essa atividade. Você poderia construir um VBs para capturar as pastas mais antigas e excluí-las.

     

    [ ]s,

     

    Gustavo

    terça-feira, 30 de dezembro de 2008 15:49
  • Olá Felipe, respondendo a suas perguntas:

    Sim, vc pode apagar os arquivos de snapshots gerados no local de armazenamento do mesmo, porém, isso só deve ser realizado caso vc tenha certeza que todos os assinantes receberam os dados existentes nos arquivos de snapshot.

     

    Como que funciona:

     

    Quando vc gera um snapshot, o SQL Server através dos agentes de replicação, aplicam os snapshots nos destinos(assinantes), e vc pode utilizá-lo para reaplicar várias vez, re-sincronizando os assinantes apartir de um anapshot já existente, sempre o último que foi gerado.

    No momento que vc gera um novo snapshot para uma publicação, o snapshot anterior é invalidado, ou seja, se já existe um snapshot mais atual, porque o SQL deveria aplicar o(s) antigo(s), então, todos os outros podem ser dropados.

     

    Automatização do processo de expurgo de snapshots antigos:

     

    Quando vc habilita um servidor como distribuidor, são criadas procedures de manutenção e uma delas se chama  "Distribution Clean up: Distribution",  essa procedure tem duas finalidades:

    • Realizar o expurgo de comandos que já foram replicados e por motivos de segurança estavam sendo armazenados numa tabela de histórica das replicações.
    • Realizar a remoção de arquivos de snapshots antigos, ou seja, arquivos de snapshots invalidados.

    Lembrando, que os arquivos de snapshots só são invalidados nas seguintes circunstâncias:

      • Quando vc gera um novo snapshot.
      • Quando vc realiza alguma intervenção na publicação("proriedades ou procedures") ou subscrição e utiliza o parâmetro "force_invalidate_snapshot=1", para forçar que um novo snapshot seja gerado.
      • Quando vc realiza alguma alteração no schema de algum artigo da publicação, pois, o mesmo se torna automáticamente invalido, pois, possui um schem que se aplicado causaria erro no destino, visto que o schema é outro.
      • Só lembro desses, pode haver mais, se eu lembrar te digo.

    Então, basicamente, as respostas são estas.

    Sim vc pode excluir os arquivos de snapshot inválidos, até mesmo os válidos, mas nesse caso se algum assinante ainda não recebeu o snapshot vc terá que gerar um novo snapshot.

    O processo de expurgo dos snapshots antigos pode ser automatizado executando-se o  "Distribution Clean up: Distribution", que é um job existente no distribuidor.

     

    Bom, qualquer coisa estou a disposição.

     

    terça-feira, 30 de dezembro de 2008 15:51
  • Falipe cara, desculpa, uma CORREÇÃO:

    O job que realiza a remoção dos snapshots inválidos é o "Distribution Clean up: Distribution".

     

    Bem que eu estava achando alguma coisa estranha, só num sabia o que era, rsrsr

    Nos dê um retorno se vc conseguiu?

    terça-feira, 30 de dezembro de 2008 20:25
  • Felipe,

     

    Você pode apagar sim as pastas, pois o SQL Server se encarrega de gerar os novos snapshots.

     

    Sobre a automatização desta tarefa de exclusão, acredito que algum tipo de VBs ou arquivo .Bat possa ajudar.

    terça-feira, 30 de dezembro de 2008 23:02
    Moderador
  • Emanuel,

     

    Muito bem lembrado deste JOB, eu particularmente não me lembrava dele.

    terça-feira, 30 de dezembro de 2008 23:05
    Moderador
  • Galera,

     

    Obrigado pela ajuda !

     

    O único job que tenho é esse: "Expired subscription clean up"

     

    Que executa esta procedure: EXEC sys.sp_expired_subscription_cleanup

     

    quarta-feira, 31 de dezembro de 2008 10:16
  • Ei Felipe, num terminou não, esperaí... rsrs

    caso o job tenha sido removido, vc  deve recriá-lo.

     

    O procedimento é bem simples e já que vc está utilizando replicação acho muito importante que vc recrie esse job, não só pelo motivo do job apagar os arquivos de snapahots, mas principalmente pelo clean up dos comandos replicados, que fazem com que o database "distribution" cresça muito, permita que a tabela MSrelp_commands fique muito fragmentada e isso reflita negativamente no desempenho da tua replicação, causando erros e lentidão.

     

    Crie um job para executar a seguinte:

    Code Snippet

    Exec dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72

     

    Onde:

    Min_distretention vc define o mínimo de tempo(horas) que comandos e snapshots podem ser considerados com candidatos para remoção, mas só serão removidos em caso de já terem sido replicados totalmente.

     

    Max_distretention vc define o máximo de tempo(horas) que comandos e snapshots podem permanecer no servidor, mesmo que esse comandos não tenhan sido replicados ou os snapshots aplicados, tudo que ultrapassar esse tempo será removido.

     

    No exemplo acima, @min_distretention = 0 quer dizer que poder ser removidos todos os comandos que já foram replicados e todos os snapshots que já foram aplicados.

     

    Já o @max_distretention = 72, estipula que teverá ocorrer o cleanup(remoção) de comandos e snapshots que tenham mais de 72 horas, mesmo que ainda não tenham sido aplicados no destino.

     

    Esse são valores padrão, se vc desejar modificá-los saiba o motivo.

     

    É isso aí, espero ter conseguido te ajudar.

    quarta-feira, 31 de dezembro de 2008 13:14
  • Obrigado !

     

    Mas não acho essa procedure ! Em que banco ela fica ?

     

    Valeu mesmo...

    sexta-feira, 2 de janeiro de 2009 12:56
  • Fica no "distribution".

     

    Code Snippet

    USE DISTRIBUTION

    GO

    Exec dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72

     

    sexta-feira, 2 de janeiro de 2009 13:03
  • perfeito !!!!!!!!!!!!!!!!!!!!

     

     

    muito obrigado a todos, acabei de testar e criar o job.

     

    sexta-feira, 2 de janeiro de 2009 13:30
  • Emanuel,

    passei pelo mesmo problema do Felipe, e o que acontece quando rodo essa procedure: Exec dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72 é que ela fica horas executando e não limpa nada, já quando rodei essa EXEC sys.sp_expired_subscription_cleanup, o espaço em disco ficou disponível.

    Você sabe me dizer a diferença de uma pra outra? Essa EXEC sys.sp_expired_subscription_cleanup substitui a Exec dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72 ?

    quinta-feira, 13 de outubro de 2011 15:44