Jay, Olivier, Azazahmed and Kyle, my logs look pretty much as the one passed here by Kyle: it only looks that the server is setting menu entries (view and menus) as to delete and at the end it deletes them while it was not supposed to happen. I'm not sure why subsequent --update=all doesn't work, then we just get errors about missing records. I'v been able to make a patch that avoid breaking the menus this way, however I'm pretty sure that's only a workaround and not something valid for the long run. Using the following patch I'm finally able to migrate my db without breaking it all: === modified file 'bin/addons/base/ir/ir_model.py' --- bin/addons/base/ir/ir_model.py 2011-01-10 12:33:02 +0000 +++ bin/addons/base/ir/ir_model.py 2011-01-13 16:40:09 +0000 @@ -725,7 +725,9 @@ def _process_end(self, cr, uid, modules): if not modules: return True modules = list(modules) module_in = ",".join(["%s"] * len(modules)) cr.execute('select id,name,model,res_id,module from ir_model_data where module IN (' + module_in + ') and noupdate=%s', modules + [False]) wkf_todo = [] for (id, name, model, res_id,module) in cr.fetchall(): if (module,name) not in self.loads: - self.unlink_mark[(model,res_id)] = id + if module != 'base': + self.unlink_mark[(model,res_id)] = id if model=='workflow.activity': cr.execute('select res_type,res_id from wkf_instance where id IN (select inst_id from wkf_workitem where act_id=%s)', (res_id,)) wkf_todo.extend(cr.fetchall()) So basically, I'm here avoiding to mark base records with noupdate=False as to remove. May be it can put you on the track: do you think it's normal that we select those records in that query? If not how can you explain that? Do you think those records should have a noupdate=True rather than False? Is that possible that some poisoned recent revision put False instead of True in those ir.model.data? Thanks. On Thu, Jan 13, 2011 at 3:01 PM, Jay Vora (OpenERP)