Pergunta

Eu estive procurando por toda a internet e não consigo encontrar uma solução aceitável para o meu problema, eu estou querendo saber se há mesmo uma solução sem um compromisso ...

Eu não sou um DBA, mas eu sou uma equipe de um homem que trabalha em um site enorme com nenhum financiamento extra para corpos extras, então eu estou fazendo o melhor que posso.

O nosso plano de backup é uma porcaria, e eu estou tendo um momento muito difícil melhorá-lo. Atualmente, existem dois servidores que executam o SQL Server 2005. Eu tenho um banco de dados espelhado (nenhuma testemunha) que parece estar funcionando bem. I fazer um backup completo ao meio-dia e à meia-noite. Estes obter backup em fita pelo nosso provedor de serviço todas as noites, e eu gravar os arquivos de backup para dvd semanal para manter registros antigos na mão. Eventualmente, eu gostaria de mudar para o envio de log, já que o espelhamento parece meio sem sentido sem um servidor testemunha.

O problema é que o log de transações está crescendo sem parar. A partir da pesquisa que fiz, parece que eu não posso truncar um arquivo de log de um banco de dados espelhado. Então, como posso parar o arquivo de crescer!?

Com base desta página web , eu tentei isso:

USE dbname
GO
CHECKPOINT
GO
BACKUP LOG dbname TO DISK='NULL' WITH NOFORMAT, INIT, NAME = N'dbnameLog Backup', SKIP, NOREWIND, NOUNLOAD
GO
DBCC SHRINKFILE('dbname_Log', 2048)
GO

Mas isso não funcionou. Tudo o resto que eu encontrei diz que eu preciso desativar o espelho antes de executar o comando log de backup para que ele funcione.

Minha pergunta (TL; DR)

Como posso diminuir o meu arquivo de log de transações sem desativar o espelho?

Foi útil?

Solução 3

Eu pensei que eu deveria realmente responder a essa visto que foi deixado esquecido.

Acontece que, você não pode encolher um t-log se o banco de dados é espelhado a menos que você desativar o espelho. Se eu estiver errado, por favor me corrigir, mas eu encontrei nenhuma solução que funciona!

envio de log é o caminho a percorrer se você tiver apenas dois servidores. O espelhamento é quase inútil sem um servidor testemunha, porque a única maneira de failover é do principal ... derrotas meio a finalidade de ter um espelho, se você não pode failover quando as principais falhas.

Se alguém se importa de compartilhar mais informações ou sugestões sobre este assunto, eu serei bem-vindo para ouvi-los.

Outras dicas

Bem, tecnicamente é possível encolher um log espelhado. O que está fazendo problemas é log de backup com TRUNCATE_ONLY. O espelhamento não aceitá-lo. Então, é uma maneira de executar um log de backup em disco:

use [DATABASE_NAME]
checkpoint
BACKUP LOG [DATABASE_NAME] TO DISK =  'C:\LOG_BACKUPS\DATABASE_NAME'
dbcc shrinkfile(DATABASE_NAME_Log,1)

Esta é parte do nosso plano de manutenção atual e tem vindo a trabalhar withot problemas para cerca de 2 anos.

Se a instância do servidor espelho cai atrás da instância do servidor principal, a quantidade de espaço de log ativo vai crescer. Neste caso, você pode precisar de espelhamento de banco de dados parar, fazer um backup de log que trunca o log, aplicar esse backup do log para o banco de dados espelho e reiniciar o espelhamento, não é a resposta que você estava esperando, eu sei = (

Para diminuir nossos arquivos que você pode tentar o seguinte script:

exec sp_dboption DBName, 'truncagem. logon chkpt. ', true checkpoint DBCC SHRINKFILE (DBNameFileName, 500); DBName sp_dboption exec, 'truncagem. logon chkpt. ', false

Espero que isso ajude.

É possível reduzir o arquivo de transação para um banco de dados com espelho, backup deve ser realizado, pois há ativos virtual arquivo de log: http: / /www.xoowiki.com/Article/SQL-Server/tronquer-journal-de-log-sur-base-en-miroir-499.aspx

  1. Set parceiro espelho off usando .. ALTER [DatabaseName] SET PARTNER OFF
  2. Faça o backup do log de transações on principal..BACKUP LOG [DatabaseName] TO DISK='Drive:\DatabaseName_log_datetime.trn'
  3. Copie este DatabaseName_log_datetime.trn para qualquer local no espelho Server.
  4. Restaurar este log transacional com NoRecovery option..on banco de dados espelho. RESTORE LOG [DatabaseName] FROM DISK ='Drive:\DatabaseName_log_datetime.trn'
  5. Encolher arquivo de log no servidor principal e espelho.
  6. Novamente Tome Transação backup de log on principal..and Restaurar este log transacional sem Recuperação option..on banco de dados espelhado no servidor espelho.
  7. configurar o espelhamento de Segurança.

Testado algumas sugestões neste post, descobri que, depois de backup completo, comando de ponto de verificação e backup do log de transações, o tamanho principais do log de transações de banco de dados pode ser shrinked. O tamanho do log de transações de banco de dados espelho é então sincronizada com o principal tamanho shrinked.

USE [DATABASE_NAME];
BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;
CHECKPOINT;
WAITFOR DELAY '00:00:02';
BACKUP LOG [DATABASE_NAME] TO DISK = 'E:\Backup\DATABASE_NAME_TL.trn';
WAITFOR DELAY '00:00:02';
DBCC SHRINKFILE('DATABASE_NAME_log', 500);

Use OSQL pode executar os comandos SQL acima em lote do DOS, o WAITFOR DELAY é uma necessidade, se executado em lote, por exemplo.

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe -E -S "DATABASE_SERVER" -Q "USE [DATABASE_NAME]; BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;"

Eu acho que o diferente de backup deve ser trabalhado também, mas não testa. O abaixo diff comando de backup irá acrescentar os dados em vez de substituição.

BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_DIFF.bak' WITH DIFFERENTIAL;

a única maneira: 1) Parar espelhamento 2) reduzir os arquivos sobre o principal 3) completa de backup do principal, + JRNL transação 4) servidor espelho stop, mdf exclusão e LDF de mirrorDatabase 5) iniciar mirrorser e excluir mirrorDatabase 6) restaurar com nenhum backup de recuperação de 3) em mirroServer 7) reinstalação espelhamento Ouf!

É verdade que você não pode reduzir o log de banco de dados, uma vez que tem grande demais - naquele momento eu acho que sua única opção é para quebrar o espelho, encolher e re-criar. Além disso, não obstante as questões de saber se você deve estar usando espelhamento com apenas dois servidores, o que posso dizer é que, se o fizer, então regularmente backup de log de transações. O espaço será lançado a partir dele permitindo assim MSSQL para voltar a usar o espaço morto dentro do arquivo de log. Isso não encolher qualquer coisa, mas ele faz cumprir a exigência de pará-la crescer.

Então tudo que você precisa fazer é apagar regularmente os backups de arquivos. Por exemplo, você poderia fazer isso:

USE your_database
GO
BACKUP LOG your_database TO DISK = 'x:\your_backup_filepath\your_database.tlog'
GO

Faça-o fora de horas, embora se você puder.

Eu não sei por que isso funciona, só que ele faz, de facto trabalho. Eu executar este como um bloco em uma janela de consulta. Use a seu próprio critério. Claro que seria bom se um Microsoftie quis comentar.

use my_database
dbcc shrinkfile ( my_database_log, 1000 )
use my_database
dbcc shrinkfile ( my_database_log, 1000 )
alter database my_database
  modify file ( 
    name = my_database_log, 
    size = 1000MB
  )

Você não pode realmente fazer alguma coisa a um banco de dados espelhado sem levá-la para fora do espelho, enquanto ele não é o banco de dados principal.

O que deve funcionar é se você backup de seus bancos de dados no servidor principal og fazer um psiquiatra depois. Ou seja, o seu plano de manutenção deve incluir som encolhendo trabalho. Essas mudanças devem superar para o servidor secundário (espelho) automaticamente através da sincronização.

Se você quiser fazer um psiquiatra que só encolhe o arquivo de transação que você pode usar o seguinte T-SQL:

USE [your_db_name]
GO
DBCC SHRINKFILE (N'your_db_name_logfile' , 0, TRUNCATEONLY)
GO

Então você só usar esse trecho para cada banco de dados e executá-lo logo após o backup foi executado.

Isso deve manter o pequeno arquivo de log no servidor principal e, assim, no servidor / espelho secundário.

Espero que isso ajude.

Btw. Se você chegou ao ponto onde não há espaço deixado no disco para arquivos de log, a única opção é levá-la para fora do modo de espelho, defina o banco de dados para o modo de recuperação simples, reduzir o arquivo de log, configurá-lo para completa modo de recuperação novamente e configurar o espelho novamente (usando backups do arquivo de log og banco de dados para restaurar no servidor espelho).

Futhermore você pode usar um SQL Express como servidor testemunha, se o problema está licenciando. Ele não deve exigir demais ressources, então você poderia usar um servidor web, se esta é uma aplicação web. Basta lembrar de assistir os arquivos de log do servidor testemunha também.

** encolhimento pode ser feito de espelhamento, o que não podemos fazer é truncar o log, como o log é o que é enviado para o servidor espelho e, em seguida, os principais aguarda a confirmação.

A solução para o problema é o backup do log sem truncar e reduzir o arquivo de log, ou você pode até mesmo ignorar o encolhimento. Se isso não funcionar, tente um posto de controle antes de fazer backup seu log. Isso deve funcionar ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top