Skip to content

About

Desktop app em Python (CustomTkinter) para inspecionar e extrair dados de backups (.BAK) do SQL Server para Excel/CSV com prevencao de Erro 5 NTFS e gerador de templates.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

Repository files navigation

SQL Backup Extractor & Model Generator ⚡

Python 3.10+ CustomTkinter SQL Server openpyxl & pandas MIT License Windows


📌 Visão Geral

O SQL Backup Extractor & Model Generator é uma aplicação desktop desenvolvida em Python para simplificar e acelerar drasticamente o fluxo de trabalho de desenvolvedores, DBAs e analistas de dados que precisam inspecionar, exportar dados ou gerar modelos de carga a partir de bancos de dados locais ou arquivos de backup (.BAK) do Microsoft SQL Server.

Quantas vezes você recebeu um arquivo .BAK de vários gigabytes e precisou abrir o SQL Server Management Studio (SSMS), lidar com caminhos absolutos incompatíveis da máquina de origem, erros de permissão NTFS (Operating System Error 5) e configurar comandos manuais de RESTORE WITH MOVE apenas para consultar ou exportar uma tabela para Excel?

Este projeto resolve essa dor através de uma interface moderna e minimalista (Dark & Gold), automação de restaurações isoladas em segundo plano e motores de exportação robustos com sanitização de tipos de dados.


🚀 Principais Recursos

1. Restauração Transparente em Sandbox Isolado

  • Leitura Inteligente dos Metadados (RESTORE FILELISTONLY): Inspeciona a estrutura interna de arquivos lógicos do .BAK antes da restauração.
  • Prevenção do Erro NTFS 5 (Operating System Error 5): Descobre dinamicamente os diretórios padrão de dados (DATA) e logs (LOG) da instância do SQL Server local e aplica WITH MOVE automaticamente, evitando conflitos com caminhos do servidor de origem.
  • Banco Temporário Isolado: Restaura o backup sob um identificador temporário seguro (_TEMP_EXTRACT_YYYYMMDD_HHMMSS), preservando bancos de produção.
  • Descarte em 1 Clique: Botão dedicado na interface para desvincular conexões ativas (ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE) e dropar o banco temporário quando a análise terminar.

2. Autenticação Dupla Flexível

  • Windows Authentication: Conexão nativa e transparente integrada ao usuário do Windows (Trusted_Connection=yes).
  • SQL Server Authentication: Suporte a login via usuário explícito (ex: sa) e senha com mascaramento visual.
  • Tratamento Amigável do Erro 262: Diagnóstico automático de falta de privilégio CREATE DATABASE no banco master, orientando o usuário a alternar para a conta sa e focando diretamente no campo de credenciais.

3. Extração Seletiva e Sanitizada para Excel e CSV

  • Exportação para Excel (.xlsx):
    • Estilização visual executiva (cabeçalhos em preto/amarelo ouro #121212 e #F5C518).
    • Sanitização de Caracteres XML: Remoção de caracteres de controle ilegais do padrão XML 1.0 (\x00-\x08, \x0b, \x0c, \x0e-\x1f) que quebram o parser do openpyxl (IllegalCharacterError), preservando quebras de linha (\n) e tabulações (\t).
    • Sanitização de Nomes de Abas: Adequação automática às regras do Excel (substituição de * ? : / \ [ ] e limite estrito de 31 caracteres).
    • Auto-Ajuste Otimizado de Colunas: Amostragem de largura calculada a partir do cabeçalho e das primeiras 100 linhas no DataFrame, garantindo performance instantânea mesmo em tabelas com milhões de registros.
  • Exportação para CSV:
    • Padrão com delimitador ; e codificação utf-8-sig (com BOM) para abertura perfeita e automática no Excel em sistemas operacionais em português.
    • Conversão segura de tipos binários (VARBINARY -> representação hexadecimal 0x...) e UUID/UNIQUEIDENTIFIER.
  • Garantia de Extensão Estrita: Prevenção ativa contra extensões repetidas ou híbridas (ex: .excel.csv ou .xlsx.csv).

4. Gerador de Planilhas Modelo para Importação

  • Gera automaticamente uma planilha .xlsx com a estrutura exata da tabela selecionada:
    • Aba Modelo_Importacao: Linha de cabeçalhos identificando chaves primárias ([PK]), campos auto-incremento ([AUTO]) e obrigatoriedade (*), acompanhada de linha descritiva de tipos e linha com dados de exemplo plausíveis (e-mails, CPFs, datas e números).
    • Aba Instrucoes: Dicionário completo de colunas, documentação de tipos SQL, nulidade, chaves e orientações passo a passo para carga sem falhas.

5. Interface Desktop Moderna (CustomTkinter)

  • Arquitetura limpa sem abas confusas e sem consoles de log poluentes.
  • Sidebar Dinâmica (280px): Alternador intuitivo entre Bancos do Servidor e Arquivo .BAK, gerenciamento de credenciais SQL e ações de limpeza.
  • Área Principal: Filtro de busca de tabelas em tempo real, seleção em lote (Marcar Todas / Desmarcar Todas) e contador ao vivo de linhas.
  • Feedback Não Bloqueante: Todas as rotinas pesadas (restauração, leitura e exportação) executadas em threads paralelas em segundo plano com barra de progresso animada e mensagens de status.

🛠️ Stack Tecnológica

Componente Tecnologia Finalidade
Linguagem Python 3.10+ Núcleo do sistema
Interface Gráfica CustomTkinter UI desktop moderna em tema escuro
Banco de Dados pyodbc Driver nativo ODBC para SQL Server 2014, 2016, 2019, 2022+
Manipulação de Dados pandas Extração estruturada e sanitização de dataframes
Planilhas Excel openpyxl Criação, formatação e estilização de planilhas .xlsx

📂 Estrutura do Projeto

sql-backup-extractor/
├── main.py              # Interface gráfica principal e controladores de eventos
├── sql_manager.py       # Gerenciador de conexões, ODBC, restore WITH MOVE e queries
├── exporter.py          # Motores de exportação Excel/CSV e gerador de templates
├── run.bat              # Script de inicialização com setup automático de virtualenv
├── requirements.txt     # Dependências do projeto
├── README.md            # Documentação técnica completa
├── LINKEDIN_POST.md     # Copywriting para divulgação profissional
└── tests/
    ├── test_sql_manager.py  # Testes de drivers, queries e sanitização de dados
    ├── test_exporter.py     # Testes de CSV, Excel, XML clean, sheet name e templates
    └── test_main_ui.py      # Testes headless de inicialização e componentes da UI

⚡ Como Executar

Pré-requisitos

  1. Windows 10 ou 11.
  2. Microsoft SQL Server instalado localmente (qualquer edição: Express, Developer ou Standard).
  3. Microsoft ODBC Driver for SQL Server (Driver 17, Driver 18 ou SQL Server padrão).
  4. Python 3.10 ou superior.

Opção 1: Inicialização Automática via run.bat (Recomendado)

O projeto acompanha um script inteligente que verifica a presença do Python, cria o ambiente virtual isolado (.venv), instala ou atualiza as dependências necessárias e executa o software:

  1. Dê um duplo clique no arquivo:
    run.bat
  2. O sistema inicializará pronto para uso!

Opção 2: Execução Manual

  1. Clone o repositório:

    git clone https://github.com/PedroH2M/sql-backup-extractor.git
    cd sql-backup-extractor
  2. Crie e ative o ambiente virtual:

    python -m venv .venv
    .\.venv\Scripts\Activate.ps1
  3. Instale as dependências:

    pip install -r requirements.txt
  4. Inicie a aplicação:

    python main.py

🧪 Suíte de Testes Automatizados

O projeto conta com mais de 20 testes unitários automatizados cobrindo sanitização de caracteres proibidos em XML, isolamento de restore, detecção de drivers ODBC e componentes da UI:

.\.venv\Scripts\python.exe -m unittest discover -s tests -t .

Saída esperada:

.....................
----------------------------------------------------------------------
Ran 21 tests in 1.135s

OK

🤝 Contribuições

Contribuições, sugestões e correções são bem-vindas!

  1. Faça um Fork do projeto
  2. Crie uma branch para sua funcionalidade (git checkout -b feature/nova-funcionalidade)
  3. Faça o commit de suas alterações (git commit -m 'feat: adiciona nova funcionalidade')
  4. Faça o push para a branch (git push origin feature/nova-funcionalidade)
  5. Abra um Pull Request

📄 Licença

Este projeto é distribuído sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.


Desenvolvido por Pedro Miguel
Conecte-se comigo no LinkedIn | GitHub: @PedroH2M

About

Desktop app em Python (CustomTkinter) para inspecionar e extrair dados de backups (.BAK) do SQL Server para Excel/CSV com prevencao de Erro 5 NTFS e gerador de templates.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages