问题描述
在 vCenter A 创建并发布内容库后,于 vCenter B 订阅并进行同步时出现以下错误:
出现常规运行时错误。发生错误: result returns more than one elements; nested exception is javax.persistence.NonUniqueRe原因分析
该错误通常由数据库中存在重复条目引起,与内容同步端口(如 KB 1005189 中提到的 902 端口)无关。
解决方案
前提准备
- 对 vCenter 进行备份:
在执行任何数据库操作前,必须为涉及的所有 vCenter Server 创建离线快照。若 vCenter 处于 Linked Mode 中,需将所有节点关机后进行快照操作。 - 操作风险说明:
直接操作数据库存在一定风险,请谨慎执行以下步骤。
操作步骤
- 登录 vCenter 命令行
通过 SSH 或控制台访问 vCenter 服务器的命令行界面。 - 连接数据库
执行以下命令以访问 PostgreSQL 数据库: - /opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres
- 检查重复条目
在数据库命令行中执行以下查询,确认是否存在重复数据: - SELECT * FROM cl_libraryitem_certificate_verification;
- 删除重复数据
若确认存在重复条目,执行以下命令删除重复项(请整体复制并执行): - DELETE FROM cl_libraryitem_certificate_verification cert_ver_old USING ( SELECT MIN(ctid) as ctid, itemId FROM cl_libraryitem_certificate_verification GROUP BY itemId HAVING COUNT(*) > 1 ) cert_ver_new WHERE cert_ver_new.itemId = cert_ver_old.itemId AND cert_ver_new.ctid <> cert_ver_old.ctid;
- 重新尝试同步 re-sync
完成数据库操作后,返回 vCenter B 的内容库管理界面,重新尝试同步操作。
验证与后续
- 若同步操作顺利完成,则问题已解决。
- 如问题仍然存在,请检查 vCenter 日志(如 vcdb.log 或 content-library.log)以获取更多线索,或联系 VMware 技术支持进一步排查。
注意事项
- 数据库操作需严格遵循步骤,误操作可能导致数据不一致或系统异常。
- 如处于生产环境,建议在维护窗口内进行操作。
如果有其他问题或需要进一步协助,请提供更多错误日志或详细描述。