Si usamos VMware ESX como sistema de virtualización y lo tenemos clusterizado con VMware vCenter, es posible que en algún momento el vCenter empiece a ir lento y no nos muestre las máquinas virtuales correctamente, dejarán de funcionar los servicios que usen su API como Veeam Backup, no podremos conectar al vSphere Client ni al vSphere Web Client y si conseguimos conectarnos obtendremos desconexiones o errores como «Health status monitoring«. También puede que nos muestre las máquinas virtuales del clúster con la etiqueta «Orphaned» y, además, inhabilitadas. Os explicamos una posible causa de estos errores y problemas y cómo solucionarla.

Escenario de trabajo con VMware ESX, VMware vCenter y SQL Server Express

Si tenemos un entorno de virtualización con servidores VMware ESX y tenemos el entorno clusterizado con VMware vCenter, sobre base de datos Microsoft SQL Server Express, puede que nos encontremos con este problema transcurrido un tiempo de la instalación.

VMware vCenter necesita una máquina virtual (habitualmente sobre Microsoft Windows Server 2012), en dicha máquina los servicios de VMware vCenter almacenan toda la información de estadísticas y otros datos del cluster en una base de datos, puede ser Oracle, SQL Server, PostgreSQL u otras. Por defecto vCenter se instala sobre una base de datos SQL Server Express, la versión gratuita de la base de datos SQL de Microsoft. Esta versión, entre sus limitaciones, tiene la de tamaño máximo de los ficheros de datos de 10 GB.

Escenario de trabajo con VMware ESX, VMware vCenter y SQL Server Express

El archivo anterior, de 10.4 GB: VIM_VCDB.mdf, será el que indique el tamaño de la BD, en este caso totalmente llena.

También se puede ver el espacio usado por la BD desde Microsoft SQL Management Studio, conectarnos con un usuario con permisos de administrador y pulsar sobre las propiedades de la BD, en nuestro caso sobre VIM_VCDB:

Escenario de trabajo con VMware ESX, VMware vCenter y SQL Server Express

En «General», en «Tamaño» nos indicará el tamaño ocupado por la BD, que no debe superar los 10.000MB:

Escenario de trabajo con VMware ESX, VMware vCenter y SQL Server Express

Si la base de datos llega al tamaño máximo de 10 GB, y esto puede ocurrir transcurridos unos meses desde la instalación y puesta en marcha del clúster vCenter, nos encontraremos con que el vCenter dejará de funcionar, al principio nos permitirá hacer algunas tareas, incluso acceder a la administración del vCenter a través de vSphere Web Client o vSphere Client, pero se nos cortará la conexión y otras tareas darán error.

Al final acabará yendo muy lento el acceso a la administración del vCenter (o fallando directamente) y si conseguimos acceder nos mostrará mensajes como:

  • Health status monitoring.
  • Lost connection.

Las máquinas virtuales no serán accesibles, o las marcará como inhabilitadas y con la etiqueta «Orphaned»:

Escenario de trabajo con VMware ESX, VMware vCenter y SQL Server Express

A continuación indicamos cómo vaciar la base de datos SQL Server Express de VMware vCenter para liberar espacio y bajar de ese límite de 10 GB. Lo que haremos será eliminar datos estadísticos y de eventos, innecesarios, salvo para análisis y auditorías de problemas.

Antes de continuar, es imprescindible hacer copia de seguridad de la base de datos SQL Server Express

Puesto que vamos a realizar una tarea de eliminación de registros en la base de datos SQL Server Express, y dado que podríamos necesitar el histórico de eventos y estadísticas en algún momento para depurar algún posible error, es MUY conveniente realizar una copia de seguridad de toda la base de datos antes de continuar.

Podemos hacer la copia de seguridad usando Microsoft SQL Management Studio, en un software gratuito de Microsoft que podemos descargar e instalar y con él acceder a la gestión y administración de la base de datos SQL Server.

Una vez instalado nos conectaremos con un usuario administrador a la base de datos, pulsaremos con el botón derecho del ratón sobre la base de datos de vCenter (por defecto suele ser VIM_VCDB) y seleccionaremos «Tareas» – «Copia de seguridad…»:

Antes de continuar, es imprescindible hacer copia de seguridad de la base de datos SQL Server Express

Elegiremos la base de datos, en tipo indicaremos «Completa», marcaremos «Copia de seguridad en: Disco» (si no disponemos de unidad de cinta), elegiremos un destino pulsando «Agregar» y pulsaremos «Aceptar» para hacer la copia de seguridad:

Antes de continuar, es imprescindible hacer copia de seguridad de la base de datos SQL Server Express

Si queremos hacer el backup mediante script, desde la línea de comandos, sería algo así:

Liberar espacio de eventos y estadísticas en BD SQL Server de VMware vCenter

En primer lugar detendremos todos los servicios de vCenter, para ello accederemos a «services.msc» e iremos deteniendo los servicios:

Liberar espacio de eventos y estadísticas en BD SQL Server de VMware vCenter

Hay que tener en cuenta que al detener estos servicios el cluster vCenter dejará de funcionar, pero NO las máquinas virtuales que contenga, seguirán operativas aunque sin posibilidad de aplicarles tareas (migración, exportación, ..).

Copiaremos el siguiente script a un fichero de texto plano, que podemos abrir con el bloc de notas (notepad) y lo llamaremos «script_vaciar.sql», lo guardaremos en el raíz de C:

Abriremos una ventana de MS-DOS como administrador:

Liberar espacio de eventos y estadísticas en BD SQL Server de VMware vCenter

Y ejecutaremos el siguiente script:

Donde:

  • 4 indica el número de días a partir de los cuales se eliminarán los log. De esta forma podemos mantener los log de los últimos 4 días.
  • localhost\VIM_SQLEXP: indicaremos aquí el nombre o IP del servidor de la base de datos y el nombre de la instancia.
  • VIM_VCDB: nombre de la base de datos de vCenter.
  • C:\script_vaciar.sql: la ubicación y el nombre del fichero sql de script a ejecutar.
Liberar espacio de eventos y estadísticas en BD SQL Server de VMware vCenter

El resultado del script:

sqlcmd -E -S localhost\VIM_SQLEXP -d VIM_VCDB -v TaskMaxAgeInDays=4 -v Event
MaxAgeInDays=4 -v StatMaxAgeInDays=4 -i C:\script_vaciar.sql
———————————————————
Database cleanup may take long time depends from size of
VPX_TASK, VPX_EVENT, VPX_SAMPLE_TIME1, VPX_SAMPLE_TIME2,
VPX_SAMPLE_TIME3, VPX_SAMPLE_TIME4
and all VPX_HIST_STATx_y tables
———————————————————-
Starting task cleanup at Oct 6 2017 12:09PM
———————————————————-
Starting event cleanup at Oct 6 2017 12:09PM
———————————————————-
Starting statistics cleanup at Oct 6 2017 12:11PM
———————————————————-
Starting cleanup orphan data at Oct 6 2017 12:11PM
———————————————————-
Done at Oct 6 2017 12:13PM
———————————————————-

Opción de eliminación de estadísticas y eventos de vCenter más drástica

Otra opción más drástica que la anterior es ejecutar el siguiente script (siguiendo los mismos pasos que en el caso anterior, cambiando el contenido del fichero SQL):

En este caso se eliminará todo el contenido de las tablas cuyo nombre empiece por VPX_HI y por VPX_SAMPLE. En el caso anterior nos permite indicar el número de días que queremos mantener los log.

Error 9002 The transaction log for database ‘VIM_VCDB’ is full en SQL Server

Si al ejecutar el script se produce el error:

Database cleanup may take long time depends from size of
VPX_TASK, VPX_EVENT, VPX_SAMPLE_TIME1, VPX_SAMPLE_TIME2,
VPX_SAMPLE_TIME3, VPX_SAMPLE_TIME4
and all VPX_HIST_STATx_y tables

Starting task cleanup at Oct 6 2017 9:02AM
Starting event cleanup at Oct 6 2017 9:02AM

Mensaje 9002, Nivel 17, Estado 4, Servidor servidorvcenter\VIM_SQLEXP, Procedimiento event_part_cleanup_np, Línea 39 The transaction log for database ‘VIM_VCDB’ is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

Puede ser debido a que la base de datos a alcanzado el tamaño máximo y no permitirá ejecutarlo, dado que el script hace algún insert para su correcto funcionamiento. Para solucionar este problema podemos obtener espacio adicional de la siguiente forma:

  • Una opción es eliminar los ficheros de log de la BD, para ello abriremos SQL Server Management Studio (si no lo tenemos instalado lo podemos descargar de la web de Microsoft e instalarlo, es una herramienta gratuita). Una vez descargado e instalado accederemos al equipo con un usuario administrador, abriremos la aplicación SQL Server Management Studio y nos conectaremos a la base de datos del vCenter:
Error 9002 The transaction log for database 'VIM_VCDB' is full en SQL Server
  • A continuación pulsaremos con el botón derecho sobre la base de datos del vCenter y elegiremos «Tareas» – «Reducir» – «Archivos»:
Error 9002 The transaction log for database 'VIM_VCDB' is full en SQL Server
  • Seleccionaremos en «Tipo de archivo» la opción «Registro», en «Nombre de archivo» la opción «VIM_VCDB_log» y marcharemos «Liberar espacio no utilizado». Pulsaremos «Aceptar» para ejecutar el proceso:
Error 9002 The transaction log for database 'VIM_VCDB' is full en SQL Server

Si lo queremos realizar mediante script desde la línea de comandos sería:

Otra opción para liberar espacio en la base de datos es compactarla, para ello pulsaremos con el botón derecho del ratón sobre la base de datos, en el menú emergente elegiremos «Tareas» – «Reducir» – «Base de datos»:

Error 9002 The transaction log for database 'VIM_VCDB' is full en SQL Server

Marcaremos la opción «Reorganizar archivos antes de liberar espacio no utilizado» y pulsaremos «Aceptar»:

Error 9002 The transaction log for database 'VIM_VCDB' is full en SQL Server

Para hacerlo mediante script:

Liberar espacio de forma drástica vaciando tablas de log manualmente

Si ninguno de estos procesos anteriores libera espacio suficiente y el script de eliminación de estadísticas de la BD del vCenter sigue dando el mismo error, siempre podremos truncar alguna de las tablas que habitualmente ocupan mucho espacio, por ejemplo VPX_EVENT_ARG.

Desde la consola de SQL Server Management Studio, en «Nueva consulta», podemos ejecutar el siguiente SQL para mostrar el tamaño ocupado por todas las tablas:

En nuestro caso vemos que la tabla dbo.VPX_EVENT_ARG es la que más ocupa y, además, es una tabla de eventos que podría vaciarse, siempre con precaución.

Liberar espacio de forma drástica vaciando tablas de log manualmente

Si decidimos varicarla, siempre haciendo copia de seguridad previamente, podemos hacerlo ejecutando el siguiente script (se puede ejecutar en una ventana de consulta de SQL Server Management Studio:

Teniendo en cuenta que este proceso vaciará las tablas VPX_TASK, VPX_ENTITY_LAST_EVENT, VPX_EVENT y VPX_EVENT_ARG por completo. En el script anterior se eliminan previamente las integridades referenciales para poder vaciar las tablas y luego se vuelven a crear.

Si se ejecuta el proceso anterior, será conveniente hacer una reorganización y compactación, como indicamos aquí.