Postagem em destaque
- Gerar link
- X
- Outros aplicativos
BlackTDN :: TSS, PostGreSQL e dbAccess Error -35
Davi Cunha, de Recife, enviou-nos a seguinte mensagem:
“…segue uma breve explicação do estado em que estamos com o erro do TSS. O servidor está configurado e até enviando NF-e, porém, em determinado momento, o mesmo apresenta no modo console um erro (Erro -35) intermitente de comunicação com o Banco de Dados TSS. Percebi que isso começou a acontecer logo após a configuração dos certificados digitais de mais de uma empresa. Este erro faz com que o envio em determinadas notas, se prolongue mais que o esperado. Segue o link abaixo com um pequeno vídeo que salvei do momento inicial ao qual subo o serviço do TSS. …” |
O Erro –35, segundo o TDN (Lista dos códigos de erros do TOTVS DBAccess), corresponde a:
-35 TCF_NoDBConnection O database não pode ser acessado. |
E esse erro nem sempre está relacionado ao Protheus, ao TSS ou ao dbAccess mas sim ao DBMS/SGBD. No Caso em questão ao PostGreSQL que não estava permitindo, ao dbAccess efetuar novas conexões.
Solicitamos que verificasse a “diretiva” max_connections no arquivo postgresql.conf (que no caso estava definida como 100) pois ali estava a, provável, causa do Error –35. As conexões deveriam ter atingido o máximo permitido/configurado. Solicitamos que efetuasse o monitoramento das conexões ao PostGreSQL para identificar isso e, considerando que o DBMS estava instalado no Linux, recomendamos seguir as instruções do Link: Definindo a quantidade de conexões simultâneas no PostgreSQL e, consequentemente, aumentar o número máximo de conexões definidos em max_connections de acordo com a demanda.
Recomendamos a leitura de:
Para identificar as implicações na alteração da “diretiva” max_connections em relação às demais diretivas, como por exemplo: SHMMAX e shared_buffers.
Abaixo disponibilizamos um código em ADVPL para testar o limite de Conexões permitidas pelo DBMS/SGBD:
Interessado no original, clique aqui ou aqui.
Obs.: Atente-se às seguintes “Definições”:
#IFDEF __NALDO_PC #DEFINE TC_MAXCONNECTION 10000 |
São a partir delas que os testes são efetuados. Altere-as conforme a necessidade.
Eis o código:
1: #IFDEF __NALDO_PC
2: #DEFINE TC_DBMS "MSSQL/RNP"
3: #DEFINE TC_PORT 7890
4: #DEFINE TC_SERVER "127.0.0.1"
5: #ELSE
6: #DEFINE TC_DBMS "POSTGRES/TSS"
7: #DEFINE TC_PORT 7890
8: #DEFINE TC_SERVER "192.168.1.5"
9: #ENDIF
10:
11: #DEFINE TC_MAXCONNECTION 10000
12:
13: /*
14: Programa : TCError35()
15: Autor : Marinaldo de Jesus [http://www.blacktdn.com.br]
16: Data : 15/06/2011
17: Uso : Testar Limite de Conexoes ao DBMS
18: */
19: User Function TCError35()
20:
21: Local aTCConnection := Array(0)
22:
23: Local bError := { |e| oError := e , BREAK(e) }
24: Local bErrorBlock := ErrorBlock( bError )
25:
26: Local cDescription
27:
28: Local nTCConnection := 0
29: Local nMaxConnection := 0
30:
31: Local oError
32:
33: BEGIN SEQUENCE
34:
35: While ( ++nMaxConnection <= TC_MAXCONNECTION )
36: IF ( KillApp() )
37: UserException( "[PROCNAME]["+ProcName()+"][MESSAGE RECEIVED][KILAPP]")
38: EndIF
39: nTCConnection := TCLink( TC_DBMS , TC_SERVER , TC_PORT )
40: IF ( nTCConnection == -34 ) //TCF_TooManyUsers
41: ConOut( "" )
42: ConOut( "===============================================================" )
43: ConOut( "" , "[TCLINK][TCF_TooManyUsers]["+LTrim(Str(nTCConnection))+"][RECONNECTING...]" , "" )
44: ConOut( "===============================================================" )
45: ConOut( "" )
46: nTCConnection := TCLink( "@!!@" + TC_DBMS , TC_SERVER , TC_PORT )
47: EndIF
48: IF ( nTCConnection == -35 ) //TCF_NoDBConnection
49: UserException( "-35 TCF_NoDBConnection" )
50: EndIF
51: IF ( nTCConnection >= 0 )
52: aAdd( aTCConnection , nTCConnection )
53: ConOut( "" )
54: ConOut( "===============================================================" )
55: ConOut( "" , "[TCLINK]["+LTrim(Str(nTCConnection))+"]" , "" )
56: ConOut( "===============================================================" )
57: ConOut( "" )
58: EndIF
59: End While
60:
61: nTCConnection := Len( aTCConnection )
62:
63: ConOut( "" )
64: ConOut( "===============================================================" )
65: ConOut( " [TC_MAXCONNECTION]["+LTrim(Str(TC_MAXCONNECTION))+"]" )
66: ConOut( " [TENTATIVAS DE CONEXAO]["+LTrim(Str(nMaxConnection))+"]" )
67: ConOut( " [CONEXOES ATIVAS]["+LTrim(Str(nTCConnection))+"]" )
68: ConOut( "===============================================================" )
69: ConOut( "" )
70:
71: aEval( aTCConnection , { |nTCLink| TCUnLink( nTCLink ) } )
72: aSize( aTCConnection , 0 )
73:
74: RECOVER
75:
76: IF ( ValType( oError ) == "O" )
77:
78: cDescription := oError:Description
79: nTCConnection := Len( aTCConnection )
80:
81: ConOut( "" )
82: ConOut( "===============================================================" )
83: IF ( "-35" $ cDescription )
84: ConOut( " [ATENCAO][Excedeu o Numero de Conexoes ao DBMS]" )
85: EndIF
86: ConOut( " [TCWARNING]["+cDescription+"]" )
87: ConOut( " [TC_MAXCONNECTION]["+LTrim(Str(TC_MAXCONNECTION))+"]" )
88: ConOut( " [TENTATIVAS DE CONEXAO]["+LTrim(Str(nMaxConnection))+"]" )
89: ConOut( " [CONEXOES ATIVAS]["+LTrim(Str(nTCConnection))+"]" )
90: ConOut( "===============================================================" )
91: ConOut( "" )
92:
93: EndIF
94:
95: aEval( aTCConnection , { |nTCLink| TCUnLink( nTCLink ) } )
96: aSize( aTCConnection , 0 )
97:
98: END SEQUENCE
99: ErrorBlock( bErrorBlock )
100:
101: Return( NIL )
É correto afirmar que o número de conexões apresentadas por esse exemplo corresponderão, única e tão somente, aos testes efetuados por ele. As conexões reais deverão ser obtidas via dbMonitor ou via gerenciador do DBMS/SGBD. O exemplo foi desenvolvido pressupondo a execução em modo “console” (Protheus) e de exclusividade (DBMS/SGBD).
[]s
иαldσ dj
- Gerar link
- X
- Outros aplicativos
Comentários
Postagens mais visitadas
BlackTDN :: RLeg ~ Desvendando a Função ParamBox
- Gerar link
- X
- Outros aplicativos
Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login
- Gerar link
- X
- Outros aplicativos
Naldo, você poderia me ajudar? Estou precisando colocar algumas url's no TSS para trabalhar com determinado webservice de uma prefeitura de cidade pequena que não é homologado pela Totvs. Você sabe onde configuro estes endereços?
ResponderExcluirAtt,
Henrique