Virtual Center : service vpxd ne démarre plus

Publié par Tpeltier le

Service vpxd ne démarre plus

[2009-04-19 11:49:30.003 'App' 3180 error] Unhandled exception <Error[VdbODBCErr
or] (-1) "ODBC error: (42000) - [Microsoft][ODBC SQL Server Driver][SQL Server]C
ould not allocate space for object 'VPX_EVENT' in database 'VCDB' because the 'P
RIMARY' filegroup is full." is returned when executing SQL statement "INSERT INT
O VPX_EVENT (EVENT_ID, CHAIN_ID, EVENT_TYPE, CREATE_TIME, USERNAME, CATEGORY, VM
_NAME, HOST_NAME, COMPUTERESOURCE_TYPE, COMPUTERESOURCE_NAME, DATACENTER_NAME) V
ALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)">

C:Program FilesVMwareVMware VirtualCenter 2.0>

Les tables d’events sont pleines ! 🙁

Procédure :

Ouvrir l’utilitaire MSSQL pour lancer les requêtes sql suivantes :

backup log VCDB with truncate_only
go
dbcc shrinkfile (VCDB_log,0)
go
dbcc sqlperf(logspace)
go

The tables where the data is stored are VPX_TASK (Tasks) and VPX_EVENT, VPX_EVENT_ARG (Events). The VPX_EVENT_ARG will usually have more rows then the VPX_EVENT table. This is because the VPX_EVENT table only has one row per event but the VPX_EVENT_ARG table can have multiple rows per event (The link between the 2 tables is the EVENT_ID column).

  • Shutdown the VirtualCenter service
  • Connect to the database server that is hosting the VC database with a SQL browser/client. You can use a free tool like WinSQL Lite (http://www.snapfiles.com/get/winsql.html) for this.
  • Backup the log database : BACKUP LOG VCDB WITH NO_LOG ( VCDB is the database name )
  • To delete all data in the tables type: « DELETE FROM [VCDB].[dbo].[VPX_TASK] » then « DELETE FROM [VCDB].[dbo].[VPX_EVENT] » and then « DELETE FROM [VCDB].[dbo].[VPX_EVENT_ARG] » and finally « Commit »
  • To selectively delete data older then 30 days: « delete from VPX_TASK where complete_time < sysdate – 30) »
  • To selectively delete data older then 30 days from VPX_EVENT and VPX_EVENT_ARG is trickier because VPX_EVENT_ARG does not have a date field and it tied to the events in VPX_EVENT by the Event_id field.
  • First delete from the child table (VPX_EVENT_ARG): « delete from vpx_event_arg where event_id in (select a.event_id from vpx_event_arg a, vpx_event b where a.event_id = b.event_id and create_time < sysdate – 30)
  • Next commit the delete by typing « Commit »
  • Then delete from the parent table (VPX_EVENT): « delete from vpx_event where create_time < sysdate – 30’ »
  • Finally commit again by typing « Commit »
  • Start the VirtualCenter service

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.