En este tip se indica como recuperar las excepciones que Plesk añade por defecto tras su instalación.

Desde %plesk_bin% ejecutar:

firewall.exe –s –i eth0

Donde “eth0” debe ser cambiado por el nombre de la interfaz de red.

Este comando sirve para redireccionar la salida en pantalla de un comando al portapapeles, es decir si queremos copiar el contenido de archivo.txt al portapapeles para poder pegarlo en cualquier sitio basta con ejecutar:

clip < archivo.txt

Si lo que queremos es pasarle el resultado de un comando basta con hacer un “pipe”: Por ejemplo:

dir | clip

Esta utilidad de la línea de comandos está incluida en Windows Vista pero puede utilizarse desde Windows XP u otras versiones copiando clip.exe en c:\Windows\System32

Hasta ahora estaba escribiendo los posts con la ayuda de MS Word 2007 el cual es capaz de conectarse y publicar directamente. Pero entre otras cosas he tenido algunos problemas de formato ya que lo que escribía no era muy fiel a lo que luego se publicaba.

Ayer me comentaba Asier Marqués que había oído buenas críticas de Windows Live Writer y me he decidido a probarlo de la mejor manera que se me ha ocurrido, publicando este post.

Las primeras impresiones han sido muy buenas, la aplicación se integra muy bien con Wordpress e imagino que con otro tipo de blogs. Me ha gustado mucho que sea capaz de reconocer el estilo del blog y mostrarlo en la vista de Diseño Web. Igualmente la característica de Vista previa es bastante útil y al tener todas estas opciones a mano se hace mucho más fácil el manejo.

Sin duda, lo que más me ha gustado es la posibilidad de añadir plugins de forma sencilla, como el Flickr4Writer que da la posibilidad de insertar imágenes directamente de flicker de una forma muy sencilla permitiendo la búsqueda de imágenes de un usuario concreto, de un álbum o por etiquetas, haciendo un link a flickr y con la posibilidad de hacerlo con el tamaño deseado.

Ahora el día a día será el que diga si merece la pena el cambio, pero a priori parece que mucho.

flickr4writer

En el post anterior veíamos como reparar una bbdd. 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 bbdd 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 programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb_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 bbdd 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 programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb.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.

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 pending o Suspect.

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

SELECT state_desc FROM sys.databases WHERE name = 'sergiodb';

Si la bbdd 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

Mañana publicaré como reparar si la bbdd se encuentra en alguno de los otros 2 modos o no se puede adjuntar.

El Transaction Log de SQL server es uno de los quebraderos de cabeza para muchos administradores noveles que no cuentan con un buen plan de mantenimiento o no conocen a fondo el funcionamiento de SQL como para reducirlo a mano. En este post trataré de explicar y dar algunas soluciones rápidas para evitar el aburrimiento. A quien quiera información más detallada le recomiendo los Libros en Pantalla de SQL o Googlear un poco que nunca está de más ;).

¿Qué es el Transaction Log?

Por cada bbdd (archivo .mdf) se crea un archivo de log (archivo .ldf) en el que se almacenan todos los cambios que se producen en la bbdd. En él se van guardando cambios que luego permitirán volver atrás (rollback) en una transacción o incluso hacer una recuperación a un estado anterior.

¿Por qué puede ocupar mucho más que la propia bbdd?

Cuando se ejecutan muchas consultas y/o afectan a un gran número de registros, produciendo cambios en la bbdd. Todos los cambios se van almacenando en el transaction log, si además no tenemos un plan de mantenimiento que reduzca este log de forma periódica el .ldf se irá llenando hasta ocupar una gran cantidad de espacio y terminará por llenar el disco.

¿Cómo se reduce el log de transacciones?

Existen varias maneras, la forma más recomendable es utilizando un plan de mantenimiento que realice una copia de seguridad del registro de transacciones. A continuación vamos a ver algunos ejemplos y posibilidades:

  • Backup log: Guardamos un backup y luego reducimos el log de la bbdd “sergiodb” a 10 Mb

USE [sergiodb] – Utilizamos la bbdd sergiodb
CHECKPOINT – Para que todas las páginas de memoria se escriban en la bd

GO

EXEC sp_addumpdevice ‘disk’ ,‘CopiaMiBase_sergiodb’ ,‘c:\LogMiBase_sergiodb.bak’ – Creamos un punto donde guardaremos el log y procedemos a hacer el backup con truncado del log

BACKUP DATABASE sergiodb TO CopiaMiBase_sergiodb
BACKUP LOG pruebamm WITH TRUNCATE_ONLY
DBCC SHRINKFILE (’sergiodb_log’, 10) –- Dejamos el archivo de log con un tamaño de 10 Mb
  • Reducir sin hacer backup:

USE [sergiodb] – Utilizamos la bbdd sergiodb
CHECKPOINT – Para que todas las páginas de memoria se escriban en la bd
GO
BACKUP
LOG sergiodb WITH TRUNCATE_ONLY
– Truncamos el registro
DBCC SHRINKFILE (sergiodb _Log, 10) – Lo reducimos a 10 Mb

  • Eliminar el archivo de log para que se genere de nuevo: Esta solución es más arriesgada, aunque a veces es necesario tirar de ella por ejemplo cuando el log es tan grande que el servidor no tiene espacio o memoria como para gestionarlo.

ALTER DATABASE [sergiodb] SET SINGLE_USER; – Ponemos la bbdd en single user
GO
sp_detach_db ’sergiodb’ – Separamos la bbdd

Ahora es necesario localizar el archivo de log, en mi caso C:\Archivos de programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb_log.ldf y eliminarlo. Luego ejecutamos esta nueva consulta para adjuntarla de nuevo.

USE [master]
CREATE</SPANDATABASE [sergiodb] ONFILENAME=(‘C:\Archivos de programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb.mdf’),
(FILENAME=‘C:\Archivos de programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb_log.LDF’)
FOR ATTACH
ALTER DATABASE sergiodb SET MULTI_USER; – Ponemos la bbdd en multi user

Interesante la info de San Google para sacar los colores a algún que otro programador. Una cosa es que alguien se haga una web personal o para su negocio familiar y no le salga a cuento preocuparse en exceso de blindar su código. Pero que sea tan fácil atacar una web oficial por la que seguro que los contribuyentes hemos pagado un ojo de la cara es algo lamentable.

Supongo que sería mucho pedir que este tipo de instituciones dejen de lado los enchufes u oposiciones sólo para titulados universitarios y empiecen a pensar en valorar a la gente por sus conocimientos reales.

Link - caché de Google.

He actualizado mi cuenta de Flickr a una Flickr Pro para quitar las limitaciones de la versión gratuita y poder subir mis fotos sin preocuparme del tamaño. Para ello, he intentado previamente borrar las fotos que tenía y la verdad que me ha costado un poco encontrar la forma de borrar todas las fotos de un álbum completo ya que con borrar el álbum solo se elimina la relación de las fotos con el mismo y no las fotos en sí con lo cual se quedan desperdigadas.

Para borrar múltiples fotos de una vez:

  1. Entrar en Organize.
  2. Usando la barra de navegación a pie de página, selecciona el albúm, selecciona todas las fotos que deseas borrar y arrástralas al panel central.
  3. Pincha en el menú EDITAR FOTOS y selecciona ELIMINAR.

Me he encontrado con este problema al pasar de PS 1 en español a la versión PS 2 la cual sólo he encontrado en inglés. Al no coincidir los locales, esto es lo que ocurre cuando se intenta obtener la ayuda de un comando.

PS C:\> get-help get-childitem

Get-Help : Error loading help content for Get-ChildItem from file “Microsoft.PowerShell.Commands.Management.dll-Help.xml”. Details: Microsoft.PowerShell.Commands.Management.dll-Help.xml.

At line:1 char:9

+ get-help <<<< get-childitem

PS C:\> get-help

Get-Help : Cannot find Help for topic “default”.

At line:1 char:9

+ get-help <<<<

SOLUCION:

Copiar el directorio C:\windows\system32\windowspowershell\v1.0\en-US en C:\windows\system32\windowspowershell\v1.0\es-ES

Tenía pendiente escribir algo sobre este evento al que acudí en una visita fugaz junto a Jonathan y Asier que fue invitado como ponente en un debate sobre SSOO en una mesa redonda de Lancelona.

El debate comenzaba a las 11 de la mañana del domingo 22 de Agosto por lo que nos dio algo de tiempo a visitar BCN por la noche y por supuesto no perdimos la oportunidad. Parece ser que no fuimos los únicos en pernoctar aquella noche porque para cuando llegamos al Palau Sant Jordi quedaba muy poca gente, restando a algunos gamers y la propia organización casi todos los demás estaban durmiendo o ya habían marchado a casa.

Asier Marqués había preparado una presentación y había dejado a punto sus máquinas virtuales para hacer todo tipo de demostraciones, pero lamentablemente no dispuso de un proyector ni tiempo para ello. El evento comenzó con un una pequeña presentación de los 3 ponentes y pronto se empezó a hablar sobre Mac Os X, Gnu/Linux y MS Windows comentando cual es más intuitivo a la hora de instalar y utilizar como de cual es más seguro.

Supongo que la falta de moderador hizo que tras unos 15 minutos de charla que me pareció interesante la cosa terminó por salir del tema principal de la misma y empezaron a entrar en una guerra de tópicos, marketing y sentimientos subjetivos que hicieron que perdiese gran parte del interés.

Estoy seguro de que la organización ha tomado buena nota para que la próxima edición la cosa sea más interesante con algo de contenido técnico, menos politiqueo y talibanismo sin sentido.