Los logs suspendidos (usuarios en LOG SUSPEND) se pueden presentar cuando se cruzan umbrales de última oportunidad en el segmento de log. Esta nota describe cómo recuperarse de un log suspendido, incluyendo un nuevo comando en Adaptive Server Enterprise 11.9.x.
Evite logs suspendidos realizando regularmente copias de respaldo de los logs de transacciones, utilizando el comando dump tran de Sybase. Por favor complemente la información contenida en éste documento con la de los manuales y guías de usuario que acompañan el software Sybase.
La manera de reactivar un log suspendido depende de si es posible agregar espacio suficiente al log de transacciones para que la transacción se complete.
Si usted puede agregar suficiente espacio al log, ejecute la siguiente sentencia alter database y deje que la transacción se ejecute:
1> alter database "mydatabase" log on mydatabaselog
2> go
Si usted sabe que no puede agregar suficiente espacio al log, aborte o mate la tarea y realice un dump del log de transacciones. Cada una de las alternativas tiene sus ventajas:
El matar la tarea le permite mantener el log de transacciones, pero puede tardar más tiempo.
El abortar la transacción es más rápido, pero no conserva el log de transacciones.
Las siguientes secciones describen cómo llevar a cabo éstas tareas.
Reactivar el log matando una tarea
1. Libere el espacio del log de transacciones que está siendo retenido por una transacción grande o antigua:
1. Encuentre el identificador de la tarea (spid) más antigua aún activa:
1> select spid from master..syslogshold
2> where dbid = ID /* El identificador de la
base de datos (dbid) con usuarios LOG SUSPEND */
3> go2.Utilizando el spid del paso anterior, mate la tarea utilizando el comando kill de Sybase. Esto hace que la transacción sea reversada. Este paso puede tomar algún tiempo.
1> kill spid
2> go3. Después de matar la tarea, realice un dump transaction para la base de datos que tenía usuarios con LOG SUSPEND. Usted puede verificar que el comando kill se ejecutó monitoreando un cambio en el campo spid de la tabla master..syslogshold para la base de datos dbid.
2. Ejecute sp_who para verificar que no existen más procesos suspendidos.
1> sp_who
2> go
Examine la salida. Si aún existen usuarios con LOG SUSPEND, repita estos pasos.
Reactivar el log abortando la transacción
1.Conéctese a Adaptive Server Enterprise con isql.
2.Aborte la transacción y trunque el log de transacciones. El comando checkpoint lleva a cabo la cancelación.
1> sp_dboption db_name, "abort tran on log full", true
2> go
1> sp_dboption db_name, "trunc log on chkpt", true
2> go
1> use db_name
2> go
1> checkpoint
2> go
Reactivar un log de transacciones abortando la transacción con el comando lct_admin abort (Adaptive Server Enterprise 11.9.x solamente)
Sybase introdujo un nuevo comando en Adaptive Server Enterprise 11.9.x, lct_admin abort, para dar fin a transacciones suspendidas al comienzo del log.
1.Encuentre el spid de la tarea.
1> select spid from master..syslogshold
2> where dbid = ID /* El identificador de la
base de datos (dbid) con usuarios LOG SUSPEND */
3> go
2. Aborte la transacción. Sólo usuarios con rol SA pueden utilizar lct_admin abort.
1> select lct_admin("abort", spid, dbid)
2> go
Esto da fin y cierra la transacción suspendida.
3. Realice un dump transaction para la base de datos con usuarios en LOG SUSPEND.