AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 342410
Accepted
Don
Don
Asked: 2024-09-17 07:29:47 +0800 CST2024-09-17 07:29:47 +0800 CST 2024-09-17 07:29:47 +0800 CST

O arquivo SQL .bak é compactado sem que seja explicitamente declarado que deve ser compactado?

  • 772
Esta pergunta foi migrada do Stack Overflow porque pode ser respondida no Database Administrators Stack Exchange. Migrada há 22 horas .

Eu uso o script a seguir para fazer um .bak de um banco de dados de produção e salvá-lo em um servidor de teste onde ele pode ser restaurado se necessário. O script não declara para compactar o arquivo. Executando o SQL Server 2019 Enterprise.

BACKUP DATABASE [PINK] 
    TO DISK = N'\\TestServer\Transfer\PINK.bak' 
    WITH NOFORMAT, INIT,  NAME = N'PINK', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM
GO

DECLARE @backupSetId AS int

SELECT @backupSetId = position 
FROM msdb..backupset 
WHERE database_name = N'PINK' 
  AND backup_set_id = (SELECT MAX(backup_set_id) 
                       FROM msdb..backupset 
                       WHERE database_name = N'PINK')

IF @backupSetId IS NULL
BEGIN
    RAISERROR(N'Verify failed. Backup information for database ''PINK'' not found.', 16, 1) 
END

RESTORE VERIFYONLY 
    FROM DISK = N'\\TestServer\Transfer\PINK.bak' 
    WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO

Ele .bakvai para o servidor de teste e, dependendo de onde você olha no Explorer, ele tem 162 GB ou 154 GB:

insira a descrição da imagem aqui

Para economizar espaço, tentei compactar .bakadicionando COMPRESSIONao script:

BACKUP DATABASE [PINK] 
    TO DISK = N'\\TestServer\Transfer\PINK.bak' 
    WITH NOFORMAT, INIT, NAME = N'PINK', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10, CHECKSUM
GO

DECLARE @backupSetId AS int

SELECT @backupSetId = position 
FROM msdb..backupset 
WHERE database_name = N'PINK' 
  AND backup_set_id = (SELECT MAX(backup_set_id) 
                       FROM msdb..backupset 
                       WHERE database_name = N'PINK')

IF @backupSetId IS NULL
BEGIN
    RAISERROR(N'Verify failed. Backup information for database ''PINK'' not found.', 16, 1) 
END

RESTORE VERIFYONLY 
    FROM DISK = N'\\TestServer\Transfer\PINK.bak' 
    WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO

Após executar com o COMMPRESSIONcomando incluído, ele caiu no mesmo tamanho no servidor de teste. Eu verifiquei os arquivos .ndfe .mdfe eles totalizam 770 GB ou 732 GB, dependendo de onde você olha. Além disso, ele inclui cerca de 23 GB de informações de índice.

insira a descrição da imagem aqui

Isso .bakjá está compactado, mesmo que eu não tenha dito isso?

sql-server-2019
  • 3 3 respostas
  • 526 Views

3 respostas

  • Voted
  1. Peter B
    2024-09-17T08:03:57+08:002024-09-17T08:03:57+08:00

    A compactação pode estar ativa como comportamento padrão.

    Você pode executar esta consulta para verificar isso:

    SELECT value
    FROM   sys.configurations
    WHERE  name = 'backup compression default'
    

    0 significa que a compactação de backup está desativada, 1 significa que a compactação de backup está ativada.

    Para obter mais informações, consulte https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/view-or-configure-the-backup-compression-default-server-configuration-option

    • 6
  2. FevziKartal
    2024-09-17T13:49:08+08:002024-09-17T13:49:08+08:00

    SSMS > Clique com o botão direito do mouse em Instância do servidor > Propriedades > Configurações do banco de dados > Compactar backup .

    Você pode verificar o status padrão ou alterá-lo.

    insira a descrição da imagem aqui

    insira a descrição da imagem aqui

    • 3
  3. Best Answer
    Aaron Bertrand
    2024-09-17T19:59:57+08:002024-09-17T19:59:57+08:00

    As outras respostas explicam a causa provável, que a configuração do servidor para compactar backups está habilitada, então você está obtendo isso, quer tenha pedido ou não. Se essa for a causa, você verá que a linha em msdb.dbo.backupsetque corresponde ao backup terá sido compression_algorithmpreenchida ( 'MS_XPRESS'), e compressed_backup_sizeprovavelmente será diferente de backup_size. Se o backup não foi compactado, então compression_algorithmserá NULLe backup_sizee compressed_backup_sizeserão os mesmos.

    SELECT backup_size, compressed_backup_size, compression_algorithm
      FROM msdb.dbo.backupset
      WHERE { your where clause };
    

    Você também pode conferir a Compressedcoluna em RESTORE HEADERONLY:

    RESTORE HEADERONLY 
      FROM DISK = '\\TestServer\Transfer\PINK.bak'
      WITH FILE = @backupSetId;
    

    Se a configuração estiver desabilitada, basta habilitá-la:

    EXEC sys.sp_configure N'backup compression default', 1;
    GO
    RECONFIGURE WITH OVERRIDE;
    

    Não sei por que você não teria isso ativado, ou por que você não gostaria que a compactação acontecesse sempre, a menos que você esteja tentando maximizar a compactação final usando opções de terceiros muito mais intensivas/eficazes para compactar um backup descompactado. Você certamente não está mais à frente em termos de espaço necessário, E/S e largura de banda, e eu não sei o quanto mais eficazes o 7-Zip e outros podem ser hoje, de qualquer forma.


    Mas há outra possibilidade: talvez seus dados simplesmente não sejam bem compactados, ou já estejam compactados (usando page, row ou columnstore). Nesse caso, a compactação de backup pode ter pouco ou até mesmo nenhum efeito; se for assim, é improvável que você veja muita diferença entre backups WITH COMPRESSIONe sem.


    Algumas notas sobre anexar vários backups a um único .bak:

    • Simplesmente não faça isso. Essa "eficiência" remonta às fitas físicas e não causa nada além de confusão (e até mesmo corrupção de dados, pois as pessoas apenas executam uma restauração sem perceber que obtêm o primeiro/mais antigo arquivo por padrão). Uma prática muito melhor é sempre usar WITH INITe tornar os arquivos de saída únicos e autodocumentados incorporando carimbos de data/hora; isso pode ser automatizado com várias ferramentas gratuitas, como DBAToolsBackup-DbaDatabase (usando -TimeStampFormat) e SQL Server Backup de Ola Hallengren (usando @FileName = N'...{Year}{Month}{Day}_{Hour}{Minute}{Second}...').
    • Um exemplo mais relevante de confusão: se você comprimiu o primeiro arquivo no backup, os arquivos subsequentes dirão Compressed = 1in, RESTORE HEADERONLYindependentemente de você dizer explicitamente WITH COMPRESSION- e msdbagrees. Eu estava esperando um erro (que você obtém se tentar o contrário: sem compressão e depois compressão). De tudo que posso ver, esses backups posteriores são compactados. Esta é, na verdade, uma terceira explicação potencial para seu cenário atual: seu primeiro backup in PINK.BAKfoi compactado, então todos os outros estão herdando essa opção.
    • 2

relate perguntas

  • O período de avaliação do SQL Server expirou

  • Como o novo procedimento armazenado do sistema sys.xp_delete_files é diferente de sys.xp_delete_file?

  • Atualizando do SQL Server 2012 SP1 para o SQL Server 2019

  • O MS SQL Server tem a função generate_series

  • Como você habilita o cache do conjunto de resultados do SQL Server 2019?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve