Desenvolvimento #6193
Atualizado por TARCISIO DA ROCHA há 5 dias
<p data-path-to-node="8"><b data-path-to-node="6"><b data-index-in-node="0" data-path-to-node="8">🎯 data-path-to-node="6">🎯 Objetivo:</b> Documentar a arquitetura e os procedimentos técnicos executados para a homologação do ambiente de desenvolvimento do sistema legado Hemovida em uma estação de trabalho moderna com Windows 11. O escopo abrange a superação de incompatibilidades de SO, sistema operacional, upgrade de licenciamento do banco de dados, otimização de I/O em disco (SSD) e, de forma crítica, <b data-index-in-node="337" data-path-to-node="8">a resolução dos conflitos de rede e interdependência simultânea entre SQL Server e Paradox no configuração cirúrgica do middleware de comunicação BDE de 32 bits.</b></p> bits.</p> <p data-path-to-node="9"><b data-path-to-node="7"><b data-index-in-node="0" data-path-to-node="9">🖥️ data-path-to-node="7">🖥️ Arquitetura e Escopo do Ambiente:</b></p> <ul data-path-to-node="10"> data-path-to-node="8"> <li> <p data-path-to-node="10,0,0"><b data-path-to-node="8,0,0"><b data-index-in-node="0" data-path-to-node="10,0,0">Sistema data-path-to-node="8,0,0">Sistema Operacional:</b> Windows 11 Pro / Enterprise (x64).</p> </li> <li> <p data-path-to-node="10,1,0"><b data-path-to-node="8,1,0"><b data-index-in-node="0" data-path-to-node="10,1,0">Motor data-path-to-node="8,1,0">Motor de Banco de Dados:</b> Microsoft SQL Server 2008 R2 (Instância: <code data-index-in-node="66" data-path-to-node="10,1,0">MSSQLSERVER</code>).</p> data-path-to-node="8,1,0">MSSQLSERVER</code>).</p> </li> <li> <p data-path-to-node="10,2,0"><b data-path-to-node="8,2,0"><b data-index-in-node="0" data-path-to-node="10,2,0">Middleware:</b> data-path-to-node="8,2,0">Middleware:</b> BDE Administrator (32-bit).</p> </li> <li> <p data-path-to-node="10,3,0"><b data-path-to-node="8,3,0"><b data-index-in-node="0" data-path-to-node="10,3,0">Volume data-path-to-node="8,3,0">Volume da Base:</b> ~72.5 GB (Banco <code data-index-in-node="32" data-path-to-node="10,3,0">hemovida</code>).</p> data-path-to-node="8,3,0">hemovida</code>).</p> </li> </ul> <h3 data-path-to-node="12"><b data-path-to-node="10"><b data-index-in-node="0" data-path-to-node="12">🧠 data-path-to-node="10">🧠 Justificativas Técnicas e Pré-requisitos:</b></h3> <p data-path-to-node="13"><b data-path-to-node="11"><b data-index-in-node="0" data-path-to-node="13">1. Interdependência Crítica (Paradox vs. SQL Server no BDE):</b> O executável do Hemovida exige comunicação <b data-index-in-node="104" data-path-to-node="13">simultânea</b> com o SQL Server (dados centrais) e com o banco local Paradox (tabelas de apoio). Qualquer gargalo de rede ou bloqueio de arquivo de sessão no Paradox derruba a aplicação inteira.</p> <ul data-path-to-node="14"> <li> <p data-path-to-node="14,0,0"><b data-index-in-node="0" data-path-to-node="14,0,0">Solução:</b> Foi necessário isolar a comunicação do SQL Server para usar memória compartilhada nativa (bypass de rede externa) e configurar permissões estritas para o arquivo de trava do Paradox (<code data-index-in-node="192" data-path-to-node="14,0,0">PDOXUSRS.NET</code>) no diretório raiz do sistema, garantindo a coexistência pacífica de ambos no BDE.</p> </li> </ul> <p data-path-to-node="15"><b data-index-in-node="0" data-path-to-node="15">2. data-path-to-node="11">1. Estratégia de Storage (SSD vs. HDD Convencional):</b> Alocar Devido ao alto volume da base de dados (72,5 GB), alocar os arquivos <code data-index-in-node="69" data-path-to-node="15">.mdf</code> data-index-in-node="122" data-path-to-node="11">.mdf</code> (dados) e <code data-index-in-node="76" data-path-to-node="15">.ldf</code> de 72,5 GB data-index-in-node="137" data-path-to-node="11">.ldf</code> (logs) em um HDD disco rígido mecânico (HDD) ou particionar junto com o SO sistema operacional (C:) causa causaria severos gargalos de IOPS.</p> IOPS (operações de entrada/saída por segundo), resultando em travamentos ("freezes") do Windows durante consultas pesadas ou restaurações.</p> <ul data-path-to-node="16"> data-path-to-node="12"> <li> <p data-path-to-node="16,0,0"><b data-path-to-node="12,0,0"><b data-index-in-node="0" data-path-to-node="16,0,0">Solução:</b> Segregação de I/O. data-path-to-node="12,0,0">Solução:</b> O ambiente foi segregado. O drive <code data-index-in-node="36" data-path-to-node="16,0,0">D:</code> (SSD) data-index-in-node="43" data-path-to-node="12,0,0">C:</code> responde pelo SO, enquanto o drive <code data-index-in-node="81" data-path-to-node="12,0,0">D:</code> (idealmente um SSD SATA/NVMe de alta performance) foi formatado com permissões NTFS exclusivas (<code data-index-in-node="91" data-path-to-node="16,0,0">icacls</code>) data-index-in-node="180" data-path-to-node="12,0,0">icacls</code>) para hospedar unicamente o SQL Server (<code data-index-in-node="138" data-path-to-node="16,0,0">D:\SQLData</code>, data-index-in-node="227" data-path-to-node="12,0,0">D:\SQLData</code>, <code data-index-in-node="150" data-path-to-node="16,0,0">D:\SQLLogs</code>, data-index-in-node="239" data-path-to-node="12,0,0">D:\SQLLogs</code>, <code data-index-in-node="162" data-path-to-node="16,0,0">D:\SQLBackup</code>).</p> data-index-in-node="251" data-path-to-node="12,0,0">D:\SQLBackup</code>).</p> </li> </ul> <p data-path-to-node="17"><b data-path-to-node="13"><b data-index-in-node="0" data-path-to-node="17">3. data-path-to-node="13">2. Dependências de Framework:</b></p> Framework (.NET 3.5 e PowerShell 2.0):</b> O SQL Server 2008 R2 e o BDE são tecnologias legadas que dependem de bibliotecas antigas não ativas por padrão no Windows 11.</p> <ul data-path-to-node="18"> data-path-to-node="14"> <li> <p data-path-to-node="18,0,0"><b data-path-to-node="14,0,0"><b data-index-in-node="0" data-path-to-node="18,0,0">Solução:</b> data-path-to-node="14,0,0">Solução:</b> Habilitação prévia do <b data-index-in-node="31" data-path-to-node="18,0,0">.NET data-path-to-node="14,0,0">.NET Framework 3.5</b> (via Recursos do Windows) e injeção de chaves de registro (Bypass) forçando o a engine do PowerShell a reportar a versão 2.0, permitindo que o instalador do SQL 2008 valide os pré-requisitos no Windows 11.</p> sem falhar.</p> </li> </ul> <h3 data-path-to-node="20"><b data-path-to-node="16"><b data-index-in-node="0" data-path-to-node="20">🚀 data-path-to-node="16">🚀 Procedimentos Executados (Entregáveis):</b></h3> <p data-path-to-node="21"><b data-path-to-node="17"><b data-index-in-node="0" data-path-to-node="21">Fase data-path-to-node="17">Fase 1: Bypass de SO e Instalação do SQL Server</b></p> <ol data-path-to-node="22" data-path-to-node="18" start="1"> <li> <p data-path-to-node="22,0,0"><b data-path-to-node="18,0,0"><b data-index-in-node="0" data-path-to-node="22,0,0">Vacina data-path-to-node="18,0,0">Vacina de Registro:</b> Injeção da chave Executado script PowerShell injetando as chaves <code data-index-in-node="37" data-path-to-node="22,0,0">PowerShellVersion data-index-in-node="68" data-path-to-node="18,0,0">PowerShellVersion = 2.0</code> no Windows 11.</p> em <code data-index-in-node="95" data-path-to-node="18,0,0">HKLM:\SOFTWARE\Microsoft</code> e <code data-index-in-node="122" data-path-to-node="18,0,0">WOW6432Node</code>, contornando o bloqueio de validação do instalador.</p> </li> <li> <p data-path-to-node="22,1,0"><b data-path-to-node="18,1,0"><b data-index-in-node="0" data-path-to-node="22,1,0">Instalação Express e Edition Upgrade:</b> Instalação data-path-to-node="18,1,0">Instalação Core (Express):</b> Realizada a instalação silenciosa do motor SQL Server Express, definindo autenticação em Modo Misto (usuário <code data-index-in-node="83" data-path-to-node="22,1,0">sa</code>) seguida data-index-in-node="136" data-path-to-node="18,1,0">sa</code>).</p> </li> <li> <p data-path-to-node="18,2,0"><b data-index-in-node="0" data-path-to-node="18,2,0">Edition Upgrade (Bypass de Limite):</b> Como a versão Express possui limite físico de 10 GB (incompatível com os 72,5 GB do Hemovida), a ISO da mídia comercial foi montada e o comando de <i data-index-in-node="98" data-path-to-node="22,1,0">Edition data-index-in-node="183" data-path-to-node="18,2,0">Edition Upgrade</i> (ISO comercial montada) foi acionado para elevar a instância à versão <b data-index-in-node="152" data-path-to-node="22,1,0">Standard data-index-in-node="245" data-path-to-node="18,2,0">Standard Edition</b>, destravando o limite físico de 10 GB.</p> armazenamento.</p> </li> </ol> <p data-path-to-node="23"><b data-path-to-node="19"><b data-index-in-node="0" data-path-to-node="23">Fase data-path-to-node="19">Fase 2: Estruturação de Disco Disco, Permissões e Restauração Redirecionada</b></p> Restauração</b></p> <ol data-path-to-node="24" data-path-to-node="20" start="1"> <li> <p data-path-to-node="24,0,0"><b data-path-to-node="20,0,0"><b data-index-in-node="0" data-path-to-node="24,0,0">Permissões data-path-to-node="20,0,0">Permissões NTFS:</b> Aplicação Criação da estrutura no disco <code data-index-in-node="47" data-path-to-node="20,0,0">D:</code> com aplicação de controle total via <code data-index-in-node="49" data-path-to-node="24,0,0">icacls</code> no disco <code data-index-in-node="65" data-path-to-node="24,0,0">D:</code> data-index-in-node="86" data-path-to-node="20,0,0">icacls</code> para as contas <code data-index-in-node="83" data-path-to-node="24,0,0">SYSTEM</code> data-index-in-node="108" data-path-to-node="20,0,0">SYSTEM</code> e <code data-index-in-node="92" data-path-to-node="24,0,0">Administrators</code>.</p> data-index-in-node="117" data-path-to-node="20,0,0">Administrators</code>, garantindo que o serviço do SQL consiga alocar grandes blocos no SSD sem erro de Acesso Negado.</p> </li> <li> <p data-path-to-node="24,1,0"><b data-path-to-node="20,1,0"><b data-index-in-node="0" data-path-to-node="24,1,0">Restore (WITH MOVE):</b> Alteração data-path-to-node="20,1,0">Alteração de Registro:</b> Caminhos <code data-index-in-node="32" data-path-to-node="20,1,0">DefaultData</code> e <code data-index-in-node="46" data-path-to-node="20,1,0">DefaultLog</code> alterados via <code data-index-in-node="71" data-path-to-node="20,1,0">xp_instance_regwrite</code> para apontarem nativamente para o disco <code data-index-in-node="132" data-path-to-node="20,1,0">D:</code>.</p> </li> <li> <p data-path-to-node="20,2,0"><b data-index-in-node="0" data-path-to-node="20,2,0">Restore Redirecionado:</b> Executado o <code data-index-in-node="35" data-path-to-node="24,1,0">xp_instance_regwrite</code> dos caminhos padrão e restauração data-path-to-node="20,2,0">RESTORE DATABASE</code> do arquivo <code data-index-in-node="93" data-path-to-node="24,1,0">.bak</code> gravando os data-index-in-node="63" data-path-to-node="20,2,0">.bak</code> utilizando a cláusula <code data-index-in-node="90" data-path-to-node="20,2,0">WITH MOVE</code>, forçando a gravação física dos 72,5 GB diretamente nas pastas estruturadas no SSD.</p> </li> </ol> <p data-path-to-node="25"><b data-path-to-node="21"><b data-index-in-node="0" data-path-to-node="25">Fase data-path-to-node="21">Fase 3: Limpeza Configurações de Rede Legada (Resolução do Erro 25)</b> <i data-index-in-node="54" data-path-to-node="25">O BDE estava falhando ao tentar usar protocolos TCP/IP forçados por configurações antigas do Windows para se comunicar com o SQL.</i></p> e Firewall</b></p> <ol data-path-to-node="26" data-path-to-node="22" start="1"> <li> <p data-path-to-node="26,0,0">Executado o utilitário data-path-to-node="22,0,0"><b data-index-in-node="0" data-path-to-node="22,0,0">SQL Browser:</b> Ativado e iniciado para permitir a resolução de rede 32-bit via atalho <code data-index-in-node="49" data-path-to-node="26,0,0">Win + R</code>: <code data-index-in-node="58" data-path-to-node="26,0,0">C:\Windows\SysWOW64\cliconfg.exe</code>.</p> instâncias na rede.</p> </li> <li> <p data-path-to-node="26,1,0">Na aba data-path-to-node="22,1,0"><b data-index-in-node="0" data-path-to-node="22,1,0">Liberação de Tráfego:</b> Criadas regras Inbound no Firewall do Windows 11 para as portas <b data-index-in-node="7" data-path-to-node="26,1,0">Alias</b>, foi realizada a data-index-in-node="86" data-path-to-node="22,1,0">TCP 1433</b> (SQL Engine) e <b data-index-in-node="30" data-path-to-node="26,1,0">remoção completa</b> data-index-in-node="110" data-path-to-node="22,1,0">UDP 1434</b> (SQL Browser).</p> </li> <li> <p data-path-to-node="22,2,0"><b data-index-in-node="0" data-path-to-node="22,2,0">Limpeza de qualquer apontamento manual (ex: Aliases TCP/IP:</b> Executado o utilitário <code data-index-in-node="83" data-path-to-node="26,1,0">DEV-ROCHA</code>). Essa limpeza foi essencial data-index-in-node="50" data-path-to-node="22,2,0">cliconfg.exe</code> (SysWOW64) para forçar o BDE a ignorar regras conflitantes remover aliases manuais antigos de TCP/IP e passar rede, forçando a aplicação a utilizar o atalho nativo atalhos de memória compartilhada do Windows 11.</p> local para evitar <code data-index-in-node="203" data-path-to-node="22,2,0">Timeouts</code>.</p> </li> </ol> <p data-path-to-node="27"><b data-path-to-node="23"><b data-index-in-node="0" data-path-to-node="27">Fase data-path-to-node="23">Fase 4: Middleware BDE (Harmonizando SQL e Paradox)</b></p> Compatibilidade Legada (BDE)</b></p> <ol data-path-to-node="28" data-path-to-node="24" start="1"> <li> <p data-path-to-node="28,0,0"><b data-path-to-node="24,0,0"><b data-index-in-node="0" data-path-to-node="28,0,0">Vendor data-path-to-node="24,0,0">Vendor Init Bypass (Erro (BDE Error 15879):</b> Limpeza mandatória do campo <code data-index-in-node="61" data-path-to-node="28,0,0">VENDOR data-index-in-node="66" data-path-to-node="24,0,0">VENDOR INIT</code> na configuração do driver MSSQL nativo no BDE, BDE Administrator, evitando crash de alocação de DLLs de rede no Windows 11.</p> </li> <li> <p data-path-to-node="28,1,0"><b data-path-to-node="24,1,0"><b data-index-in-node="0" data-path-to-node="28,1,0">Alias data-path-to-node="24,1,0">Alias SQL (<code data-index-in-node="11" data-path-to-node="28,1,0">hemoloc</code>):</b> (hemoloc):</b> Configurado o <i data-index-in-node="35" data-path-to-node="28,1,0">Server Name</i> Server Name exclusivamente com um ponto final (<code data-index-in-node="82" data-path-to-node="28,1,0">.</code>). Juntamente data-path-to-node="24,1,0">.</code>), garantindo o bypass da rede TCP/IP e usando comunicação direta com a limpeza do <code data-index-in-node="114" data-path-to-node="28,1,0">cliconfg.exe</code>, isso garantiu a comunicação interna perfeita.</p> instância local.</p> </li> <li> <p data-path-to-node="28,2,0"><b data-path-to-node="24,2,0"><b data-index-in-node="0" data-path-to-node="28,2,0">Alias data-path-to-node="24,2,0">Alias Paradox (<code data-index-in-node="15" data-path-to-node="28,2,0">sht</code>):</b> (sht):</b> Parametrizado o <code data-index-in-node="37" data-path-to-node="28,2,0">NET data-path-to-node="24,2,0">NET DIR</code> estritamente para a raiz do disco principal (<code data-index-in-node="90" data-path-to-node="28,2,0">C:\</code>). Essa alteração garantiu data-index-in-node="67" data-path-to-node="24,2,0">C:\</code>), assegurando a criação correta e as permissões de leitura/escrita gravação do arquivo de trava <code data-index-in-node="193" data-path-to-node="28,2,0">PDOXUSRS.NET</code>, fundamental para que as tabelas locais funcionem junto com as do SQL.</p> de sessão (<code data-index-in-node="135" data-path-to-node="24,2,0">PDOXUSRS.NET</code>).</p> </li> </ol> <p data-path-to-node="29"><b data-path-to-node="25"><b data-index-in-node="0" data-path-to-node="29">✅ data-path-to-node="25">✅ Status Atual:</b> As travas de interdependência foram superadas. O ambiente de desenvolvimento local foi provisionado com sucesso. O executável <code data-index-in-node="142" data-path-to-node="29">Hemovida.exe</code> data-index-in-node="95" data-path-to-node="25">Hemovida.exe</code> consegue operar o banco Paradox e a base SQL simultaneamente, se comunicar de forma estável com as bases SQL e Paradox simultaneamente, pronto para atualizações.</p> receber atualizações de código.</p>