Capítulo 18: Consultas de Criação de Tabela (MAKE-TABLE) e Anexação (INSERT INTO): Fechamento Mensal

🎯 Objetivo da Aula

Nesta aula de arquitetura e manutenção preventiva de sistemas, você aprenderá como empresas estruturadas realizam o Fechamento Contábil Mensal e o Arquivamento Histórico de Dados (Data Archiving). No laboratório de informática, você aprenderá a criar novas tabelas a partir de consultas utilizando o comando SELECT ... INTO (Make-Table) e a migrar lotes de dados em massa através do comando INSERT INTO ... SELECT (Append Query). Você compreenderá também o fenômeno do inchaço de banco de dados (Database Bloat) e dominará a ferramenta de manutenção mais importante do Access: Compactar e Reparar Banco de Dados.

Ao final desta aula, você terá implementado a rotina oficial de fechamento da FastLog S.A., mantendo a tabela operacional limpa e rápida, sem perder um único centavo do histórico de fretes concluídos.


🏢 Cenário Prático (FastLog S.A.)

Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: Ao longo de 4 anos de operação contínua, a tabela tbl_OrdensFrete acumulou 420.000 viagens, fazendo o arquivo .accdb atingir 1,8 GB de tamanho (muito próximo do limite técnico máximo do Access, que é de 2,0 GB). As telas de faturamento começaram a travar e as consultas demoravam minutos para abrir porque o computador tinha que varrer 4 anos de fretes já entregues e pagos para lançar as viagens de hoje. O contador alertou: “Os fretes finalizados há mais de 180 dias devem ser arquivados em uma tabela histórica separada para manter a operação leve, mas sem quebrar os relatórios fiscais dos últimos anos”.
Sua Missão: Como administrador de banco de dados, você criará a tabela tbl_HistoricoFretes usando MAKE-TABLE, construirá uma rotina de anexação com INSERT INTO para arquivar fretes concluídos e executará a ferramenta Compactar e Reparar, reduzindo o tamanho do arquivo em disco em mais de 60%.


🧠 Fundamentos: A Teoria Traduzida

1. O Ciclo Corporativo de Arquivamento (Housekeeping)

Em qualquer grande empresa de logística ou varejo, os dados são divididos em dois ciclos de vida:

  • Dados Operacionais (Quentes / Ativos): Fretes agendados, em trânsito ou concluídos nos últimos 90 dias. Ficam na tabela ativa para acesso ultrarrápido dos operadores.
  • Dados Históricos (Frios / Arquivo Morto): Fretes de safras passadas (1 a 5 anos atrás). Ficam guardados em tabelas de auditoria, fora do fluxo diário.
flowchart TD
    TAB_ATIVA[("💾 tbl_OrdensFrete (Tabela Ativa)<br/>Fretes em andamento e recentes")]
    
    TAB_ATIVA -->|"1. INSERT INTO ... SELECT<br/>(Copia os fretes entregues há > 180 dias)"| TAB_HIST[("🗄️ tbl_HistoricoFretes (Arquivo Morto)<br/>Histórico Fiscal dos Últimos 5 Anos")]
    TAB_ATIVA -->|"2. DELETE FROM tbl_OrdensFrete<br/>(Limpa a fila diária de operação)"| LIMPEZA["🧹 Tabela Ativa Rápida e Limpa"]
    
    LIMPEZA -->|"3. Compactar e Reparar<br/>(Libera espaço em disco)"| ENXUTO["🚀 Arquivo .accdb Otimizado e Leve"]

    style TAB_ATIVA fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
    style TAB_HIST fill:#744210,stroke:#fff,stroke-width:2px,color:#fff
    style LIMPEZA fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff
    style ENXUTO fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff

2. A Consulta de Criação de Tabela: SELECT ... INTO (Make-Table)

Cria uma nova tabela do zero diretamente a partir do resultado de uma consulta, herdando os tipos de dados automaticamente:

1
2
3
4
SELECT ID_OrdemFrete, Data_Despacho, ID_Cliente, Valor_Frete, Status_Ordem
INTO tbl_HistoricoFretes
FROM tbl_OrdensFrete
WHERE Status_Ordem = 'Entregue';

3. A Consulta de Anexação: INSERT INTO ... SELECT (Append Query)

Permite copiar novos registros de uma tabela para outra tabela já existente, sem apagar os dados que já estavam lá dentro:

1
2
3
4
INSERT INTO tbl_HistoricoFretes (ID_OrdemFrete, Data_Despacho, ID_Cliente, Valor_Frete, Status_Ordem)
SELECT ID_OrdemFrete, Data_Despacho, ID_Cliente, Valor_Frete, Status_Ordem
FROM tbl_OrdensFrete
WHERE Status_Ordem = 'Entregue' AND Data_Despacho < (Date() - 180);

4. O Fenômeno do Inchaço (Database Bloat) e a Ferramenta “Compactar e Reparar”

Quando você exclui registros no Access, o arquivo .accdb não diminui de tamanho automaticamente. O Access apenas marca aquelas linhas como “espaço livre para uso futuro”. Se você apagar 500 MB de dados, o arquivo continua com 1,8 GB!

  • Para liberar o espaço físico e recuperar a velocidade, executamos o comando: Compactar e Reparar Banco de Dados (Compact and Repair Database). Ele reordena os índices, reconstrói as tabelas e devolve os megabytes livres para o Windows.

📖 Exemplo Guiado: Passo a Passo no Laboratório

Abra o arquivo FastLog_Database.accdb. Vamos construir a rotina de fechamento contábil.

Passo 1: Abrindo o Editor SQL

  1. Acesse Criar ➔ Design da Consulta.
  2. Feche o painel lateral e alterne para o Modo SQL.
  3. Limpe o editor de texto.

🛠️ Prática Obrigatória 1: Criando a Tabela de Arquivo Histórico com SELECT ... INTO

Você criará a tabela tbl_HistoricoFretes contendo uma foto oficial dos fretes já entregues.

Passo a Passo no Computador:

  1. Digite a instrução de criação de tabela:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    SELECT 
        tbl_OrdensFrete.ID_OrdemFrete,
        tbl_OrdensFrete.Data_Despacho,
        tbl_OrdensFrete.ID_Cliente,
        tbl_OrdensFrete.Placa_Veiculo,
        tbl_OrdensFrete.Codigo_Rota,
        tbl_OrdensFrete.Valor_Frete,
        tbl_OrdensFrete.Status_Ordem
    INTO tbl_HistoricoFretes
    FROM tbl_OrdensFrete
    WHERE Status_Ordem = 'Entregue';
  2. Clique no botão ! Executar (exclamação vermelha).
  3. O Alerta de Criação do Access:
    • O sistema emitirá o aviso: “Você está prestes a colar X linha(s) em uma nova tabela. Deseja criar uma nova tabela com os registros selecionados?”
    • Clique em Sim.
  4. Verificação no Painel de Navegação:
    • Olhe o Painel de Navegação à esquerda: uma nova tabela chamada tbl_HistoricoFretes acaba de nascer!
    • Abra a nova tabela: todos os fretes entregues estão gravados lá com perfeição.
  5. Salve a consulta como: qry_AcaoCriarHistorico.

✅ Resultado Esperado (Prática 1):

A tabela tbl_HistoricoFretes é gerada automaticamente pelo comando SQL com todas as colunas tipadas e dados históricos preservados.


🛠️ Prática Obrigatória 2: Anexação Contábil e Manutenção de “Compactar e Reparar”

Agora você simulará a rotina mensal de anexação de novos fretes entregues e executará a manutenção preventiva de disco.

Passo a Passo no Computador:

  1. Acesse Criar ➔ Design da Consulta ➔ Modo SQL.
  2. Digite o comando de anexação contábil (INSERT INTO):
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    INSERT INTO tbl_HistoricoFretes (ID_OrdemFrete, Data_Despacho, ID_Cliente, Placa_Veiculo, Codigo_Rota, Valor_Frete, Status_Ordem)
    SELECT 
        tbl_OrdensFrete.ID_OrdemFrete,
        tbl_OrdensFrete.Data_Despacho,
        tbl_OrdensFrete.ID_Cliente,
        tbl_OrdensFrete.Placa_Veiculo,
        tbl_OrdensFrete.Codigo_Rota,
        tbl_OrdensFrete.Valor_Frete,
        tbl_OrdensFrete.Status_Ordem
    FROM tbl_OrdensFrete
    WHERE Status_Ordem = 'Entregue' 
      AND ID_OrdemFrete NOT IN (SELECT ID_OrdemFrete FROM tbl_HistoricoFretes);
    (A subconsulta NOT IN garante que você nunca anexe fretes que já foram copiados anteriormente, impedindo duplicidades!).
  3. Salve a consulta como: qry_AcaoAnexarHistorico.
  4. Executando a Manutenção Preventiva de “Compactar e Reparar”:
    • Feche todas as tabelas e consultas abertas no centro da tela.
    • Na faixa de opções superior, clique na guia Ferramentas de Banco de Dados (Database Tools).
    • No primeiro grupo (Ferramentas), clique no botão grande: Compactar e Reparar Banco de Dados (Compact and Repair Database).
    • O Access piscará rapidamente a barra de status inferior enquanto recompacta os índices e desfragmenta os setores do arquivo .accdb.

✅ Resultado Esperado (Prática 2):

A rotina de anexação protege contra duplicações históricas e a ferramenta de compactação reduz o tamanho físico do arquivo em disco, garantindo longevidade ao banco de dados.


📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o banco de dados e feche o Access.
  2. Nomeie o arquivo: FastLog_BD_Cap18_SeuNome_SeuSobrenome.accdb.
  3. Acesse o Microsoft Teams na sua turma.
  4. Abra a tarefa: “Banco de Dados - Cap 18: Criação de Tabelas e Fechamento Mensal”.
  5. Anexe o seu arquivo .accdb e conclua o envio clicando em Entregar (Turn In).

💡 Checkpoint de Gestão & TI

Por que esta rotina de Data Housekeeping é exigida em grandes auditorias de TI? Porque qualquer banco de dados de alta intensidade sem rotina periódica de arquivamento colapsa em 2 ou 3 anos. Saber separar a operação viva do histórico fiscal e dominar a recompactação de arquivos é o que garante que um sistema ERP continue rápido mesmo após uma década de funcionamento contínuo.


🔥 Desafio de Fixação: Automatizando a Opção “Compactar ao Fechar”

O Microsoft Access possui uma configuração nativa inteligente que pode executar a compactação de disco automaticamente toda vez que o usuário fecha o aplicativo, dispensando a necessidade de clicar no botão manualmente.

Ative essa proteção preventiva no seu banco de dados:

  1. Clique no menu superior Arquivo ➔ clique em Opções.
  2. Na barra lateral esquerda da janela que se abre, clique em Banco de Dados Atual (Current Database).
  3. No grupo de opções Opções de Aplicativo, localize e marque a caixinha:
    • ☑ Compactar ao Fechar (Compact on Close).
  4. Clique em OK.
  5. Documente no seu caderno por que essa configuração é vital para terminais de atendimento que processam muitas inclusões e exclusões de registros diários.

🔑 Revelar Gabarito Oficial e Material de Apoio da Aula (Clique para expandir)
💡 Incentivo Pedagógico: Tente resolver as práticas e o desafio de fixação por conta própria antes de abrir o gabarito. Seus erros e tentativas durante o laboratório são a chave para a consolidação real do aprendizado!

Configuração da Manutenção Automática:

1
2
3
4
5
Caminho: Arquivo -> Opções -> Banco de Dados Atual -> Opções de Aplicativo
Opção Habilitada: [X] Compactar ao Fechar (Compact on Close)

Justificativa Técnica:
Ao habilitar 'Compactar ao Fechar', toda vez que o operador encerra o expediente e fecha o Access, o motor Jet/ACE realiza uma cópia temporária do banco, descarta o espaço em branco deixado por registros excluídos, reindexa todas as árvores B-Tree e substitui o arquivo original pelo arquivo compactado. Isso impede que o arquivo atinja o teto de 2 GB e mantém a inicialização do dia seguinte sempre rápida.

📥 Download dos Scripts desta Aula:
Baixe o arquivo de script Capitulo_18.sql ou o pacote compactado (.zip) com os comandos SQL e esquemas da aula.


📝 Atividade Extra: Questionário de Fixação (Caderno)

Instruções: Responda no caderno, de próprio punho, as 10 perguntas reflexivas abaixo com base no conteúdo deste capítulo. Ao concluir, apresente o caderno ao professor para conferência e visto.

  1. O que é a rotina de Arquivamento Histórico (Data Archiving) e por que ela é indispensável para sistemas de grande porte?
  2. No Cenário Prático da FastLog, qual é o limite máximo de tamanho de arquivo suportado pelo formato .accdb do Microsoft Access?
  3. O que acontece com a velocidade das consultas quando misturamos 4 anos de fretes antigos finalizados com as viagens ativas de hoje?
  4. Qual comando SQL é utilizado para criar uma nova tabela diretamente a partir de uma consulta (Make-Table)?
  5. Qual comando SQL é utilizado para copiar registros em lote para uma tabela que já existe (Append Query)?
  6. O que acontece com o tamanho em megabytes de um arquivo do Access quando apagamos milhares de linhas com o comando DELETE?
  7. Qual é a função da ferramenta Compactar e Reparar Banco de Dados?
  8. Na Prática Obrigatória 2, por que foi utilizada a subconsulta com NOT IN na rotina de anexação?
  9. Onde localizamos a opção para ativar o recurso ☑ Compactar ao Fechar nas opções globais do Access?
  10. No Desafio de Fixação, como a compactação automática ao fechar protege o banco de dados contra o colapso por inchaço (Database Bloat)?