Black log

Bajo la categoría ‘Sistemas TI’

Reparar una base de datos corrupta en Sql Server (Parte II)

Escrito por Sergio Sainz el 02-05-2012

Anteriormente veíamos como reparar una base de datos. Si el estado es cualquiera de los otro dos (REPAIR MODE o EMERGENCY), entonces tendremos que recurrir a otro tipo de apaños. En mi caso he experimentado el problema tras tratar de recrear un nuevo transaction log para una bbdd, pero también puede servir en casos en el que el archivo de datos este dañado.

Voy a indicar lo que hice para reproducir el problema. Separé una base de datos y borré su .LDF, luego al adjuntarla obtenía este error:

Error al adjuntar las bases de datos. Haga clic en el hipervínculo de la columna de mensajes para obtener más información.

Crearlo a mano no es muy buena idea según nos muestra el siguiente error:

The operating system returned error 38(Se ha alcanzado el final del archivo.) to SQL Server during a read at offset 0000000000000000 in file ‘C:Archivos de programaSWsoftPleskDatabasesMSDEMSSQLDatasergiodb_log.ldf’. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online. (Microsoft SQL Server, Error: 823)

Dado que no era posible adjuntar la bbdd, el siguiente paso fue renombrar el archivo de datos sergiodb.mdf por sergiodb_bak.mdf y crear una nueva base de datos con el nombre sergiodb. Con esto obtenemos un nuevo mdf y un ldf limpio.

El siguiente paso fue detener SQL Server y sobrescribir sergiodb.mdf por el bueno e iniciar de nuevo SQL. Con esto se produce el siguiente error al intentar por ejemplo ver las propiedades de la bbdd:

Unable to open the physical file “C:Archivos de programaSWsoftPleskDatabasesMSDEMSSQLDatasergiodb.mdf”. Operating system error 5: “5(Acceso denegado.)”. (Microsoft SQL Server, Error: 5120)

Tras dar permisos NTFS al archivo de datos, el error cambiaba a:

Database ‘sergiodb’ cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details. (Microsoft SQL Server, Error: 945)

Con todo esto el estado de mi BD era RECOVERY_PENDING

SELECT state_desc FROM sys.databases WHERE name =‘sergiodb’;

SOLUCION

ALTER DATABASE sergiodb SET EMERGENCY ;– lo primero que haremos es pasar la bbdd del modo “RECOVERY_PENDING” al modo “EMERGENCY” (es necesario tener privilegio de sysadmin)

ALTER DATABASE sergiodb SET SINGLE_USER ;– La ponemos en modo de usuario único.

DBCC CHECKDB (sergiodb, REPAIR_ALLOW_DATA_LOSS )WITH NO_INFOMSGS ;– Chequeamos la bd con la opción REPAIR_ALLOW_DATA_LOSS

ALTER DATABASE sergiodb SET MULTI_USER ;– Por ultimo la ponemos en modo multiusuario

Ahora debería estar en modo ONLINE y funcionando.

Sin comentarios | Archivado como Sistemas TI | 02/05/2012

Reparar una base de datos corrupta en Sql Server (Parte I)

Escrito por Sergio Sainz el 25-04-2012

Debido a múltiples circunstancias como cortes eléctricos inesperados, problemas de espacio en disco, fallos de hardware, que hayas borrado el archivo de log (.ldf), etc. Una bbdd puede corromperse, normalmente la mejor manera de solucionar esto es recurrir a la última copia de seguridad pero como puede ocurrir en estos casos no hay copia o la que tenemos disponible es ya algo vieja. En esos casos quizá aún podamos recuperar la información.

Una bbdd puede tener estos estados (LINK):

  • ONLINE: La base de datos está disponible para su acceso. El grupo de archivos principal está en línea, aunque la fase de deshacer de la recuperación puede no haberse completado.
  • OFFLINE: La base de datos no está disponible. Una base de datos pasa a estar sin conexión por la acción explícita del usuario y permanece sin conexión hasta que el usuario toma otra acción. Por ejemplo, la base de datos puede desconectarse para mover un archivo a un nuevo disco. La base de datos se vuelve a poner en línea una vez completado el traslado.
  • RESTORING: Uno o varios archivos del grupo de archivos principal se está restaurando, o uno o varios archivos secundarios se están restaurando sin conexión. La base de datos no está disponible.
  • RECOVERING: Se está recuperando la base de datos. El proceso de recuperación es un estado transitorio, la base de datos se pone automáticamente en línea si la recuperación tiene éxito. Si la recuperación no tiene éxito, la base de datos pasa a ser sospechosa. La base de datos no está disponible.
  • RECOVERY PENDING: SQL Server ha encontrado un error relacionado con un recurso durante la recuperación. La base de datos no está dañada pero pueden faltar archivos o bien limitaciones de recursos del sistema pueden estar impidiendo que se inicie. La base de datos no está disponible. Se necesita una acción adicional por parte del usuario para resolver el error y permitir que se complete el proceso de recuperación.
  • SUSPECT: Como mínimo un grupo de archivos principal es sospechoso y puede estar dañado. La base de datos no se puede recuperar durante el inicio de SQL Server. La base de datos no está disponible. Se requiere una acción adicional por parte del usuario para resolver el problema.
  • EMERGENCY: El usuario ha cambiado la base de datos y ha establecido el estado en EMERGENCY. La base de datos está en modo de usuario único y se puede reparar o restaurar. La base de datos está marcada como READ_ONLY, el registro está deshabilitado y el acceso está limitado a miembros de la función fija de servidor sysadmin. EMERGENCY se utiliza principalmente para solucionar problemas. Por ejemplo, una base de datos marcada como sospechosa se puede establecer en el estado EMERGENCY. Esto puede permitir al administrador del sistema acceso de sólo lectura a la base de datos. Sólo los miembros de la función fija de servidor sysadmin pueden establecer una base de datos en el estado EMERGENCY.

Cuando se corrompe la tendremos seguramente en Online, Recovery pendingSuspect.

Puedes ver el estado de la BD utilizando esta consulta (sustituye blackslotdb por la bd a consultar):

SELECT state_desc FROM sys.databases WHERE name = ‘blackslotdb’;

Si la bd está en estado ONLINE, lo más fácil es intentar un checkdb con la opción REPAIR_ALLOW_DATA_LOSS.

DBCC CHECKDB (MAGIC, REPAIR_ALLOW_DATA_LOSS)WITH NO_INFOMSGS

Más info en http://technet.microsoft.com/es-es/library/ms188422.aspx

En la segunda parte de este post comentaremos como reparar si la bd se encuentra en alguno de los otros 2 modos o no se puede adjuntar.

Sin comentarios | Archivado como Sistemas TI | 25/04/2012

El pasado 31 de marzo se celebró el Día Mundial del Backup

Con este día se pretende concienciar a los usuarios sobre la importancia de disponer copias de respaldo de sus datos.

Hemos querido publicar este post sobre backup y otras medidas de seguridad para el alojamiento de contenido en servidores remotos,  para rendir homenaje a este día.

BACKUP

Recomendaciones:

-    Antes de contratar servicios de alojamiento en una empresa de hosting, consulta si éstos incluyen backup
-    Si los datos que vas a alojar son especialmente sensibles,   infórmate sobre el grado de seguridad que debe cumplir su salvaguarda (deduplicación de backup, encriptación, lugar del datacenter, etc.) y contrástalo con tu proveedor.

Existen diferentes técnicas para realizar backups. Actualmente las empresas de hosting las suelen combinar. Más que ser técnicas excluyentes, son complementarias y dependiendo de los requisitos o necesidades de recuperación de datos  de los usuarios, unas veces se adaptan mejor los snapshots y otras veces, la recuperación de archivos.

•    Backup de la máquina o snapshot
•    Backup de archivos

DISCOS EN RAID

Esta medida de seguridad debe acompañarse siempre de un sistema de backup. No basta con disponer de dos (o más) discos duros en la máquina en los que se replica el contenido ya que si se produce un error y se borra contenido o se corrompe una base de datos, automáticamente el error se replicará en el disco que funciona a modo de espejo.  Contar con discos en RAID permite que, si existe un fallo en uno de ellos, el usuario pueda seguir trabajando con el otro disco disponible mientras se sustituye el afectado.

SERVIDORES DE DESARROLLO

En Blackslot estamos especialmente sensibilizados con el mundo del desarrollo, por ese motivo ofrecemos dos servicios que están íntimamente relacionados con el servicio de copias para programación:

1)    Clones de tu servidor

Si tienes tu servidor alojado en Blackslot,  podemos crear un clon de tu máquina, en cuestión de segundos,  de modo que obtengas una réplica exacta  sobre la que llevar a cabo labores de desarrollo y que, una vez testadas, puedan pasar directamente a producción.

2)    Servidores concebidos para el alojamiento de código (control de versiones)

Se trata de servidores con una aplicación para el control de versiones (GIT) . Si varios programadores están trabajando sobre un mismo código, podrán alojarlo de manera segura en nuestros servidores y, además, se guardará un registro de cada uno de los cambios que realice cada programador.

El control de versiones permite volver atrás y restablecer de manera rápida y sencilla el código anterior en caso de que resultara preciso.

Para más información: info@blackslot.com

Sin comentarios | Archivado como General, Novedades, Nuestros servicios, Sistemas TI | 04/04/2012

Las 10 consultas que más CPU consumen en SQL Server

Escrito por Sergio Sainz el 28-03-2012

En ocasiones nuestro SQL Server consume demasiada CPU, un buen comienzo es localizar cuales son las consultas que más sobrecargan de media nuestro servidor.

Para ello, podemos utilizar el siguiente script que lista el top ten de las consultas que más cargan la CPU de nuestro servidor SQL.

SELECT TOP 10
qs.total_worker_time/qs.execution_count as [Avg CPU Time],
SUBSTRING(qt.text,qs.statement_start_offset/2,
(case when qs.statement_end_offset = -1
then len(convert(nvarchar(max), qt.text)) * 2
else qs.statement_end_offset end -qs.statement_start_offset)/2)
as query_text,
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY
[Avg CPU Time] DESC

Sin comentarios | Archivado como Sistemas TI | 28/03/2012

Las 10 consultas que más se ejecutan en Sql Server

Escrito por Sergio Sainz el 27-03-2012
En las tareas de administración  de SQL Server, es necesario recabar información a fin de conocer las sentencias que más hacen trabajar al servidor.
El siguiente script nos mostrará el top ten de las consultas que más veces se repiten.
En muchos casos se pueden usar servicios de caché para evitar que las mismas consultas se repitan una y otra vez.

SELECT TOP 10
qs.execution_count,
SUBSTRING(qt.text,qs.statement_start_offset/2,
(case when qs.statement_end_offset = -1
then len(convert(nvarchar(max), qt.text)) * 2
else qs.statement_end_offset end -qs.statement_start_offset)/2)
as query_text,
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY
qs.execution_count DESC

Sin comentarios | Archivado como Sistemas TI | 27/03/2012

Modo exclusivo en Sql Server

Escrito por Sergio Sainz el 21-02-2012

Ciertas operaciones requieren acceso exclusivo a la bbdd por lo que si hay conexiones abiertas contra ella obtenemos un error como este:

Mens. 5030, Nivel 16, Estado 2, Línea 1
No se puede bloquear de forma exclusiva la base de datos para realizar la operación.

Debemos ir a las propiedades de la BBDD > Opciones > Estado > Restringir acceso y seleccionamos single.

También se puede ejecutar la consulta:

ALTER DATABASE [nombre_bd] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

Ahora se pueden hacer los cambios necesarios.

Para volver al modo de multiples usuarios hay que matar la conexión y cambiar el modo, se puede hacer fácilmente con esta consulta:

Kill [spid]

ALTER DATABASE [nombre_bd] SET MULTI_USER

Sin comentarios | Archivado como Sistemas TI | 21/02/2012

Agregar o quitar una interfaz de red en SQL Server

Escrito por Sergio Sainz el 02-02-2012

Cuando se instala SQL Server, este se configura teniendo en cuenta las interfaces habilitada en ese momento. Pero si más tarde habilitamos una nueva interfaz o la deshabilitamos esta no aparece/desaparece de la configuración de red.


La forma para hacer esto es editando el registro, toda la información se guarda en:

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL ServerMSSQL.1MSSQLServerSuperSocketNetLibTcp]

Por tanto una forma de quitar una IP es borrar su registro y para añadirla lo que yo hago es exportar una clave ya existente y editarla como deseo antes de ejecutar el .reg para que inserte los cambios.

Sin comentarios | Archivado como Desarrollo web, Nuestros servicios, Sistemas TI | 02/02/2012

Lenguaje de SQL Server (dateformat)

Escrito por Sergio Sainz el 23-01-2012

Este es un problema que puede suceder al migrar una base de datos a otro entorno mssql que no comparta el mismo lenguaje de instalación que el que teníamos en un principio.

En este caso ha sido al restaurar una base de datos que se encontraba en un sql con lenguaje “español” a otro que habían instalado en “us_english”. Con el primero las fechas (campos de tipo datetime) se muestran en formato “dd/mm/yyy” pero en inglés las fechas tienen el formato “mm/dd/yyyy”.

Si mostramos la tabla desde el Microsoft Sql Server Managmentent Studio veremos que las fechas se muestran tal y como hemos importado, pero el problema viene cuando queremos hacer una consulta por ejemplo desde nuestra web y Sql Server nos devuelve la fecha, entonces veremos que se produce un error que esta relacionado con el formato de la fecha.

Puestos en situación, vamos manos a la obra.

¿Como ver el lenguaje de Sql Server?

select @@language

Si mssql ha sido instalado en inglés seguramente obtendrás us_english como resultado.

¿Como ver todos los lenguajes disponibles y sus propiedades?

sp_helplanguage


¿Como establecer el lenguaje?

De esta manera establecemos el lenguaje español para todas las consultas que lancemos desde la sesión y con el usuario que estemos conectados:

SET LANGUAGE Español

También podemos, por ejemplo en el caso de nuestra web, antes de lanzar una consulta sql especificar el dateformat deseado en cada caso, indicando: �

set dateformat dmy

¿Como establecer el lenguaje predeterminado para TODAS las bases de datos del servidor?

De esta manera conseguimos que por defecto se devuelvan las fechas en formato dd/mm/yyyy. Lo que debemos hacer es abrir Microsoft Sql Server Managmentent Studio, ir a las propiedades del servidor SQL y en el apartado avanzado, modificar la opción idioma predeterminado por Español.


Además hay que tener en cuenta el lenguaje por defecto de los Inicios de sesión que existan en el servidor, ya que los que creemos nuevos a partir de ahora lo harán con lenguaje español. Para ello:

USE [master]
GO
ALTER LOGIN [serversqlsergiosainz] WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[Spanish]
GO

También es posible modificar el idioma por el deseado desde las propiedades del usuario.


¡¡NO PIERDAS LA OPORTUNIDAD DE ALOJAR TUS BASES DE DATOS SQLSERVER CON BLACKSLOT!!

Contempla nuestras ofertas de

HOSTING COMPARTIDO WINDOWS

SERVIDORES CLOUD WINDOWS

o solicítanos un plan de prueba escribiendo a

info@blackslot.com

Fotolia_18406256_XS

Sin comentarios | Archivado como Sistemas TI | 23/01/2012

Copiar tablas de una bd SQL Server a otra

Escrito por Sergio Sainz el 11-11-2011

Tenemos una base de datos en producción y queremos disponer de una copia de esos datos para desarrollo, sólo necesitamos algunas tablas.

Cómo para todo existe la forma de hacerlo mediante script, sin embargo en esta ocasión utilizaremos el Wizard.

1) Seleccionamos la base de datos destino e importamos (Tasks > Import Data…)

image

2) Empieza el wizard.

image

3) Indicamos el nombre de servidor, en nuestro caso cómo es localhost podemos poner un punto. La autenticación mediante Windows o Sql y finalmente si los datos son correctos nos dejará seleccionar la base de datos de origen, en nuestro caso BLACKSLOT_PROD.

image

4) De la misma forma, en este paso indicamos el destino. Para nosotros BLACKSLOT_DEV. Si no tuviésemos la base de datos de destino ya creada, podemos darle a “”New…” para crearla.

image

5) En el siguiente apartado dejamos la primera opción marcada.

image

6) Ahora nos mostrará las tablas y vistas que podemos importar, en nuestro caso sólo existe una tabla (T_Servidores_Cloud) que es la que hemos creado a modo de ejemplo. Cómo en el destino no existe la tabla, automáticamente nos la creará con el mismo nombre y los mismos campos.

image

7) Si necesitamos que el nombre sea otro, también podemos editarlo. Si además queremos controlar los campos de destino podemos pinchar en el botón “Edit Mappings…” y nos mostrará todas las posibilidades.

image
8) Finalmente tenemos un resumen de lo que se va a hacer y podemos darle a “Finish”.

Sin comentarios | Archivado como Sistemas TI | 11/11/2011

Errores SMTP enviando correos

Escrito por Sergio Sainz el 24-09-2011
Cuando se produce un error en el envío de correo, puede deberse a muchas razones. Las aplicaciones de correo dan un código del error y una pequeña descripción que pueden darnos alguna pista sobre el problema.
Esta es una lista de los errores más habituales a la hora de enviar correos:
  • SMTP 421 – Service not available, closing transmission channel.
Indica que el Servidor SMTP no está disponible en ese momento.
  • SMTP 450 – Requested mail action not taken: mailbox unavailable.
El servidor remoto indica que no se ha podido entregar el mensaje porque la dirección de correo no está disponible o no existe.
  • SMTP 451 – Requested action aborted: local error in processing.
Se refiere a que el servidor SMTP ha tenido un error al procesar el correo.
  • SMTP 452 – Requested action not taken: insufficient system storage.
Quiere decir que no hay suficiente espacio en la cuenta de destino para guardar el mensaje.
  • SMTP 500 – Syntax error, command unrecognized.
El servidor no reconoce un comando que se le envió.
  • SMTP 501 – Syntax error in parameters or arguments.
El servidor identificó un intento de envío de un comando SMTP pero los parámetros contenían algún error de sintaxis.
  • SMTP 502 – Command not implemented.
Indica que una característica o comando solicitado al servidor está deshabilitado o no está implementado en el conector SMTP.
  • SMTP 504 – Command parameter not implemented.
El comando enviado al conector SMTP contenía otro comando que no se pudo procesar en la misma transacción.
  • SMTP 550 – Requested action not taken: mailbox unavailable or is not local.
La dirección del destino no existe en el servidora.
  • SMTP 551 – User not local; please try.
Indica que el receptor especificado en el comando RCPT no está albergado localmente en el servidor y que las opciones de relay previenen que el mensaje sea reenviado al destinatario.
  • SMTP 552 – Requested mail action aborted: exceeded storage allocation.
Se obtiene cuando el usuario ha excedido su capacidad de almacenaje de correo.
  • SMTP 553 – Requested action not taken: mailbox name not allowed.
El formato de la dirección indicada es incorrecta o no está bien formateada.
  • SMTP 554 – Transaction failed.
Es una respuesta genérica del servidor cuando falla una transacción SMTP.

Sin comentarios | Archivado como Sistemas TI | 24/09/2011