需求:
在CustomField内建立一个新的Option。
错误信息:
com.atlassian.jira.exception.DataAccessException: org.ofbiz.core.entity.GenericEntityException: while inserting: [GenericEntity:CustomFieldOption][id,12137]
错误分析:
此错误是由于创建此选项时,系统自动分配的id已经给其他的选项占用,为什么会被占用?
是由于上次cmdb内的大批CustomFieldOption 通过外部程序同步到jira上,此操作不会更新SEQUENCE_VALUE_ITEM表内CustomFieldOption的SEQ_ID值,只有在jira系统内建立才会更新。
而在jira系统上去创建一个CustomFieldOption时系统默认会从SEQ_ID值12220里面去分配一个,比如12137,因为被使用所以会报上面错误。
下面语句为如何查询CustomFieldOption的SEQ_ID值和CustomFieldOption表内所有使用的ID
mysql> select * from SEQUENCE_VALUE_ITEM where SEQ_NAME like ‘%CustomFiel%‘;
+-------------------+--------+
| SEQ_NAME | SEQ_ID |
+-------------------+--------+
| CustomField | 12330 |
| CustomFieldOption | 12220 |
| CustomFieldValue | 548797 |
+-------------------+--------+
3 rows in set (0.00 sec)
select* from CustomFieldOption ;
| 12311 | 12038 | 12239 | 12202 | 0 | 内存25G,磁盘100G | NULL | N |
| 12312 | 12038 | 12239 | 12202 | 1 | 内存30G,磁盘100G | NULL | N |
| 12313 | 12038 | 12239 | 12202 | 2 | 内存45G,磁盘100G | NULL | N |
| 12314 | 12038 | 12239 | 12202 | 3 | 内存15G,磁盘100G | NULL | N |
| 12315 | 12038 | 12239 | 12202 | 4 | 内存12G,磁盘100G | NULL | N |
| 12316 | 12038 | 12239 | 12202 | 5 | 内存6G,磁盘100G | NULL | N |
| 12317 | 12038 | 12239 | 12202 | 6 | 内存9G,磁盘100G | NULL | N |
| 12318 | 12038 | 12239 | 12202 | 7 | 内存20G,磁盘100G | NULL | N |
| 12319 | 12038 | 12239 | NULL | 0 | supor_idc | NULL | Y |
| 12320 | 12143 | 12343 | NULL | 0 | OpsService_运维基础服务 | NULL | N
解决方法:
方法一、手动把SEQUENCE_VALUE_ITEM表内CustomFieldOption的SEQ_ID值改成超过12320,改变后需重启jira才能生效。
方法二、到jira系统内不断新建CustomFieldOption字段以达到CustomFieldOption表内的ID超过12320
考虑到jira重启会造成短暂无法使用,故使用第二种方法,不断新建后达到SEQUENCE_VALUE_ITEM表内CustomFieldOption的SEQ_ID值变成了12420
mysql> select * from SEQUENCE_VALUE_ITEM where SEQ_NAME like ‘%CustomFiel%‘;
+-------------------+--------+
| SEQ_NAME | SEQ_ID |
+-------------------+--------+
| CustomField | 12330 |
| CustomFieldOption | 12420 |
| CustomFieldValue | 548897 |
+-------------------+--------+
3 rows in set (0.00 sec)