martes, 8 de marzo de 2011

[Tips SharePoint 2010] Calcular el tamaño de nuestras bases de datos

Siguiendo con el post Qué bases de datos estoy utilizando? una de las cuestiones que debemos plantearnos a la hora de mantener y monitorizar una granja es el volumen que están consumiendo las bases de datos. Un volumen excesivo en bases de datos puede implicar a la larga un descenso en el rendimiento de la granja y problemas al realizar operaciones de backup y restauración.

Comentamos que mediante el cmdlet Get-SPDatabase powershell podíamos obtener un listado de las bases de datos que estamos utilizando. Este cmdlet devuelve un array de objetos que corresponden con los distintos tipos de base de datos. Para obtener el espacio utilizado utilizaremos la propiedad “DiskSizeRequired”.

Para obtener un listado del espacio utilizado por base de datos podemos utilizar un script del tipo:

Get-SPDatabase | sort-object -descending DiskSizeRequired | Format-Table Name, DiskSizeRequired

Mediante sort-object indicamos que ordene la lista por orden descendente en la propiedad DiskSizeRequired. Sobre el resultado de la ordenación indicamos que muestre en formato tabla con Format-table.

imageimage

Para conocer el espacio total utilizado podemos:

$size = 0

Get-SPDatabase | foreach { $size = $size + $_.DiskSizeRequired}

$size

En la última imagen podréis apreciar que existen bases de datos con un alto volumen de espacio que no concuerdan con el contenido almacenado, mediante este script nos dimos cuenta que teníamos un problema de espacio, en esta ocasión las bbdd estaban en modo recuperación completa provocando que los ficheros logs no se truncaran creciendo de forma desorbitada.

Para saber el espacio real utilizado por las bases de datos ejecutamos desde la consola de SQL server el comando:

EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"

Con este comando pudimos ver que el espacio real utilizado en tablas e índices no coincidía con el utilizado por la base de datos, por lo que al final revisando los ficheros de la bbdd encontramos que el fichero .ldf era el problema. Para solucionarlo modificamos la propiedad de recuperación a “Sencilla” e hicimos una reducción del archivo de log.

imageimageimage

[Tips SharePoint 2010] Calcular el tamaño de nuestras bases de datos

Siguiente con el post Qué bases de datos estoy utilizando? una de las cuestiones que debemos plantearnos a la hora de mantener y monitorizar una granja es el volumen que están consumiendo las bases de datos. Un volumen excesivo en bases de datos puede implicar a la larga un descenso en el rendimiento de la granja y problemas al realizar operaciones de backup y restauración.

Comentamos que mediante el cmdlet Get-SPDatabase powershell podíamos obtener un listado de las bases de datos que estamos utilizando. Este cmdlet devuelve un array de objetos que corresponden con los distintos tipos de base de datos. Para obtener el espacio utilizado utilizaremos la propiedad “DiskSizeRequired”.

Para obtener un listado del espacio utilizado por base de datos podemos utilizar un script del tipo:

Get-SPDatabase | sort-object -descending DiskSizeRequired | Format-Table Name, DiskSizeRequired

Mediante sort-object indicamos que ordene la lista por orden descendente en la propiedad DiskSizeRequired. Sobre el resultado de la ordenación indicamos que muestre en formato tabla con Format-table.

imageimage

Para conocer el espacio total utilizado podemos:

$size = 0

Get-SPDatabase | foreach { $size = $size + $_.DiskSizeRequired}

$size

En la última imagen podréis apreciar que existen bases de datos con un alto volumen de espacio que no concuerdan con el contenido almacenado, mediante este script nos dimos cuenta que teníamos un problema de espacio, en esta ocasión las bbdd estaban en modo recuperación completa provocando que los ficheros logs no se truncaran creciendo de forma desorbitada.

Para saber el espacio real utilizado por las bases de datos ejecutamos desde la consola de SQL server el comando:

EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"

Con este comando pudimos ver que el espacio real utilizado en tablas e índices no coincidía con el utilizado por la base de datos, por lo que al final revisando los ficheros de la bbdd encontramos que el fichero .ldf era el problema. Para solucionarlo modificamos la propiedad de recuperación a “Sencilla” e hicimos una reducción del archivo de log.

imageimageimage

lunes, 7 de marzo de 2011

La importancia de un líder

Hace unos días me llamó la atención acerca de la importancia que tuvo para los medios que Steve Jobs presentara iPad 2, en lugar de hablar de las nuevas prestaciones del nuevo iPad la pregunta era si lo iba a presentar Steve Jobs y de su estado de salud. Esto me llevó a preguntarme si realmente fue todo una estrategia comercial o es que realmente existen personajes en el mundo de la informática que realmente transmiten emociones. Aunque probablemente sean las dos cuestiones, quiero creer que los que nos dedicamos al mundo de los bits y las compilaciones tendemos a necesitar de un líder que nos motive. De pronto se me ocurren algunos personajes muy importantes como: Linus Torvalds, Bill Gates, Steve Ballmer, Steve Jobs, Mark Zuckerberg, James Gosling, Larry Page y Sergey Brin. Sin lugar a duda todos ellos producen algún tipo de admiración para los seguidores de sus plataformas o productos, pero ¿Por qué?, porque han conseguido grandes fortunas?, porque son mentes preclaras? tienen un equipo de márquetin increíble? … no lo sé pero desde luego todos representan la figura de líder en sus empresas y tienen un impacto muy grande en los medios y sus usuarios.

¿Necesitamos de un líder en nuestras empresas?

Sí, desde luego. El motivo radica en el concepto de la informática, para mí no es solo un trabajo, es un continuo estudio en el que siempre tenemos que estar reciclándonos y podemos aprender cosas nuevas de nuestros compañeros y clientes, además requiere de un continuo esfuerzo en el que experiencia-conocimiento van ligados de la mano, requiere de superación por cada pequeño problema; y por supuesto requiere de cierta dosis de imaginación, ¿o acaso ’siempre’ utilizáis “Aux1” como nombre para vuestras variables?. Un líder para mí será aquella persona que independientemente de su estatus en una empresa sea capaz de transmitir todos esos valores con un fin común.

Partiendo entonces de ese concepto, trabajar en una empresa donde el mayor valor que nos transmitan sean las cifras anuales no es trabajar en informática (aunque sea la realidad). Igual se debe a que la dirigen una gran cantidad de personas que no saben ni a lo que se dedica su empresa, no se…

 

Creo que existen muchos líderes, aunque éstos no sean tan famosos como las personas mocionadas anteriormente. Deberíamos ser capaces de identificarlas y darles mayor publicidad, por ejemplo empujándolas a colaborar. Las comunidades de usuarios son un foco de gente que les gusta la informática y con ganas de hacer algo más que un simple proyecto. Microsoft se dio cuenta de esto hace ya unos añitos cuando el mundo de Java y Linux parecían que iban a tumbarle, por eso crearon el programa de MVP’s y una gran cantidad de recursos como foros, msdn, technet, channel9, … y si nó fijaros en que Google ha empezado recientemente a publicar sus blogs.

 

¿Qué es para vosotros un líder?

 

PD: No me considero un líder, simplemente un eterno aprendiz.

viernes, 4 de marzo de 2011

Mis experiencias con CloudShare

Después de probar el servicio de Amazon EC2 con el que podía disponer de instancias de máquinas y discos virtuales bajo demanda comprobé que en ocasiones el servicio no funcionaba correctamente y me encontraba con muchas dificultades a la hora de encontrar información sobre como corregir los errores y configurar el servicio adecuadamente. Así que me puse a buscar otro proveedor que cumpliera con mis exigencias: pago por uso, rápido uso del servicio y que proporcionara plantillas de máquinas virtuales.

En esta ocasión me decidí a probar el servicio de CloudShare, este proveedor no ofrece pago por uso pero proporciona un precio muy atractivo y prestaciones interesantes. En concreto dispone de dos planes Standard y Enterprise, además de la posibilidad de probar el servicio de forma gratuita.

La versión Standard proporciona un pool de recursos de 10GB de RAM, 300GB de disco y 10 CPU’s los cuales podemos repartir entre distintas instancias. Proporciona también una serie de plantillas de instancias muy variadas, incluso una con SharePoint Server 2010!!!.

La forma de utilizar estas instancias es o bien mediante una consola del navegador o bien por escritorio remoto.

Otra de las funcionalidades que me han llamado la atención es que todas nuestras instancias se pueden comunicar entre ellas sin necesidad de realizar ninguna configuración adicional.

Una de las limitaciones de la versión Standard es que las instancias no están encendidas continuamente, al cabo de 90 minutos se suspenden de forma automática por lo que no nos valdrá para publicar aplicativos.

Sin embargo la versión Enterprise si que permite tener instancias 24x7 y está pensada para alojar entornos de muchas instancias como por ejemplo laboratorios.

 

Mi resumen es que estoy satisfecho con el servicio aunque todavía necesita algunos ajustes, de momento me he evitado tener que realizar una inversión grande para disponer de mi entorno de desarrollo, lo recomiendo para desarrolladores, cursos y laboratorios que requieran de gran cantidad de recursos.

@mariocortesf

 

image

image

image

lunes, 28 de febrero de 2011

Deshabilitar vista explorador con Excel Services

Excel Services consiste en un servicio de SharePoint 2010 que permite manejar ficheros Excel desde un entorno Web. Su principal objetivo es el de proveer de la potencia de cálculo de Excel mediante SharePoint.

Otra de sus cualidades es que se puede compartir gráficos, tablas dinámicas, … pero sin llegar a compartir las fórmulas y los datos de los que se obtienen.

image

Desde el post MOSS: Guías paso a paso de Excel Services y otros recursos! encontraréis una serie de artículos adicionales sobre cómo habilitar y configurar este servicio.

Uno de los problemas que encontraremos al habilitar Excel services es que todos los documentos con extensión .XLSX de la colección de sitios se abrirán por defecto en modo explorador aunque tengamos marcado que se muestre en modo cliente desde la biblioteca de documentos.

image

Para forzar que se abran los ficheros Office en modo cliente habilitaremos la feature “OpenInClient”, para éllo abriremos una consola de PowerShell:

$defaultOpenBehaviorFeatureId = $(Get-SPFeature -limit all | where {$_.displayname -eq "OpenInClient"}).Id

Con el Cmdlet Get-SPFeature devuelve un listado de las features disponibles, y mediante “where” aplicamos un filtro para obtener la feature cuya propiedad DisplayName sea igual a “OpenInClient”. Una vez obtenido el id de la feature y activaremos la feature.

Get-SPSite http://c8191497276/sitios/excelservices/ -limit ALL |foreach{ Ensable-SPFeature $defaultOpenBehaviorFeatureId -url $_.URL }

iisreset

image

image

 

Desde el post Configure the default open behavior for browser-enabled documents (Office Web Apps) encontrareis más información sobre como activar desactivar la funcionalidad browser-enabled.

lunes, 14 de febrero de 2011

Envío de alertas con Task Scheduler

I Love PowerShell, como hoy es el día de los enamorados quería tener un pequeño detalle con una herramienta a la que cada vez estoy cogiendo más aprecio, aunque muchos piensan que es solo para los administradores de sistemas, están muy equivocados, también es una herramienta para los desarrolladores. En esta ocasión he podido implementar una funcionalidad de monitorización con PowerShell y el TaskScheduler de Winwdows.

Mediante el programador de tareas de Windows 2008 podemos planificar tareas en base a un evento de sistema e incluso podemos añadirle ciertas condiciones. Para mí una de las funcionalidades más interesantes es la de poder notificar vía mail al producirse un error crítico en nuestro aplicativo. En concreto lo estoy utilizando para notificar errores de mis componentes de SharePoint, mediante el servicio SPDiagnosticsService podemos realizar una entrada en el log de sucesos windows con nuestro propio código con un código similar al siguiente:

SPDiagnosticsService diagSvc = SPDiagnosticsService.Local; 
WriteEvent(MiCodigoDeError, new SPDiagnosticsCategory(CATEGORIA, TraceSeverity.VerboseEx, EventSeverity.Error), Microsoft.SharePoint.Administration.EventSeverity.ErrorCritical, "Exception: {0} {1}”, new object[] { ex.Message, ex.StackTrace});



Una vez dispongamos de una entrada en el log de windows podemos asociarle una tarea seleccionando el evento y pulsando en “Attach task to this Event…”, se iniciará entonces un asistente para definir la tarea asociada al evento pudiendo seleccionar entre tres tipos de acciones: lanzar un programa, enviar un mail y mostrar un mensaje. Aunque lo ideal sería seleccionar la acción de “Enviar un mail” lo cierto es que esta acción solo envía un mail estático por lo que no podremos utilizarla si deseamos que nos indique en el mail el mensaje del evento que lanzó la acción.



Aquí es donde llega nuestro amigo PowerShell, con el que obtendremos el mensaje del último evento producido y enviáremos un mail con el formato que deseemos Sonrisa



imageimage



 



Lo primero será obtener el mensaje del evento que lanzó la tarea programada, para ello dispondremos del cmdlet Get-WinEvent. Con el siguiente script podremos por ejemplo obtener un listado con todas las entradas en el log de windows con el código 4664: 



Get-WinEvent -LogName "Application" | where {$_.Id -eq 4664} 



image



Para obtener el último mensaje limitaremos los resultados a 1 elemento y poder manejar una instancia de la clase :



$event = Get-WinEvent -LogName "Application" -MaxEvents 1 | where {$_.Id -eq 4664} 

$event.Message



image



Ahora solo quedaría componer el mail de la siguiente forma:







$emailFrom = "mailorigen" 
$emailTo = "maildestino"
$subject = "Error portal"
$body = $event.MachineName + " " + $event.Message

$smtpServer = "DirecciónSMTP"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($emailFrom, $emailTo, $subject, $body)



Una vez tengamos el script completo lo guardaremos en un fichero con extensión “.ps1” e indicaremos en la acción que ejecute nuestro ps1 con una expresión similar a la siguiente:



%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe –Noninteractive C:\Windows\System32\TaskSendMail.ps1


image

jueves, 3 de febrero de 2011

[Tips SharePoint 2010] Qué bases de datos estoy utilizando?

En SharePoint 2010 las bases de datos se reproducen como champiñones, el problema lo podemos tener cuando tenemos varias aplicaciones web utilizando el asistente o queremos realizar un plan de mantenimiento desde SqlServer. Para saber las bases de datos que estamos utilizando podemos verlo desde la Administración central > Upgrade and migration > Review database status

Si preferimos utiliza PowerShell para obtener el listado de bases de datos:

Get-SPDatabase | Format-Table DisplayName, Name, Server –auto

o también:

Get-SPDatabase | foreach {$_.DisplayName, $_.Name, $_.Server}

 

image image