Conceito
A Redução de Base tem por objetivo reduzir o espaço ocupado em disco utilizado pela base de dados, removendo todos os registros de movimentação anteriores a uma determinada data de expurgo informada. O processo de expurgo é aplicado sobre as tabelas fiscais, tabelas de estoques,tabelas financeiras (com exceção das contas a receber pendentes, das quais não serão removidas) e tabelas diversas.
Esse processo visa o aumento da performance e desempenho do sistema.
Restrições
O procedimento de Redução de Base está disponível apenas para o sistema operacional Linux.
Pré-requisito
Para iniciar a Redução de Base no sistema, será necessário solicitar a chave de acesso com a equipe de P&D da Linx com Rodrigo Heinzen através do e-mail [email protected] e com Edson Luiz Bobello através do e-mail [email protected], informando o CNPJ da empresa e a data em que será realizada a redução de base.
Procedimentos Pré-Redução
Para que a Redução de Base ocorra de forma efetiva e segura, antes de inciar o procedimento será necessário:
- Encerrar todas as conexões ativas com a base de dados e finalizar todos os processos ativos como a sincronia, o processador de lotes, o concentrador e demais integrações de terceiros, por exemplo;
- Bloquear o acesso a base de dados em todas as estações com exceção da estação onde será realizada a redução;
- Realizar uma cópia de segurança (backup/dump) da base de dados. Esta será a única forma de recuperar os dados caso ocorra algum imprevisto no processo de redução;
- Criar uma nova base de dados e restaurar a cópia de segurança nela, utilizando a mesma apenas para consultas.
Procedimentos
Após cumpridas as premissas do tópico anterior, execute as etapas a seguir:
- Iniciar o processo de redução de dados pelo comando: as_manutencao --data-purge;
- Informar o nome do usuário (somente super usuários do sistema tem permissão de acesso a rotina) e senha do usuário, a chave de acesso solicitada previamente a Linx e a data de expurgo (a data deve ser posterior a data do último expurgo realizado e superior a 90 dias) que será usada como referência para exclusão dos dados;
- Opcionalmente será solicitada uma confirmação para registrar um inventário de estoque dos produtos;
- Confirmar o processo e aguardar a conclusão.
Abaixo um print de exemplo:
Ao iniciar, a rotina primeiro irá procurar as tabelas que não foram criadas pela manutenção do sistema, e as mesmas serão excluídas sem confirmação. Depois o inventário de estoque de produtos é registrado na tabela lancto utilizando a data de expurgo, caso o usuário tenha confirmado o registro do mesmo. Lembrando que nenhum registro é gerado na tabela lancto_flow, pois esse inventário não pode ser sincronizado para as demais empresas da rede.
Após o registro do inventário, a rotina percorre uma lista de tabelas, onde será criada uma nova tabela apenas com os registros que permanecerão de acordo com a data de expurgo informada, em seguida a tabela original é excluída e a tabela recém criada é renomeada para o nome da tabela original, é executada uma manutenção apenas na tabela processada, para redefinir os atributos das colunas, e recriar a chave primária, os indices secundários e as triggers.
Essa lista de tabelas está agrupada em blocos, ou seja, as tabela fiscais (cupom, reducao_z, nota_fiscal, nfe...) compõem o primeiro bloco, depois as tabelas de estoque (lancto, estoque_produto, estoque_valor...), em seguida as tabelas do financeiro (movto, caixa, boleto, cheque...) e por último as tabelas diversas (orcamento, pedido_compra, comanda_historico, usuario_log...). Em cada bloco há tabelas de referência também chamadas de pais e tabelas dependentes também chamadas de filhas porque tem dependência de uma tabela pai, devido a ausência de um campo de data.
Exemplo de expurgo da tabela cupom (tabela pai):
>> CREATE TABLE cupom_purge AS SELECT * FROM cupom WHERE data_movto>='yyyy-mm-dd';
>> DROP TABLE cupom CASCADE;
>> ALTER TABLE cupom_purge RENAME TO cupom;
Exemplo de expurgo da tabela cupom_produto (tabela filha):
>> CREATE TABLE cupom_produto_purge AS SELECT DISTINCT c.* FROM cupom_produto c JOIN cupom p ON (c.cupom=p.grid);
>> DROP TABLE cupom_produto CASCADE;
>> ALTER TABLE cupom_produto_purge RENAME TO cupom_produto;
Todas as tabelas utilizarão a data de expurgo informada como referência, com exceção das tabelas nfe_xml e nfe_danfe onde vão permanecer apenas os registros dos últimos 180 dias (6 meses) se a data de expurgo for igual ou superior a 180 dias, caso contrário essas tabelas também utilizarão a data de expurgo como referência.
O commit ocorre ao processar cada tabela, e a evolução do processo é gravado na tabela data_purge que também registra a data de expurgo, a data/hora de início e término do processo, o tamanho inicial e final ocupado pela base de dados, o usuário e a estação onde está sendo executada a redução. Caso ocorra algum erro durante o processo, será apresentada uma mensagem de erro e a rotina é encerrada para ajuste do problema, ao reiniciar o processo a rotina inicia do ponto em que foi encerrada.
Após processar todas as tabelas é executada uma manutenção geral na base de dados. Para maiores detalhes o arquivo de log as_datapurge.log deve ser consultado.
Procedimentos Pós Redução
Após concluído o procedimento de Redução de Base, é necessário liberar o acesso à base de dados em todas as demais estações. De forma opcional, antes de reiniciar a sincronia, as caixas de e-mail da sincronia ou as pastas de sincronia do FTP podem ser limpas, agilizando dessa forma, o processamento da mesma.
Após concluídos as etapas anteriores, reinicie os processos de sincronia, processador de lotes, concentrador e demais integrações de terceiros.
Validações e Conferências
É possível realizar conferências entre a base expurgada e a base restaurada emitindo os seguintes relatórios:
- Gerencial/ Estoque > Relatórios > Posições de Estoque > Posição de Estoque
- Gerencial/ Financeiro > Relatórios > Contas a Receber > Extrato de Contas a Receber
- Gerencial/ Financeiro > Relatórios > Contas a Receber > Extrato de Notas e Faturas
- Gerencial/ Financeiro > Relatórios > Controles Bancários > Gerência de cheque troco
- Gerencial/ Financeiro > Relatórios > Controles Bancários > Posição geral de cheques
Poderá ser necessário a criação e adição de motivos de acerto de saldo, já que o sistema irá excluir todas as movimentações das contas. Isso deve ser realizado pelo cliente pois não há como o sistema gerar isso de forma automática.
As contas a receber pendentes que serão mantidas na base de dados, não incluem cartões (crédito e débito).
Redução aplicada em Base Exemplo
As informações contidas a seguir foram coletadas a partir de uma base exemplo e servem para consulta acerca dos dados de base e tempos de expurgos:
- Base com registros de movimentação desde 2005;
- Tamanho inicial ocupado pela base de dados 743 GB;
- Data base de expurgo utilizada 01/01/2016;
- Tamanho final ocupado pela base de dados 275 GB;
- Tempo de processamento do expurgo 6 horas e 53 minutos;
O tempo para conclusão do processo de redução depende basicamente do tamanho da base e da performance do processador e do disco rígido do servidor. Com base nisso não é possível estimar um tempo aproximado para conclusão do processo e a recomendação é que a redução seja executada no fim de semana.