none
Como gerar um DBCC SHINKFILE automaticamente ? RRS feed

  • Pergunta

  • Bom, temos vários arquivos que são importados, ficando assim em fila e sendo processados um por um, gerando assim logs...

    Quando é necessário compactamos... este log pelo DBCC SHINKFILE, porém se faz necessário que o compactamento seja realizado automaticamente, teria alguma forma de descobrir se o log está cheio ou quase cheio e então pelo banco executar este comando? como uma rotina?

    teria a opção do agendamento automatico pelo windows, porém não satisfaria como a opção de verificar quando está cheio e realizar automaticamente.

    Agradecido!
    • Movido Gustavo Maia Aguiar quinta-feira, 24 de dezembro de 2009 18:19 (De:SQL Server - Desenvolvimento Geral)
    quarta-feira, 23 de dezembro de 2009 19:44

Todas as Respostas

  • Se for com o uma versao nao express tem sim, craindo um plano de manutencao e utilizando o SQL Server Agent .. Se for express, este nao esta disponivel, vai ter que fazer via script e agendar com o agendador de tarefas do windows (schedule tasks)

    A resposta depende da informaçao de qual versao vc usa

    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quarta-feira, 23 de dezembro de 2009 20:01
  • hmm ótimo...

    Seria possível realizar com o standart edition ?

    E para a realização deste script poderia me informar uma maneira pratica e objetiva?

    Muito Agradecido!

    segunda-feira, 28 de dezembro de 2009 11:24
  • Julio pode ser feito no standart tbm..

    para isto, siga as etapas abaixo

    1- em Management / Maintenance plan - clique com o botao direito e escolha a opcao Mantenance Plan Wizard
    2- next na tela de boas vindas
    3- informe o nome deste plano e defina a agenda que o mesmo devera ocorrer (ex. todo sabado as 23:00) e next
    4- Selecione a opcao "Shrink Database" e next, na tela seguinte next
    5- Selecione os databases que deseja fazer a shrink e next, next e Finish


    Esta é uma maneira bem básica e rápida para schedular o shrink


    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    segunda-feira, 28 de dezembro de 2009 11:47
    Moderador
  • Julio

    Faz exatamente como o Marcelo falou. Alem disso esse plano de mautençao permite agendar um backup (full e dos logs) alem de dar uma checada nos indices e verificar a estrutura da tabela tambem.. tudo com uma interface tipo Wizard. Alem disso vc pode agendar as diversas tarefas com horarios diferentes (se vc quiser)

    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    segunda-feira, 28 de dezembro de 2009 14:10
  • Hmm otimo...

    eu uso management porém o banco esta em um servidor com o standart...

    estava pesquisando... e vi no proprio management em properties / options...

    a opção autoshrink... ela seria uma boa escolha para evitar lotar o database? como n tem opção de escolher horarios ou frequencia... quando ela é ativada?

    vi tbm q eh possivel descobrir o tamanho do log e com isso executar o shrink... essa seria a melhor opção... quando o log atingisse 80% do tamanho eu diminuiria ele...

    poderia me ajudar em algumas destas questoes??

    agradecido!
    segunda-feira, 28 de dezembro de 2009 14:11
  • Autoshrink e AutoIncrement sao parametros que devem ser usados com muito cuidado. Eles degradam a performance do Banco.
    Veja mais

    Eu vi a sugestao de varios DBAs para desligar esses parametros e controlar tudo manualmente. Veja a importancia do plano de manutençao ai,

    com relacao a quando ela ée ativada, a resposta é sempre! por isso a degradaçao de performace

    se vc ler neste ultimo link, nem a microsoft recomenda o uso do autoshrink
     
    ms178037.note(en-us,SQL.100).gifNote:
    Shrinking database and log files can be set to occur automatically. However, we recommend against automatic shrinking, and the autoshrink database property is set to FALSE by default. If autoshrink is set to TRUE, automatic shrinking reduces the size of a file only when more than 25 percent of its space is unused. The file is shrunk either to the size at which only 25 percent of the file is unused space or to the original size of the file, whichever is larger. For information about changing the setting of the autoshrink property, see How to: View or Change the Properties of a Database (SQL Server Management Studio)—use the Auto Shrink property on the Options page—or ALTER DATABASE SET Options (Transact-SQL)—use the AUTO_SHRINK option.

    att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    segunda-feira, 28 de dezembro de 2009 14:25
  • Hmm muito obrigado...

    Bom com essas opções descartadas... me sobra duas opções...

    uma é usar o gerenciador de tarefas do windows... e agendar o shrink... mas não é o ideal... já que não sabemos quando a importação de dados para o banco será exigida ao maximo... lotando assim o log...

    por esta razão o ideal seria um script que verificasse o tamanho do log... (vi em um forum que isso é possível porém não sei como realizar), e verificando o tamanho... quando chegasse à um limite ele compactasse...! conhece alguma forma ou dica ou mesmo algum script que faça isso??

    muito grato ae pela ajuda nas minhas perguntas!
    segunda-feira, 28 de dezembro de 2009 14:35
  • O plano de manutençao é a melhor opçao... qual é a dificuldade de utiliza-lo? 
    Ele nao usa o agendador de tarefas do windows, se é essa a questao. ele usa o SQL Server Agent para gerenciar os jobs.

    E porque nao executar o DBCC SHRINKFILE logo apos a sua importaçao? Independente do tamanho do log... pode ser uma opçao.


    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    segunda-feira, 28 de dezembro de 2009 14:47
  • Otimo... este problema resolvido... aí estaremos vendo aqui se usarem o plano ou mesmo após a importação ( mais provavel ), porém aí veio uma duvida... vc sabe se quando está ocorrendo a importação e processamento dos dados no banco... pode gerar algum problema se o mesmo for interrompido para o compactamento do log...

    por exemplo...

    importei 20 arquivos de 10 mil linhas cada... ( fizemos este teste... no 18º ele... deu log full )...

    porém quando processa um arquivo ele já inicia outro... como uma fila de importações... então... a questão é se haveria algum problema... quando o compactamento é feito... se pode afetar a importação... se ele tah um truncate....

    A duvida em si tah praticamente já respondida... muito obrigado... mesmo! =D

    Agora são só esses detalhes ae... que caso vc saiba... vou abusar um poko mais ae da sau boa vontade =D

    Muito Agradecido!

    segunda-feira, 28 de dezembro de 2009 16:54
  • Se o encheu o log é porque vc deve estar abrindo uma transaçao e só fechando no final. COmo vc esta fazendo para importar? Atravez do BulkCopy?

    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    segunda-feira, 28 de dezembro de 2009 16:58
  • Julio,

    Qual o modelo de recovery deste banco?

    estude alterar para simple durante esta importacao...

    att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    segunda-feira, 28 de dezembro de 2009 17:29
    Moderador
  • A importação são de arquivos csv que são verificados linha a linha, de empresas, verificando igualdade já existente no banco, um processo demorado, a importação é feita pelo site.

    Não temos acesso ao log, apenas trabalhamos com o banco e com o site, então não sei lhe dizer se o log é gerado ao terminar o processo de importação ou linha a linha por exemplo.

    O medo é que se por gerar o log por exemplo a cada importação ( dependendo do tamanho leva 1h ou mais ) ele sobrecarregue ou então acabe prejudicando outra importação que já esteja sendo realizada.

    Agradecido!

    segunda-feira, 28 de dezembro de 2009 17:33
  • Ok, mas como vc importa esses arquivos CSV (usando o BCP?)
    Se for existe uma opçao para fechar a transacao a cada x registros. Isso é util para evitar o estouro do arquivo de log como esta ocorrendo.

    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    segunda-feira, 28 de dezembro de 2009 17:56
  • Sim as transações são fechadas a cada 5000 registros, gravadas e então reiniciadas.

    O unico medo é se o shrink apos cada importação pode vir a atrapalhar algo.

    Obrigado!
    segunda-feira, 28 de dezembro de 2009 18:11
  • Nao vejo nenhum problema. Se vc verificar o comando DBCC SHRINKFILE vai ver isso:
    "The database being shrunk does not have to be in single-user mode; other users can be working in the database when the file is shrunk. You do not have to run the instance of SQL Server in single-user mode to shrink the system databases."

    Ou seja, vc pode executa-lo com outras conexoes abertas... 

    Mas uma coisa que eu nao entendi. Se vc reinicia a transaçao a cada 5000, nao deveria estourar o log... Esse problema ocorre com frequencia?

    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    segunda-feira, 28 de dezembro de 2009 18:29
  • Muito Obrigado. Então... enviamos um email para quem fez esta parte de processamento mostrando os problemas e as possiveis correções, as quais nós provavelmente iremos fazer.

    Este erro ocorreu, quando estavamos importando diversos arquivos em fila, eu subi 20 arquivos e ocorreu database full no 18 e este erro havia ocorrido antes também quando os arquivos estavamos colocados em fila.

    De qualquer maneira, Agradeço muito sua ajuda! Quando for implementar de fato o processo de compactamento eu informo aqui ! Muito Obrigado! Aberto para mais dicas!
    segunda-feira, 28 de dezembro de 2009 18:38
  • Bom estaremos realizando o plano de manutenção mesmo...

    porém usamos aqui no suporte o management... e não o standart... o standart é usado no servidor...

    este plano de manutenção devria ser realizado diretamento no servidor... ou poderia eu baixar o sql server standart e realiza-lo aqui mesmo ?

    Agradecido!
    terça-feira, 29 de dezembro de 2009 18:43
  • Consegui instalar aqui o Microsoft SQL Server Management Studio, porém ao ir realizar o plano de manutenção pelo passo a passo indicado acima, não existe a pasta maintence plans, temos um acesso full ao banco, mas não acessamos diretamente do servidor, para realizar isto teria de ser via terminal service ou é algo diferente? Obrigado!
    segunda-feira, 4 de janeiro de 2010 18:21
  • Julio,

    Você por acaso instalou o SQL Server Express ou o Management Studio Express?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 4 de janeiro de 2010 18:38
    Moderador
  • Eu tinha o management Express mas desistalei pq falaram que não da pra realizar por ele, então instalei o Microsoft SQL Server Management Studio, mas não express e sim o standard.
    segunda-feira, 4 de janeiro de 2010 18:56
  • Então, eu tinha o sql server 2005 management express, queria realizar o plano de manutenção, porém por ele não era possível. Então como indicado baixei o standart onde é informado como SQL server 2005 manmagement studio, porém não tem a opção de maintenence plans dentro da pasta management como informado neste mesmo tópico.

    Obrigado!

    quarta-feira, 6 de janeiro de 2010 11:22
  • Bom dia Júlio,

    O servidor SQL Server no qual estás tentando criar o plano de manutenção, é 2k ou 2k5?

    Se você estiver utilizando o management studio para conectar em uma instância 2k, você verá os planos de manutenção em Management->Legacy, porém não poderás criar um por lá.

    Atenciosamente,


    André Rocha.

    http://br.linkedin.com/pub/andre-rocha/10/269/5a http://CleverData.com.br
    quarta-feira, 6 de janeiro de 2010 11:31
  • Bom não sei... em management / legacy encontra-se apenas as opções 'SQL MAIL' e 'Data Transformation Services' ( a qual não consigo acessar), o importante para mim seria realizar este plano de manutençã, ou então se tiver algum modo com que eu realiza um shrink automatico de outra forma me indique, pelo plano de manutenção, qual versão preciso ter? onde baixa-la?

    Agradecido!
    quarta-feira, 6 de janeiro de 2010 17:16
  • Júlio,

    Qual é o nível de permissão que seu login possui?


    Atenciosamente,


    André Rocha.
    http://br.linkedin.com/pub/andre-rocha/10/269/5a http://CleverData.com.br
    quarta-feira, 6 de janeiro de 2010 17:29
  • permissão full pelo que informaram aqui.
    quarta-feira, 6 de janeiro de 2010 19:09
  • Verifique novamente a versao do seu sql.
    Execute:
    SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
    E no help>about do SSMS tem como copiar as informaçoes sobre a versao.

    Faça isso e poste aqui

    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quarta-feira, 6 de janeiro de 2010 19:34
  • Bom dia! Só pra lembrar o objetivo é realizar um plano de manutenção para que atravez deste eu possa realizar o shrink a cada um periodo de horas.

    Bom vamos lá...

    Seguindo a recomendação do William as respostas foram as seguintes:

     

     

    productversion = 9.00.1399.06 
    productlevel = RTM
    edition = Standard Edition

    executando @@version se tem:

    Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 1)


    Ou seja estou em uma versão do Standard Edition 2005 porém não acvho a opção maintencence plans para realizar o plano de manutenção.

    Agradecido pelas ajudas!

    quinta-feira, 7 de janeiro de 2010 10:27
  • E a versao do SSMS? Poste tambem (va em jauda>sobre ou help>about caso esteja em ingles).. Vou ver se nao é nada relacionado a algum SP, ja que existe o SP3 para SQL 2005 e vc esta com o SP1.


    de uma olhada aqui tambem


    Att



    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quinta-feira, 7 de janeiro de 2010 12:49
  • Aí esta as informações:

    Operating System 5.1.2600
    Microsoft SQL Server Management Studio 9.00.1399.00
    Microsoft MSXML 2.6 3.0 5.0 6.0
    Microsoft Internet Explorer 8.0.6001.18702
    Microsoft Data Access Components (MDAC) 2000.085.1132.00 (xpsp.080413-0852)
    Microsoft Analysis Services Client Tools 2005.090.1399.00
    Microsoft .NET Framework 2.0.50727.3603

    Bom o tutorial mas nao tenh uessa opção =/

    Obrigado!
    quinta-feira, 7 de janeiro de 2010 16:45
  • Ok... achei outra coisa interessante...

    Verifique o nivel de compatibilidade de seus bancos. Se todos tiverem compatibilidade com o 2000, entao a opçao de maitenance plans vai aparecer somente no Legacy

    Masi uma coisa... verificando o change log do sp2 e sp3 vi que eles corrigem varias coisas relacionados ao planos de manutençao... sugiro aplicar o SP3 tanto no servidor, como na maquina onde esta instalado o SSMS.



    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quinta-feira, 7 de janeiro de 2010 17:08
  • Mais uma!!!

    Vc instalou o SSIS no servidor? Sem el vc nao pode criar plano de manutençao...


    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quinta-feira, 7 de janeiro de 2010 17:14
  • Bom trabalhamos com um banco, mas o banco em si, fica em um servidor, o qual é pago para manter o banco instavel e etc. Ou seja, quando vc diz servidor seria este servidor ou simplesmente a maquina de onde acesso o banco, a qual poderia ser qq maquina?
    quinta-feira, 7 de janeiro de 2010 17:59
  • O SSIS tem que estar instalado no Servidor! Desconheco a possibilidade de que este seja instalado em uma maquina a parte

    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quinta-feira, 7 de janeiro de 2010 18:01
  • Certo. Irei instalar o SP3 aqui na maquina e enviaremos um email para a empresa onde na qual o servidor está instalado, requerindo algumas informações (se esta instalado o SISS, SP3) e verificando a possibilidade deles mesmo fazerem o plano de manutenção.

    Atravez do plano de manutenção posso compactar o log de 5 em 5 horas por exemplo ou posso fazer melhor e configurar para que sempre que termine uma importação ele compacte o log (shrink) ?

    Muito Agradecido!
    sexta-feira, 8 de janeiro de 2010 10:18
  • Outra coisa... seria possivel pelo plano de manutenção observar o tamanho do arquivoi de log e quando estivesse com por exemplo 80% cheio, houvesse um compactamento automatico?

    Ou teria de ser somente apos a importação?

    Ou somente mesmo com horario agendado ( de 3 em 3h por ex )

    Muito Agradecido.
    sexta-feira, 8 de janeiro de 2010 10:23