Page 1 of 2

Errores varios en índices CDX

PostPosted: Wed Aug 30, 2017 4:01 pm
by AngelSalom
Buenas amigos!
Tengo un cliente desde hace un par de meses tiene problemas con los índices, con cuelgues del programa. En el hb_out.log se generan estos tres tipos de errores (no en este orden ni siempre los tres) :

Code: Select all  Expand view

Error irrecuperable 9201: hb_cdxPageSeekKey: wrong parent key
Error irrecuperable 9201: hb_cdxPageGetKeyVal: index corrupted.
Error irrecuperable 1010: hb_cdxIndexPageRead: Read index page failed.
 


Un borrado de índices y una regeneración solventan el problema por unos pocos días, pero pronto vuelve a presentarse este problema.
He estado revisando las tablas y la que más trabajan (detalle de albaranes de venta) ahora mismo tiene un tamaño de 2,7GB .

¿Alguna sugerencia o experiencia en estos problemas? No me gustaría tener que forzar una regeneración de índices cada día. :oops: :oops:
Gracias!

Re: Errores varios en índices CDX

PostPosted: Wed Aug 30, 2017 5:36 pm
by karinha
Hola, muestre cómo usted está creando los índices.

Saludos.

Re: Errores varios en índices CDX

PostPosted: Wed Aug 30, 2017 7:00 pm
by carlos vargas
por favor muestra el codigo de creacion de los indices.
ademas indica que compilador usas xharbour o harbour, y que version tienes.
lo puedes saber ejecutando "harbour -version"

salu2
carlos vargas

Re: Errores varios en índices CDX

PostPosted: Wed Aug 30, 2017 7:30 pm
by karinha
Tu MENU principal esta asi?

Code: Select all  Expand view

#Include "FiveWin.ch"

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850

ANNOUNCE RDDSYS
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto
REQUEST DBFCDX, DBFFPT

FUNCTION Main()
 
   SET DATE BRITISH
   SET EPOCH TO 1950
   SET CENTURY ON
   SET SOFTSEEK OFF
   SET WRAP ON
   SETCANCEL( .F. )
   SET CONFIRM OFF
   SET DELETED ON
   SET ESCAPE OFF
   SET EXACT ON
   SET EXCLUSIVE OFF
   SET MULTIPLE OFF

   IF ISEXERUNNING( CFILENAME( HB_ARGV( 0 ) ) )
      __Quit()
   ENDIF

   RDDSETDEFAULT("DBFCDX")

   HB_LANGSELECT( 'PT' )     // Default language is now Portuguese
   HB_SETCODEPAGE( "PT850" )


   /*
   USE BD...
   GO TOP


   BROWSE()
   */


RETURN NIL
 


Saludos.

Re: Errores varios en índices CDX

PostPosted: Wed Aug 30, 2017 8:06 pm
by AngelSalom
Si, en el inicio de la aplicación

Code: Select all  Expand view

  REQUEST DBFCDX
  REQUEST DBFFPT
  RDDSETDEFAULT ("DBFCDX")
  REQUEST HB_Lang_ES
  REQUEST HB_CODEPAGE_ESWIN
  HB_LangSelect("ES")
  HB_CDPSELECT ("ESWIN")

 


Dejo una de las funciones que utilizo para el indexado :

Code: Select all  Expand view

Function Indexa (cAlias,cOrden,cCond,cComo)
/* =====================================================================
   Crea un índice temporal
   
   Parámetros:
                cAlias . Alias que se quiere ordenar
                cOrden . Campo a ordenar el fichero
                cCond  . Condiciones a aplicar para generar el orden
                cComo  . Se le pasa .T. si se quiere ordenadr DESCENDING
               
   Devuelve el nombre del fichero temporal creado                
   ---------------------------------------------------------------------
   Última revisión:06/08/2013 17:05
   Revisado por   :Angel
   =====================================================================
*/
 
       
Local oWnd, nRecs, nFil:=0, cFil:="IND", nSel:=Select()

  Select &cAlias
  Set Index To

  cFil:="temporal.cdx"

  If cComo=NIL
    Index On &cOrden TAG (cOrden) To (cDirTemp+cFil)
  Else
    Index On &cOrden TAG (cOrden) To (cDirTemp+cFil) DESCENDING
  Endif
  (cAlias)->(OrdListAdd (cDirTemp+cFil))
  (cAlias)->(DbSetOrder(1))
  (cAlias)->(DbGoTop())
  Select (nSel)
 
 
Return (cFil)
 


Uso Harbour 3.2.0dev (r1703231115) y Borland 7.0

Re: Errores varios en índices CDX

PostPosted: Thu Aug 31, 2017 10:25 am
by José Vicente Beltrán
Hace tiempo que no tengo ese problema con mis clientes, y es porque al hacer una nueva instalación siempre me aseguro de anular el protocolo SMB de windows en el servidor y cada uno de los terminales existentes, protocolo que precisamente es el que por hacer un bien, ahorrar tiempo, lo que realmente hace es corromper los indices.
Ocurre generalmente cuando el servidor tiene como S.O el Server 2008 o 2012.
Hecho esto, nunca mas el problema en la instalación en cuestión.
Saludos :shock:

Re: Errores varios en índices CDX

PostPosted: Thu Aug 31, 2017 10:34 am
by AngelSalom
José Vicente Beltrán wrote:Hace tiempo que no tengo ese problema con mis clientes, y es porque al hacer una nueva instalación siempre me aseguro de anular el protocolo SMB de windows en el servidor y cada uno de los terminales existentes, protocolo que precisamente es el que por hacer un bien, ahorrar tiempo, lo que realmente hace es corromper los indices.
Ocurre generalmente cuando el servidor tiene como S.O el Server 2008 o 2012.
Hecho esto, nunca mas el problema en la instalación en cuestión.
Saludos :shock:


Vaya! Pues voy a probarlo de inmediato. Efectivamente, el servidor del cliente tiene instalado Server 2008.
Gracias,

Re: Errores varios en índices CDX

PostPosted: Thu Aug 31, 2017 5:59 pm
by karinha
Angel, cambia tu ERRSYSW.PRG para muestrar los errores.

Code: Select all  Expand view

   if Left( ProcName( 7 ), 10 ) == "ERRORDIALO"
      SET RESOURCES TO
      ErrorLevel( 1 )
      QUIT
   endif

   // Incluido em 27/06/2013 By Joao Santos - Sao Paulo - Brasil
   IF UPPER(e:Description)="CORRUPTION DETECTED"         .OR. ;
      UPPER(e:Description)="DETECTADO ÖNDICE CORROMPIDO" .OR. ;
      UPPER(e:Description)="DETECTADO INDICE CORROMPIDO"


      ? "CORRUPTION DETECTED"  // mensageria

      DBCLOSEALL()

      QUIT

   ENDIF

   // Incluido em 26/07/2013 By Joao Santos
   IF UPPER(e:Description) = "LOCK REQUIRED"                              .OR.;
      UPPER(e:Description) = "TRAVAMENTO REQUERIDO"                       .OR.;
      UPPER(e:Description) = "FALHA NO TRAVAMENTO"                        .OR.;
      UPPER(e:Description) = "FALHA NO TRAVAMENTO DO APPEND"              .OR.;
      UPPER(e:Description) = "USO EXCLUSIVO REQUERIDO"                    .OR.;
      UPPER(e:Description) = "Erro DBFCDX/1002 erro ao Abrir"             .OR.;
      UPPER(e:Description) = "Erro DBFCDX/1002 erro Open (DOS Erro 2)"    .OR.;
      UPPER(e:Description) = "Error DBFCDX/1002 Open error"               .OR.;
      UPPER(e:Description) = "Error DBFCDX/1002 Open error (DOS Error 2)" .OR.;
      UPPER(e:Description) = "ERROR BASE/1003 Variable does Not Exist"    .OR.;
      UPPER(e:Description) = "(DOS Error 2) DBFCDX/1002 ERRO DE ABERTURA" .OR.;
      UPPER(e:Description) = "Erro DBFCDX/1001 erro ao Abrir"             .OR.;
      UPPER(e:Description) = "Erro DBFCDX/1001 erro Open (DOS Erro 2)"    .OR.;
      UPPER(e:Description) = "Error DBFCDX/1001 Open error"               .OR.;
      UPPER(e:Description) = "Error DBFCDX/1001 Open error (DOS Error 2)" .OR.;
      UPPER(e:Description) = "(DOS ERROR 2) DBFCDX/1001 ERRO DE ABERTURA" .OR.;
      UPPER(e:Description) = "(DOS ERROR 2) DBFCDX/1001 Open Error"       .OR.;
      UPPER(e:Description) = "Error DBFCDX/1201 WORKAREA NOT INDEXED"     .OR.;
      UPPER(e:Description) = "ERROR DBFCDX/1201 WORKAREA NÇO INDEXADA"    .OR.;
      UPPER(e:Description) = "Error DBFCDX/1012 Corruption detected"      .OR.;
      UPPER(e:Description) = "ERROR DBFCDX/1012 CORRUPTION DETECTED"      .OR.;
      UPPER(e:Description) = "Error DBFCDX/1210 Corruption detected"      .OR.;
      UPPER(e:Description) = "ERROR DBFCDX/1210 CORRUPTION DETECTED"      .OR.;
      UPPER(e:Description) = "(DOS ERROR 64) DBFCDX/1010  ERRO DE LEITURA".OR.;
      UPPER(e:Description) = "(DOS ERROR 64) DBFCDX/1010  READ ERROR"     .OR.;
      UPPER(e:Description) = "(DOS ERROR 87) DBFCDX/1010  ERRO DE LEITURA".OR.;
      UPPER(e:Description) = "(DOS ERROR 87) DBFCDX/1010  READ ERROR"     .OR.;
      UPPER(e:Description) = "(DOS Error 2) DBFCDX/1001 ERRO DE ABERTURA" .OR.;
      UPPER(e:Description) = "Error DBCMD/2001 Workarea nao esta em uso"  .OR.;
      UPPER(e:Description) = "Error DBCMD/2001 Workarea not in use"


      ? [ERROR DE RED]  // Mensageria

   ENDIF

   cErrorLog += "Aplicacao - Instrucoes Para Envio de Email-Leia: DESCRICAO DO ERRO Logo Abaixo:" + CRLF
   cErrorLog += "===============================================================================" + CRLF
   cErrorLog += "   Caminho e Nome: " + GetModuleFileName( GetInstance() )
 


Saludos.

Re: Errores varios en índices CDX

PostPosted: Fri Oct 06, 2017 7:39 am
by Antonio Mart.
Hola Ángel,

¿ Pudiste solucionar el problema ?

Yo tengo corrupcion de indices pero en Terminal Server.

No sé si el SMB afecta cuando se trabaja en Terminal Server.

Algún hint, pls.

Salu2

Re: Errores varios en índices CDX

PostPosted: Fri Oct 06, 2017 7:50 am
by AngelSalom
No, sigo igual :cry: :cry: :cry:

Re: Errores varios en índices CDX

PostPosted: Fri Oct 06, 2017 9:43 am
by Antonio Mart.
Vaya !!

Yo he pedido que miren el antivirus, que tenga excluida la carpeta del programa.


Qué Windows tiene tu cliente ?

Re: Errores varios en índices CDX

PostPosted: Fri Oct 06, 2017 9:49 am
by AngelSalom
Windows Server 2008 R2 ... de momento van trabajando (he programado una tarea que compacte y reindexe por las noches) ... pero no es plan, claro.

Re: Errores varios en índices CDX

PostPosted: Sun Oct 08, 2017 11:09 am
by Carlos Mora
Yo he tenido bastante suerte con dbfcdx de Harbour, sin problemas salvo ocasiones inevitables como apagados repentinos o caídas de la red.
Una pregunta... ¿Como andamos de Commits()?

Hay commits antes del unlock? Es la principal causa de problemas. Sé que a veces se pone más lento el grabado de datos, pero el tiempo que te ahorras lo perderás en reindexar y peor aun, perder la confianza del cliente.

Del manual de Clipper:

http://www.itlnet.net/programming/progr ... 1df26.html

Code: Select all  Expand view

Notes

     .  Network environment: DBCOMMIT() makes database updates visible
        to other processes.  To insure data integrity, issue DBCOMMIT()
        before an UNLOCK operation.  For more information, refer to the
        "Network Programming" chapter in the Programming and Utilities Guide.

 


Un saludo

Re: Errores varios en índices CDX

PostPosted: Mon Oct 09, 2017 5:35 pm
by Antonio Mart.
Gracias Carlos,

He incluido algunos dbCommit() en procesos más sensibles.

Veremos. Si aguanta tres semanas sin romper, creo que podremos decir que hemos tenido exito.

Salu2

Re: Errores varios en índices CDX

PostPosted: Tue Oct 10, 2017 6:59 am
by AngelSalom
Yo he hecho lo mismo, haremos un seguimiento para ver qué tal.