none
Diminuir tamanho da base de dados RRS feed

  • Pergunta

  • Boa tarde, 

    eu tenho uma base de 67Gb (arquivo mdf) com varias tabelas dentro. eu fiz a exclusão de várias tabelas dentro desse Mdf porem o tamanho da base não diminuiu absolutamente nada.

    tem algo que possa estar fazendo para que o tamanho do mdf diminua?

    quinta-feira, 5 de setembro de 2019 19:18

Respostas

  • Lekao87,

    Remover a tabela não vai representar uma diminuição no tamanho dos arquivos de dados por partes do SQL Server.

    Sim, existem algumas formas de se diminiur o tamanho de um arquivo de dados, dentre elas, através dos comandos:

     - DBCC ShrinkDatabase - Encolhendo o banco de Dados de forma geral; ou

     - DBCC ShrinkFile - Encolher de forma única e específica arquivos de dados ou log.

    Em alguns cenários, podemos através do Backup de banco de dados realizar o processo e limpeza do arquivo de log, o que resulta da diminuição de uma forma gradual deste arquivo.

    Estes mesmos procedimentos realizados por linha de comando podem ser implementados diretamente no Management Studio através do uso da opção Task Databases.

    Agora, ressalto que ambos os comandos destacados anteriormente devem ser muito bem analisados e estudados, pois o seu uso de forma indevida ou mal implementada poderá provocar alguma possível perda de dados.

    Você realmente deseja somente encolher o arquivo de dados?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 5 de setembro de 2019 19:40
    Moderador
  • Deleted
    domingo, 8 de setembro de 2019 13:03

Todas as Respostas

  • Lekao87,

    Remover a tabela não vai representar uma diminuição no tamanho dos arquivos de dados por partes do SQL Server.

    Sim, existem algumas formas de se diminiur o tamanho de um arquivo de dados, dentre elas, através dos comandos:

     - DBCC ShrinkDatabase - Encolhendo o banco de Dados de forma geral; ou

     - DBCC ShrinkFile - Encolher de forma única e específica arquivos de dados ou log.

    Em alguns cenários, podemos através do Backup de banco de dados realizar o processo e limpeza do arquivo de log, o que resulta da diminuição de uma forma gradual deste arquivo.

    Estes mesmos procedimentos realizados por linha de comando podem ser implementados diretamente no Management Studio através do uso da opção Task Databases.

    Agora, ressalto que ambos os comandos destacados anteriormente devem ser muito bem analisados e estudados, pois o seu uso de forma indevida ou mal implementada poderá provocar alguma possível perda de dados.

    Você realmente deseja somente encolher o arquivo de dados?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 5 de setembro de 2019 19:40
    Moderador
  • Prezado Lekao87,

    Ainda aproveitando o gancho do Junior.

    As tabelas que você 'dropou' você sabe realmente o tamanho delas para ter noção do espaço que deveria ter ganho ? 

    Para lhe ajudar com isto , segue uma querie para você ter noção do espaço ocupado pelas tabelas na sua Base de Dados. Assim, você pode estimar o ganho de espaço (após fazer o drop e o Shrink já informado antes).

    As tabelas que você já dropou não dá pra saber o tamanho , mas, para você ter a noção das que estão na instancia.

    Veja o top 100 das bases em tamanho:

    use NomeBaseDados
    SELECT TOP (100)					
        t.NAME AS Entidade,					
        p.rows AS Qtd_Registros,					
        (SUM(a.total_pages) * 8)/1024 AS EspacoTotalMB,					
        (SUM(a.used_pages) * 8)/1024 AS EspacoUsadoMB,					
        ((SUM(a.total_pages) - SUM(a.used_pages)) * 8) /1024  AS EspacoNaoUsadoMB					
    FROM					
        sys.tables t					
    INNER JOIN					
        sys.indexes i ON t.OBJECT_ID = i.object_id					
    INNER JOIN					
        sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id					
    INNER JOIN					
        sys.allocation_units a ON p.partition_id = a.container_id					
    LEFT OUTER JOIN					
        sys.schemas s ON t.schema_id = s.schema_id					
    WHERE					
        t.NAME NOT LIKE 'dt%'					
        AND t.is_ms_shipped = 0					
        AND i.OBJECT_ID > 255					
    GROUP BY					
        t.Name, s.Name, p.Rows					
    ORDER BY					
        EspacoTotalMB DESC, Qtd_Registros DESC 					
    					



    Jefferson Clyton Pereira da Silva - [MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    quinta-feira, 5 de setembro de 2019 21:34
  • Deleted
    domingo, 8 de setembro de 2019 13:03