Archive for the ‘SQL’ Category

Error 1068 Servicio SQLServer usado por GeneXus

Friday, January 31st, 2014

Error SqlServer GeneXus Fabricio De los Santos

“Todo comenzó…” cuando la versión de GeneXus Tilo aparentemente estaba de huelga y no quiso levantar. Enseguida mi primer sospechoso fue el último Night Build de la versión beta, pero me di cuenta que en realidad el problema estaba en el SQLServer que es usado por GeneXus para Administrar la Base de Conocimientos desde la versión X.

Al verificar los servicios veo que el servicio de SQLServer R2 no estaba levantado. Al intentar levantarlo manualmente me devolvía el siguiente error. El log de los eventos, no me aportaba ningún otro dato adicional.

Error 1068 GeneXus Fabricio De los Santos

Confieso que aquí es donde empecé a preocuparme un poco, por todo el trabajo que se venía si tenía que instalar nuevamente el SQLExpress, levantar backups, etc.

Entonces, repasando que situación podría haber provocado este error, mi segundo sospechoso fue el CCleaner, el cual había usado el día anterior.

El mensaje que mostraba parecía bastante claro “Error 1068: No se puede iniciar el servicio o grupo de dependencias”, entonces  ejecuté “msconfig” y en el tab “General” en vez de “Inicio selectivo” marqué la opción “Inicio normal” para que Windows levante todos los servicios, ya que quizás había deshabilitado algún servicio dependiente por error.

Una vez reiniciado el equipo, el servicio de SQLServer todavía no levantaba. Entonces intenté iniciarlo manualmente y fui a chequear el log de Eventos del sistema. El mensaje de error que me aparecía ahora me acercaba un poco más a la solución del problema.

“The log scan number (274:328:1) passed to log scan in database ‘master’ is not valid. This error may indicate data corruption or that the log file (.ldf) does not match the data file (.mdf). If this error occurred during replication, re-create the publication. Otherwise, restore from backup if the problem results in a failure during startup.”

Error SQLServer mdf GeneXus Fabricio De los Santos

En alguna otra oportunidad había tenido un error similar donde, por algún motivo la base de datos master que viene por defecto en el SQLServer estaba corrupta y la solución que apliqué en su momento, fue copiar de otra instalación los archivos “master.mdf” y “mastlog.ldf” al directorio “C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER_R2\MSSQL\DATA” donde en mi caso tengo instalado este SQLServer, así que repetí la receta.

Una vez copiada, inicié el servicio y todo volvió a funcionar.

Lo único que me queda por saber es “qué fue lo que realmente causó el problema”, pero como se podrán imaginar, ahora que funciona todo nuevamente, me conformo con compartirlo y tenerlo documentado por si algún día vuelve a pasar.

Muchas gracias por seguir mi blog.

Hasta el próximo post!


Fabricio De los Santos GeneXus
Fabricio De los Santos
_________________________________________
Coaching and Mentoring GeneXus, ScrumMaster, Project Manager, K2B Tools Agent – The best Patterns Tool to integrate with GeneXus
Siga meus blogs em www.fabriciodelossantos.com

Obtener 2 últimos registros concatenados con SQL Oracle usando rownum

Saturday, September 8th, 2007

El otro día, un amigo me preguntó como podía hacer para obtener los 2 últimos registros (con mayor fecha) ingresados en una tabla, pero concatenados.
Realmente estaba con la cabeza en otra cosa, pero generalmente me intereso por ese tipo de “rompecabezas” SQL y bueno me pareció interesante publicarlo.

Ejemplo:

Tenemos una tabla llamada “Entradas”

La cual tiene una clave que llamaremos “Codigo”, un campo “Fecha” que es el criterio de ordenación, y un campo “Otros” que simula el resto de los campos de la tabla.

Para filtrar los 2 últimos registros pensé en usar “rownum”, pero el problema era que los últimos registros ingresados, no coincidían con los últimos correspondientes a las fechas digitadas.

Ejemplo:

Haciendo un select ordenado por fecha descendiente mis últimos 2 registros son los de código 31 y 28

Select Codigo,Fecha,Otros from Entradas order by Fecha Desc

31, 07/09/2007, xxx
28, 06/09/2007, yyy
29, 05/09/2007, zzz
30, 04/09/2007, uuu

Pero al utilizar el rownum, como el mismo es parte de la condición, antes del order by simplemente me devuelve los 2 últimos registros ingresados.

Select Codigo,Fecha,Otros where rownum <= 2 order by Fecha Desc

31, 07/09/2007, xxx 30, 04/09/2007, uuu

Solución para obtener los 2 últimos registros ordenados por fecha descendente: Hacer un select ordenado por fecha descendente y a esto aplicar la condición de rownum

select * from

(select Codigo,Fecha,Otros from Entradas order by Fecha Desc)

where rownum <= 2

31, 07/09/2007, xxx 28, 06/09/2007, yyy

Ahora bien, para obtener los 2 últimos registros concatenados, como puedo hacer?

Bien, la solución es aplicar la misma lógica pero para obtener 1 solo registro y luego al resultado de esto, aplicarlo a un producto cartesiando, mostrando aquellos registros en los cuales no se aplique el producto cartesiano entre si mismo।

Ejemplo:

select * from
(select * from
(select Codigo,Fecha,Otros from Entradas order by Fecha Desc)
where rownum = 1) a,
(select * from
(select Codigo,Fecha,Otros from Entradas order by Fecha Desc)
where rownum <= 2) b
where a.Codigob.Codigo

31, 07/09/2007, xxx,28, 06/09/2007, yyy

Espero sea útil para aquellos que algún día se encuentren con este problema.
Personalmente, no se para que mi amigo quería este resultado, pero el desafío fue interesante.

Fabricio De los Santos
Gerencia de Proyectos –
Consultoría GeneXus –
ERP – Sistemas de Misión Crítica – Bases de Datos.

Vea mis blogs en:
www.fabriciodelossantos.com