problemas con NHibernate y fallo de alimentacion

24 views
Skip to first unread message

Itxaso Perez

unread,
Mar 1, 2016, 6:17:37 AM3/1/16
to NHibernate-Hispano
Hola chicos,

soy nueva en NHibernate y me pasa que si instalo mi aplicación (SQLite+NHibernate) funciona perfectamente, pero si de repente hay un fallo de alimentación (como puede ocurrir habitualmente en plantas industriales) se corrompe hasta tal punto la BBDD que no me deja ni tan siquiera arrancar la aplicación. Tengo que instalarla en otro directorio, o incluso formatear el disco duro. Es un error que por lo que veo por Internet ha sucedido a mas gente pero solo encuentro soluciones para arreglarlo después de que nos haya pasado, ninguna para evitar que suceda. Trasteando veo por ahi que es interesante en el fichero de configuración añadir la propiedad <property name="connection.release_mode">on_close</property> pero no estoy segura de que esto funcione.
¿Os ha pasado alguna vez? Estoy un poco desesperada...
Mi problema además es que no lo puedo debugear, porque no me deja ni arrancar la aplicacion. Simplemente obtengo The type initializer for 'NHibernate.Cfg.Configuration' threw an exception pero no es muy descriptiva y no estoy segura de que indique cual es el verdadero problema...
mi fichero de configuracion es:

<?xml version="1.0" encoding="utf-8" ?>
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
      <!-- an ISessionFactory instance -->
      <session-factory>
        <!-- properties -->    
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
        <property name="dialect">NHibernate.Dialect.UpdateSQLiteDialect, DMIScaleUtils</property>
        <!-- <property name="connection.connection_string">Data Source=C:\DMI\DMIScale\DMIScale.db;Version=3;New=True;</property> -->
        <property name="connection.connection_string">Data Source=C:\DMI\DMIControl\DMIControl.db;Version=3;New=True;</property>
        <property name="command_timeout">0</property>
       
        <!-- mapping files -->
      </session-factory> 
    </hibernate-configuration>

y trabajo como os digo con SQLite y con Visual Studio 2012. No se si podría ser tambien tema de compatibilidad de drivers.... estoy perdida? Podrias ayudarme por favor?

Muchas gracias!!!

Juan José Montes de Oca Arbós

unread,
Mar 1, 2016, 6:29:58 AM3/1/16
to nhibernat...@googlegroups.com
Hola Itxaso, por lo que contás, entiendo que el problema es (a nivel de software) de la base de datos y no de NHibernate, pero es algo más a nivel de hardware.

--
Juan José Montes de Oca Arbós.

===========================
Web personal: http://juanjose.montesdeocaarbos.com.ar/blog/

--
--
Para escribir al Grupo, hágalo a esta dirección: NHibernat...@googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
---
Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a nhibernate-hisp...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Carlos Peix

unread,
Mar 1, 2016, 7:09:42 AM3/1/16
to nhibernat...@googlegroups.com

Hola,

Software y cortes repentinos de energía no son buenos amigos, definitivamente.

Por otro lado, la inferencia sobre que en ambientes industriales los cortes de energía son inevitables, también es incorrecta en mi experiencia, habiendo trabajado varios años en esos contextos.

Creo que no vas a conseguir una solución confiable en software.

Recomiendo que coloques una UPS en modalidad on-line a esa computadora.

Un saludo!

-----------------------------------
Carlos Peix
(respuesta breve enviada desde dispositivo móvil)

--

Itxaso Perez

unread,
Mar 2, 2016, 6:05:00 AM3/2/16
to NHibernate-Hispano
Gracias chicos!
he conseguido depurar un poco mas el error. Si yo estoy escribiendo en BBDD y derrepende se va la luz, a continuacion no me deja ni arrancar la aplicacion ya que me muestra el siguiente error (que se lanza al hacer un checkdatabase):

NHibernate.Cfg.Configuration

otras veces me pone NHibernate.Cfg.Environment...

el codigo de checkdatabase

 public static void CheckDatabase()
        {
            
            NHibernate.ISession session = SessionProvider.OpenSession();

            try
            {
                if (!SessionProvider.ValidateSchema())
                {
                    SessionProvider.UpdateBD();
                }
            }
            catch
            {
                SessionProvider.UpdateBD();
            }
        }

Me he asegurado de que cada vez que abro una session a posteriori la cierro  (por si era un tema de sesiones)
por otro lado veo que mi BBDD no se corrompe, simplemente se me genera un archivo de SQLite DB Journal. Esto no se me genera cuando cierro la aplicacion de manera normal (sin quitar cable alimentacion)He buscado sobre dicho fichero y veo por Internte lo siguiente:

Además, si la base de datos es configurada con "rollback", puede existir archivos WAL (Write-Ahead Log) o Journal, que permite guardar una copia de seguridad de una página mientras esta se esta modificando y no ha recibido un "commit". 

os dice algo todo lo que os cuento?
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a nhibernate-hispano+unsub...@googlegroups.com.

Carlos Peix

unread,
Mar 2, 2016, 6:24:00 AM3/2/16
to nhibernat...@googlegroups.com

Hola,

Ese error indica que la base de datos queda en un estado inconsistente, es un tipo de corrupción. Nada te asegura que que inutilizada su se va la luz justo cuando escribe el archivo principal.

-----------------------------------
Carlos Peix
(respuesta breve enviada desde dispositivo móvil)

Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a nhibernate-hisp...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
Para escribir al Grupo, hágalo a esta dirección: NHibernat...@googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
---
Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a nhibernate-hisp...@googlegroups.com.

nelopa...@gmail.com

unread,
Mar 3, 2016, 9:22:36 AM3/3/16
to nhibernat...@googlegroups.com
Hola Itxaso, 

Creo que NHibernate está muy lejos del problema que tenés y por lo tanto de la solución que buscás... "NHibernate es solo un ORM"... intentar pensar la solución desde NH creo que es un error..

+1 a la UPS de Carlos
+1 a que uses una motor de base de datos mas potente que SQLite, que tengas un esquema de buckups y hasta quizás en un servidor donde pongas la UPS.

saludos
nelo
Reply all
Reply to author
Forward
0 new messages