SQL スクリプトを修正して Automation For Jira のエラー「ルールの削除中/更新中のエラー」を解決する方法
プラットフォームについて: Data Center のみ。 - この記事は、 Data Center プラットフォーム。
この KB は Data Center バージョンの製品用に作成されています。Data Center 固有ではない機能の Data Center KB は、製品のサーバー バージョンでも動作する可能性はありますが、テストは行われていません。 Server* 製品のサポートは 2024 年 2 月 15 日に終了しました。Server 製品を実行している場合は、 アトラシアン Server サポート終了 のお知らせにアクセスして、移行オプションを確認してください。
*Fisheye および Crucible は除く
要約
Automation for Jira (A4J) を 7.3.0 または 9.0.2 より前のバージョン (ある時点で 7.3.0 より前のバージョンを使用した場合) からそれらのバージョンまたは新しいバージョンにアップグレードする場合、または Jira SW/JSM が 9.11.0/5.11.0 より前のバージョンからそれらのバージョンまたは新しいバージョンにアップグレードされ、環境が MySQL または MSSQL で設定されている場合、ルールを更新または削除しようとすると「Error while updating/deleting rule. Error Please reload and try again" can be thrown
」というエラー メッセージが表示されます。
この記事 (下の「診断」セクションも参照) で紹介している解決策では、SQL スクリプトを実行してデータベースを修正することを推奨しています。ただし、環境内に予期しないインデックスが存在するためにこれに失敗するお客様もいらっしゃいます。適切に実行するにはインデックスをスクリプトに追加するか、インデックスを削除してください。
診断
ルールを編集または削除すると、UI に次のエラー メッセージが表示されます。
ログの関連メッセージは次のようになっています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2023-11-27 15:14:22,748-0600 http-nio-8080-exec-7 ERROR user1 914x253122x1 1pcxlou 10.0.0.1 /rest/cb-automation/latest/project/GLOBAL/rule/135 [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: Caught SQLServerException for delete from "jiraschema"."AO_589059_RULE_TO_SECRET"
where "AO_589059_RULE_TO_SECRET"."RULE_ID" = ?
com.querydsl.core.QueryException: Caught SQLServerException for delete from "jiraschema"."AO_589059_RULE_TO_SECRET"
where "AO_589059_RULE_TO_SECRET"."RULE_ID" = ?
at com.querydsl.sql.DefaultSQLExceptionTranslator.translate(DefaultSQLExceptionTranslator.java:50)
at com.querydsl.sql.Configuration.translate(Configuration.java:459)
at com.querydsl.sql.dml.SQLDeleteClause.execute(SQLDeleteClause.java:222)
at com.codebarrel.jira.plugin.automation.store.JiraAutomationConfigStore.lambda$delete$14(JiraAutomationConfigStore.java:299)
at com.codebarrel.data.api.jira.JiraDbConnectionManager.lambda$execute$0(JiraDbConnectionManager.java:47)
at com.atlassian.jira.database.DatabaseAccessorImpl.executeQuery(DatabaseAccessorImpl.java:74)
...
at com.codebarrel.data.api.jira.JiraDbConnectionManager.execute(JiraDbConnectionManager.java:45)
at com.codebarrel.jira.plugin.automation.store.JiraAutomationConfigStore.delete(JiraAutomationConfigStore.java:285)
at com.codebarrel.jira.plugin.automation.store.CachingAutomationConfigStore.delete(CachingAutomationConfigStore.java:115)
at com.codebarrel.automation.api.service.AutomationConfigServiceImpl.delete(AutomationConfigServiceImpl.java:359)
at com.codebarrel.automation.api.service.AutomationConfigServiceImpl.delete(AutomationConfigServiceImpl.java:352)
at com.codebarrel.jira.plugin.automation.rest.RuleResource.deleteRule(RuleResource.java:358)
...
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'jiraschema.AO_589059_RULE_TO_SECRET'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1632)
...
... 327 more
2023-11-27 15:14:35,316-0600 http-nio-8080-exec-18 ERROR user1 914x253156x2 1pcxlou 10.0.0.1 /rest/cb-automation/latest/secrets/GLOBAL [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: Caught SQLServerException for select "AO_589059_RULE_SECRET"."ID", "AO_589059_RULE_SECRET"."KEY", "AO_589059_RULE_SECRET"."VALUE", "AO_589059_RULE_SECRET"."ID", "AO_589059_RULE_SECRET"."KEY", "AO_589059_RULE_SECRET"."VALUE", "AO_589059_SECRET_PROJ_ASSOC"."PROJECT_ID"
from "jiraschema"."AO_589059_RULE_SECRET" "AO_589059_RULE_SECRET"
left join "jiraschema"."AO_589059_SECRET_PROJ_ASSOC" "AO_589059_SECRET_PROJ_ASSOC"
on "AO_589059_RULE_SECRET"."ID" = "AO_589059_SECRET_PROJ_ASSOC"."RULE_SECRET_ID"
com.querydsl.core.QueryException: Caught SQLServerException for select "AO_589059_RULE_SECRET"."ID", "AO_589059_RULE_SECRET"."KEY", "AO_589059_RULE_SECRET"."VALUE", "AO_589059_RULE_SECRET"."ID", "AO_589059_RULE_SECRET"."KEY", "AO_589059_RULE_SECRET"."VALUE", "AO_589059_SECRET_PROJ_ASSOC"."PROJECT_ID"
from "jiraschema"."AO_589059_RULE_SECRET" "AO_589059_RULE_SECRET"
left join "jiraschema"."AO_589059_SECRET_PROJ_ASSOC" "AO_589059_SECRET_PROJ_ASSOC"
on "AO_589059_RULE_SECRET"."ID" = "AO_589059_SECRET_PROJ_ASSOC"."RULE_SECRET_ID"
at com.querydsl.sql.DefaultSQLExceptionTranslator.translate(DefaultSQLExceptionTranslator.java:50)
...
at com.codebarrel.jira.plugin.automation.store.JiraRuleSecretStore.lambda$getAllSecrets$1(JiraRuleSecretStore.java:47)
at com.codebarrel.data.api.jira.JiraDbConnectionManager.lambda$execute$0(JiraDbConnectionManager.java:47)
...
at com.codebarrel.data.api.jira.JiraDbConnectionManager.execute(JiraDbConnectionManager.java:45)
at com.codebarrel.jira.plugin.automation.store.JiraRuleSecretStore.getAllSecrets(JiraRuleSecretStore.java:41)
at com.codebarrel.jira.plugin.automation.store.CachingRuleSecretStore.getAllSecrets(CachingRuleSecretStore.java:61)
at com.codebarrel.automation.api.service.RuleSecretServiceImpl.getAllSecrets(RuleSecretServiceImpl.java:64)
at com.codebarrel.jira.plugin.automation.rest.SecretsResource.lambda$getSecretsForProject$0(SecretsResource.java:44)
at com.codebarrel.jira.plugin.automation.rest.SecretsResource.withJiraAdminPermissions(SecretsResource.java:127)
at com.codebarrel.jira.plugin.automation.rest.SecretsResource.getSecretsForProject(SecretsResource.java:44)
...
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'jiraschema.AO_589059_RULE_SECRET'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1632)
...
... 331 more
関連記事
Automation for Jira を 9.0.1 以上のバージョンにアップグレード後、自動化ルールを有効/無効にしたり公開したりできない
Automation for Jira のアップグレードまたはアップデート後に Automation for Jira が動作しない
記事「Automation for Jira 7.3 以降にアップグレードする」(他の記事でも言及されています) の説明に従ってスクリプトを実行すると、環境によっては、以下の例のようにインデックスに関連するエラーが表示されることがあります (ただし、これらに限定されません)。
1
2
3
4
5
6
7
8
Msg 3701, Level 11, State 7, Line 17
Cannot drop the index 'jiraschema.AO_589059_AUDIT_ITEM_COMP_CGE.index_ao_589059_aud1292482400', because it does not exist or you do not have permission.
Msg 5074, Level 16, State 1, Line 18
The index 'AO_589059_AUDIT_ITEM_COMP_CGE_10052021' is dependent on column 'AUDIT_ITEM_ID'.
Msg 5074, Level 16, State 1, Line 18
The index 'AO_589059_AUDIT_ITEM_COMP_CGE_0110052021' is dependent on column 'AUDIT_ITEM_ID'.
Msg 4922, Level 16, State 9, Line 18
ALTER TABLE ALTER COLUMN AUDIT_ITEM_ID failed because one or more objects access this column.
原因
該当なし
ソリューション
まず、下位環境でこの解決策を実行することを強くお勧めします。
「Automation for Jira 7.3 以降にアップグレードする」に記載されているスクリプトでは、プレーンな Jira のインデックスのみが考慮されます。データベースに違いがあると、スクリプトの実行は失敗します。これを解決するには以下を実行してください。
環境内に存在するすべてのインデックスを以下のコードで一覧表示します (必要に応じて調整してください)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT
TableName = t.name,
IndexName = ind.name,
IndexId = ind.index_id,
ColumnId = ic.index_column_id,
ColumnName = col.name,
ind.*,
ic.*,
col.*
FROM
sys.indexes ind
INNER JOIN
sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN
sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
INNER JOIN
sys.tables t ON ind.object_id = t.object_id
WHERE
ind.is_primary_key = 0
AND ind.is_unique = 0
AND ind.is_unique_constraint = 0
AND t.is_ms_shipped = 0
ORDER BY
t.name, ind.name, ind.index_id, ic.is_included_column, ic.key_ordinal;
Jira を停止してデータベースをバックアップします。
クエリ結果で ao_589059_* テーブルに関連するインデックスと比較して、カスタム インデックスを削除します (カスタム インデックスがすでにわかっている場合はカスタム インデックスを削除するだけでも構いません)。
「Automation for Jira 7.3 以降にアップグレードする」に記載されているスクリプトをもう一度実行します (エラーなしで実行されるはずです)。
Jira を再起動します。
A4J エラーがなくなったかどうかをテストします。
(Jiraを停止した状態で) 必要に応じてカスタム インデックスを再作成します。
インデックスやこのプロセスについて質問または不明点がある場合は、アトラシアン サポートに連絡のうえ、A4J エラーのスクリーンショット、サポート zip、上記のクエリの結果を添付してチケットを起票してください。
この内容はお役に立ちましたか?