Migração Protheus+Oracle para Protheus+Postgres

Bom dia. Estamos efetuando um testa para mudança de banco de dados, oracle para postgres. Ao acessar o sistema, efetuar alguma vendas tudo funciona perfeitamente, mas vamos tentar fazer uma viradade de versão 25 para 27, ai começou o problema, o postgres começou a apresentar o erro "Out of memory while reading tuples", e este erro somente acontece na consulta via dbaccess, se consulta via qualquer outro client, pgsql, e mesmo o odbc no linux eu consigo retornar qualquer dado, mesmo fazendo um select full nas tabelas.

Alguem já passou por isso ou conheço este problema?

Já tentei a paginação via ODBC - não funcionou Limitar o fetch no ODBC - não funcionou Aumentei o locks do postgres - não funcionou

Error log gerado:

THREAD ERROR ([13928], Administrator, SRV-PROT-COMAND) 26/03/2021 12:25:17 : Error : 4 (HY001) (RC=-1) - Out of memory while reading tuples.; memory allocation error??? ( From tPostgresConnection::GetQueryFile ) Thread ID [1918] User [Administrator] IO [2532] Tables [22] MaxTables [42] Comment [] SP [ ] Traced [No] SQLReplay [No] InTran [No] DBEnv [POSTGRES/COMANDO] DBThread [(ID 2235)] Started [26/03/2021 12:23:19] IP [192.168.0.205:60000] IDLE [ ] InTransact [ ] Memory [0] Running [ROPQUERY for 0 s.] RCV [194413271] SND [1025276] TCBuild [20200606-20201110] TCVersion [20.1.1.2] ARCH [64] OS [LINUX] BUILD [RELEASE]SELECT PAT.*,COALESCE(NEWSX.R_E_C_N_O,0) as NEWRECNO FROM SX3 PAT LEFT JOIN SX3010 NEWSX ON PAT.X3CAMPO=NEWSX.X3_CAMPO AND NEWSX.D_E_L_E_T=' ' AND PAT.DE_L_E_T=' ' ORDER BY PAT.X3_ARQUIVO,PAT.X3_ORDEM on UPDSX3UPD(APUPD030.PRW) 17/02/2021 17:06:01 line : 8712

[TOTVS build: 7.00.191205P-20210114] Called from UPDSX3MULT(APUPD030.PRW) 17/02/2021 17:06:01 line : 8359 Called from UPDSX3(APUPD030.PRW) 17/02/2021 17:06:01 line : 7896 Called from _UPDUPDATE(APUPD030.PRW) 17/02/2021 17:06:01 line : 553 Called from UPDUPDATE(APUPD030.PRW) 17/02/2021 17:06:01 line : 55 Called from { ||(OWIZARD:OCANCEL:DISABLE(),OWIZARD:OCANCEL:HIDE(),OWIZARD:ONEXT:DISABLE(),OWIZARD:OBACK:DISABLE(),IF(!LUPDATEPACK,UPDUPDATE(CPREFDICT,CPREFHELP,ASIZESTATS,ALISTGRP),UPDPACK(OLISTPACK,OWIZARD,OWIZARD:NPANEL,OAPPLY)),EVAL(OWIZARD:ONEXT:BACTION))}(UPDDISTR.PRW) 17/02/2021 17:06:01 line : 687 Called from { || IF(EVAL(SELF:ACBVALID[SELF:NPANEL,2]),(SELF:NPANEL+=1,SELF:NAVIGATOR(2),EVAL(SELF:ACBEXECUTE[SELF:NPANEL])),)}(APWIZARD.PRW) 17/02/2021 17:06:11 line : 236 Called from ::MSDIALOG:ACTIVATE Called from FWDIALOGMODAL:ACTIVATE(FWDIALOGMODAL.PRW) 17/02/2021 17:06:00 line : 462 Called from APWIZARD:ACTIVATE(APWIZARD.PRW) 17/02/2021 17:06:11 line : 328 Called from APUPDATE(UPDDISTR.PRW) 17/02/2021 17:06:01 line : 756 Called from { || ( OAPP:LFLAT:= .F. , APUPDATE(PARAMETER01), FINAL(FWI18NLANG("UPDDISTR","STR0500",196)) )}(UPDDISTR.PRW) 17/02/2021 17:06:01 line : 71 Called from { || ODESKTOP:ACTIVATE(), ODESKTOP:HIDELOGIN(), ( OAPP:OMSGBAR := ODESKTOP:GETMSGBAR() ), SELF:ADDMSGITEM(), EVAL(SELF:BMAININIT,ODESKTOP)}(FWAPP.PRW) 17/02/2021 17:06:11 line : 701 Called from ::TWINDOW:ACTIVATE Called from MSAPP:ACTIVATE(FWAPP.PRW) 17/02/2021 17:06:11 line : 757 Called from UPDDISTR(UPDDISTR.PRW) 17/02/2021 17:06:01 line : 76

Sistema Operacional:

Linux suporte 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Memoria - 64GB

Postgres - 13

ODBC - unixODBC

Agradeço qualquer ajuda.

Obrigado.

Dr. nunca usei esse banco, mas estranho esse erro que ele retorna, “Out of memory while reading tuples”, ele informa que não consegue acessar, por que não tem memória suficiente para ler um registro.
Já verificou o tamanhos em MB que as tabelas do Postgres suporta e quantidade de registros. Por que toda banco tem essas limitações. Pode ser que esteja ocorrendo isso. Tomara que não…
Ou outra opção também é verificar a capacidade do DBAcess, sem tem um limite de dados…

Boa tarde Clodoaldo.
O banco não tem limitações, qualquer coisa realizada onde eu não utilizo o odbc funciona perfeitamente, inclusive eu fiz a importação utilizando o dbtools da totvs e com qualquer quantidade de processo e rodou sem problemas nenhum, mas quando vou fazer a virada de versão é apresentado este erro. Ate agora não consegui resolver o problema.

Bom dia.

Após muita pesquisa e tentativas e erros, cheguei a solução do problema.

Para tirar a dúvida da máquina e do banco alegado pela TOTVS:

1 - Instalação e configuração do banco com alguns ajustes.

2 - Instalação de uma outra maquina para migração ( esta outra maquina é para evitar concorrencia em memoria/processamento etc)

3 - Download do dbtools e configurações em geral

4 - Migrei a base 5x e com diferentes tipos de parametros, alterei as configurações manualmente em ate 5mil processos para testes, pois pela interface deixa somente até 16 processos (tabelas) e tudo funcionou perfeitamente.

5 - Diversas conexões por outros clientes ao banco.

6 - Maquina e banco com stress de 10 dias de processamentos e I/O.

7 - Conclusão - Maquina e banco - OK


Intalação e configuração do dbaccess/odbc, video antigo, mas ajuda

https://www.youtube.com/watch?v=c67K4KjvFyk


Problema na instalação do Protheus ou problema na documentação, pois não há nada no tdn

Na instalação do Protheus é criado no arquivo appserver.ini 2 chaves (DbDNSServer, DbODBCDriver), havia notado estas chaves, mas deixei pois não estava gerando erro na aplicação, mas quando tentei simular a virada comecou o problema.

DbDNSServer

DbODBCDriver

Comentei uma por vez e a aplicação não conectava, quando retirei as 2 chaves o acesso voltou ao normal e foi possivel continuar a migração.


Segue abaixo as configurações que estou testando agora

cat /usr/local/unixODBC/etc/odbcinst.ini

[ODBC]Trace=noTraceFile=/tmp/tracefileodbcinst.logPooling=Yes

[PostgreSQL_ANSI]Description=PostgreSQL ODBC driver (ANSI version)Driver=/usr/lib/x86_64-linux-gnu/odbc/psqlodbca.soSetup=/usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.soDebug=0UsageCount=1FileUsage = 1DontDLClose = 1CPTimeout = 1000CPTimeToLive = 100Threading = 2Pooling = Yes

cat /usr/local/unixODBC/etc/odb.ini

[comando]Description=PostgreSQL-ComandoDriver=PostgreSQL_ANSIUsername=testePassword=testeServername=127.0.0.1Database=testePort=5432ReadOnly=0Protocol=7.4+ShowOidColumn=0FakeOidIndex=0RowVersioning=0ShowSystemTables=0Fetch=1000BoolsAsChar=1ConnSettings=UseDeclareFetch=0UseServerSidePrepare=1UniqueIndex=1UnknownSizes=2TextAsLongVarchar=1MaxLongVarcharSize=2000LFConversion=1

PostgreSQL 13.2 não esta homologado no portal da Totvs no momento, mas resolvi testar, pois tem novos recurso no proprio db.

Site para um tunning rapido: https://pgtune.leopard.in.ua/#/

[General]Port=7890ODBC30=1ODBCConnectionPool=1#Mode=master#MirrorServer=127.0.0.1#MirrorPort=7900#LicenseServer=127.0.0.1#LicensePort=5555AuditLog=0AuditServer=0AuditPort=0AuditLevel=0AuditAll=0ByYouProc=0AuditSqlExec=0AuditProcExec=0AuditThreadComment=0AuditERPUserName=0ThreadInfo=1LogFull=0GlbPRofiler=0ThreadMin=300ThreadMax=2000ThreadInc=50ConsoleLog=1consoleFile=/tmp/dbaccess_dbconsole.logConsoleMaxSize=1024000AuditSingleThread=0TraceIndex=0DBWarnings=0CheckDeadLock=1UseLargeRecno=1maxStringSize=50ShowAllErrors=0#StringType=varchar#TrimRightSpace=1

[POSTGRES/comando]user=testepassword=????????TableSpace=tablespace_dadosIndexSpace=tablespace_indiceCodepage=LATIN1

[POSTGRES]environments=comandoClientLibrary=/usr/lib/x86_64-linux-gnu/libodbc.so.1

Boa tarde! Desculpa não entendi, conseguiu solucionar o problema ?

Boa tarde! sim, era os parametros DbDNSServer, DbODBCDriver.