none
Indice RRS feed

  • Pergunta

  • esta rotina está excelente

    mas tenho 2 dúvidas, tenho que fazer o srink depois de executá-la, e como saber se a rotina terminou com sucesso

    obrigado

    USE AdventureWorks2008R2;
    GO
    DECLARE tables_cursor CURSOR
       FOR
       SELECT s.name, t.name
       FROM sys.objects AS t
       JOIN sys.schemas AS s ON s.schema_id = t.schema_id
       WHERE t.type = 'U';
    OPEN tables_cursor;
    DECLARE @schemaname sysname;
    DECLARE @tablename sysname;
    FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;
    WHILE (@@FETCH_STATUS <> -1)
    BEGIN;
       EXECUTE ('ALTER INDEX ALL ON ' + @schemaname + '.' + @tablename + ' REBUILD;');
       FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;
    END;
    PRINT 'The indexes on all tables have been rebuilt.';
    CLOSE tables_cursor;
    DEALLOCATE tables_cursor;
    GO

    • Movido Gustavo Maia Aguiar quarta-feira, 5 de setembro de 2012 11:40 (De:SQL Server - Desenvolvimento Geral)
    quarta-feira, 5 de setembro de 2012 11:24

Respostas

  • Bom Dia Cesarmene,

    Quando você efetua o REBUILD das tabelas, a base pode eventualmente aumentar de tamanho, mas você irá garantir que as tabelas estão em perfeito estado, pois, seus blocos de dados e de índice estarão organizados permitindo consultas mais performáticas. Pode ser que para que isso seja garantido, fiquem alguns pedaços vazios no arquivo e isso faz com que o arquivo ocupe mais espaço do que o efetivamente utilizado.

    Se nesse momento você faz o SHRINK, esses pedaços vazios serão reaproveitados e (ou) devolvidos ao sistema operacional fazendo com que o arquivo diminua de tamanho, mas possivelmente suas tabelas e índices irão sofrer uma fragmentação, pois, haverá pedaços das tabelas e dos índices em diferentes partes do arquivo fazendo com que as consultas possam experimentar lentidão.

    Em outras palavras, você só perderá tempo e esforço, pois, o trabalho que o REBUILD fez, o SHRINK irá desfazer. Aí você precisa escolher se quer uma base enxuta ou se quer uma base performática. Há detalhes sobre isso no link abaixo (em inglês):

    Why you should not shrink your data files
    http://www.sqlskills.com/blogs/paul/post/why-you-should-not-shrink-your-data-files.aspx

    Here's a good reason not to run SHRINKDATABASE...
    http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/13/629059.aspx

    Eu agradeço os elogios. Às vezes escrevo um bocado, mas a idéia é justamente tentar esclarescer o máximo possível :)

    Consultoria ? Bem, faço algumas de vez em quando, mas apenas quando o trabalho permite. Caso haja interesse, podemos conversar mais reservadamente (g m a g u i a r 2 0 0 4 a r r o b a h o t m a i l p o n t o . c o m)

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Marcado como Resposta cesarmene quarta-feira, 5 de setembro de 2012 11:59
    quarta-feira, 5 de setembro de 2012 11:53

Todas as Respostas

  • A menos que seja uma base de testes/homologação, não acho que tenha que fazer Shrink depois de executar esta rotina.

    Na verdade, em bases de produção o Shrink é pouquíssimo recomendado, pois uma correta estratégia de Backup já se responsabiliza pelo que tem que ser feito.

    Todavia, para saber se uma rotina apresentou algum erro normalmente usa-se:

    if @@Error = 0

    Mas ela não pode ser usada depois de um go.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 5 de setembro de 2012 11:32
  • MAS DEPOIS QUE EXECUTO A ROTINA A BASE AUMENTA DE TAMANHO

    if @@Error = 0 ONDE EU COLOCO ISTO NA ROTINA

    OBRIGADO

    quarta-feira, 5 de setembro de 2012 11:35
  • Bom Dia Cesarmene,

    Mas qual é propriamente o problema da base aumentar de tamanho ?

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    quarta-feira, 5 de setembro de 2012 11:40
  • USO SQL SERVER EXPRESS 2008 R2

    ENTÃO TENHO O LMITE DE 10 GIGAS

    ALIÁS QUERO DIZER QUE TODAS SUAS RESPOSTAS SÃO UMA AULA

    ALIÁS ESTAMOS VENDO O VALORES FINANCEIROS DAS LICENÇAS DE OUTRAS VERSÕES DO SQL

    APROVEITANDO VOCE FAZ CONSUTORIA?

    quarta-feira, 5 de setembro de 2012 11:43
  • O limite de 10 Gb realmente impõe este problema.

    Você pode colocar depois do: DEALLOCATE tables_cursor;

    DEALLOCATE tables_cursor;

    if @@Error = 0

    Executa_Comando_Shrink


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 5 de setembro de 2012 11:52
  • Bom Dia Cesarmene,

    Quando você efetua o REBUILD das tabelas, a base pode eventualmente aumentar de tamanho, mas você irá garantir que as tabelas estão em perfeito estado, pois, seus blocos de dados e de índice estarão organizados permitindo consultas mais performáticas. Pode ser que para que isso seja garantido, fiquem alguns pedaços vazios no arquivo e isso faz com que o arquivo ocupe mais espaço do que o efetivamente utilizado.

    Se nesse momento você faz o SHRINK, esses pedaços vazios serão reaproveitados e (ou) devolvidos ao sistema operacional fazendo com que o arquivo diminua de tamanho, mas possivelmente suas tabelas e índices irão sofrer uma fragmentação, pois, haverá pedaços das tabelas e dos índices em diferentes partes do arquivo fazendo com que as consultas possam experimentar lentidão.

    Em outras palavras, você só perderá tempo e esforço, pois, o trabalho que o REBUILD fez, o SHRINK irá desfazer. Aí você precisa escolher se quer uma base enxuta ou se quer uma base performática. Há detalhes sobre isso no link abaixo (em inglês):

    Why you should not shrink your data files
    http://www.sqlskills.com/blogs/paul/post/why-you-should-not-shrink-your-data-files.aspx

    Here's a good reason not to run SHRINKDATABASE...
    http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/13/629059.aspx

    Eu agradeço os elogios. Às vezes escrevo um bocado, mas a idéia é justamente tentar esclarescer o máximo possível :)

    Consultoria ? Bem, faço algumas de vez em quando, mas apenas quando o trabalho permite. Caso haja interesse, podemos conversar mais reservadamente (g m a g u i a r 2 0 0 4 a r r o b a h o t m a i l p o n t o . c o m)

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Marcado como Resposta cesarmene quarta-feira, 5 de setembro de 2012 11:59
    quarta-feira, 5 de setembro de 2012 11:53
  • MUITO BOM

    MAS QUERO TRANSFORMAR  EM UMA STORE PROCEDURE

    PARA EXECUTAR DE MINHA APLICAÇÃO CHAMANDO ESTA STORE PROCEDURE

    RECEBENDO UM RETORNO 0 OU 1

    SE DEU TUDO OK OU NÃO

    OBS:  MAS O USUÁRIO QUE CONECTA O BANCO NA MINHA APLICAÇÃO TEM QUE TER PERMISSAO DE ACESSO AS TABELAS QUE A ROTINA USA?

    QUANTO A CONSULTORIA VOU FAZER CONTATO.

    quarta-feira, 5 de setembro de 2012 11:58