SQL を使用して Jira サーバーからアプリケーション リンクを取り除く

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

目的

システム停止、データベースの破損、他の特定されていない原因などの発生後の特定の状況において、Jira のアプリケーション リンク (「アプリケーション リンクの設定」を参照) が破損する可能性があります。

このような場合、回避策として破損したアプリケーションをデータベースから直接取り除きます。このナレッジベース記事では、この方法について説明します。

診断

各アプリケーション リンクはアプリケーション キーで特定されます。次のクエリを実行して、どのキーがどのアプリケーションに所属するかを特定します。

SELECT SUBSTR(a.property_key,16,36) as "Application Key", b.propertyvalue as "Application Name" FROM propertyentry a join propertystring b on a.id=b.id where a.property_key like 'applinks.admin%name';

-- NOTE: For Microsoft SQLServer use the following query:
SELECT substring(a.property_key,16,36) as "Application Key", b.propertyvalue as "Application Name" FROM propertyentry a join propertystring b on a.id=b.id where a.property_key like 'applinks.admin%name';


このクエリの結果は次のようなものになります。

+--------------------------------------+--------------------+
| Application Key                      | Application Name   |
+--------------------------------------+--------------------+
| 2c66970e-35f8-365f-bc65-f535d7edf1a1 |     Confluence     |
| f365831f-1827-3ecf-a992-1dff949398b1 |      Fisheye       |
+--------------------------------------+--------------------+
2 rows in set (0.00 sec)

ソリューション

データベースの変更を行う場合は 必ず事前にバックアップを取得してください。可能な場合はテスト サーバーで変更を試すことをおすすめします。

この例では、Confluence アプリケーションを取り除きます。アプリケーション キーは 2c66970e-35f8-365f-bc65-f535d7edf1a1 です。

これらのクエリの一部はアプリケーション リンクが設定された認証タイプに応じるため、結果を返さない可能性があります。

  1. Jira をシャットダウンします。
  2. 診断セクションの上述の SQL を使用して取り除く必要があるアプリケーションのアプリケーション キーを特定したら、次のクエリを次の順序で実行します。

    DELETE FROM oauthspconsumer WHERE consumer_key IN (SELECT propertyvalue FROM propertystring WHERE id IN (SELECT id FROM propertyentry WHERE property_key LIKE 'applinks.%2c66970e-35f8-365f-bc65-f535d7edf1a1%'));
    
    -- NOTE: For Microsoft SQLServer use the following query:
    DELETE FROM oauthspconsumer WHERE consumer_key IN (SELECT CONVERT(NVARCHAR(MAX), propertyvalue) FROM propertystring WHERE id IN (SELECT id FROM propertyentry WHERE property_key LIKE 'applinks.%2c66970e-35f8-365f-bc65-f535d7edf1a1%'));
    DELETE FROM oauthconsumertoken WHERE token_key LIKE '%2c66970e-35f8-365f-bc65-f535d7edf1a1%';
    DELETE FROM trustedapp WHERE application_id IN (SELECT propertyvalue FROM propertystring WHERE id IN (SELECT id FROM propertyentry WHERE property_key LIKE 'applinks.%2c66970e-35f8-365f-bc65-f535d7edf1a1%')); 
    
    -- NOTE: For Microsoft SQLServer use the following query:
    DELETE FROM trustedapp WHERE application_id IN (SELECT CONVERT(NVARCHAR(MAX), propertyvalue) FROM propertystring WHERE id IN (SELECT id FROM propertyentry WHERE property_key LIKE 'applinks.%2c66970e-35f8-365f-bc65-f535d7edf1a1%')); 
    DELETE FROM propertystring WHERE id IN (SELECT id FROM propertyentry WHERE property_key LIKE 'applinks.%2c66970e-35f8-365f-bc65-f535d7edf1a1%');
    DELETE FROM propertyentry WHERE property_key LIKE 'applinks.admin.2c66970e-35f8-365f-bc65-f535d7edf1a1%';
  3. Fisheye インスタンスの場合、次のクエリを実行してデータベースのプロパティとプロジェクト リンクを取り除きます。

    DELETE FROM propertytext WHERE id in (SELECT id FROM propertyentry WHERE property_key LIKE '%ual.2c66970e-35f8-365f-bc65-f535d7edf1a1%');
    
    DELETE FROM propertyentry WHERE property_key LIKE '%ual.2c66970e-35f8-365f-bc65-f535d7edf1a1%';
    
    DELETE FROM propertyentry WHERE id in (SELECT id FROM propertystring WHERE propertyvalue LIKE '%2c66970e-35f8-365f-bc65-f535d7edf1a1%');
    
    DELETE FROM propertystring WHERE propertyvalue LIKE '%2c66970e-35f8-365f-bc65-f535d7edf1a1%';
    
    DELETE FROM propertyentry WHERE id in (SELECT id FROM propertytext WHERE propertyvalue LIKE '%2c66970e-35f8-365f-bc65-f535d7edf1a1%');
    
    DELETE FROM propertytext WHERE propertyvalue LIKE '%2c66970e-35f8-365f-bc65-f535d7edf1a1%';
  4. 次の SQL を使い、アプリケーションの一覧からアプリケーション キーを取り除きます。

    UPDATE propertystring SET propertyvalue = REPLACE(propertyvalue,'\n2c66970e-35f8-365f-bc65-f535d7edf1a1','') where id in (select id from propertyentry where property_key like 'applinks.global%');
    
    -- NOTE: For Microsoft SQLServer use the following query:
    UPDATE propertystring SET propertyvalue = CAST(REPLACE(CAST(propertyvalue as NVarchar(MAX)), CHAR(10)+'2c66970e-35f8-365f-bc65-f535d7edf1a1','') AS NText) where id in (select id from propertyentry where property_key like 'applinks.global%');
    
    -- NOTE: For Oracle use the following query:
    UPDATE propertystring SET propertyvalue = REPLACE(propertyvalue, chr(10) || '2c66970e-35f8-365f-bc65-f535d7edf1a1','') where id in (select id from propertyentry where property_key like 'applinks.global%');

    (info) 注意 1: 上述の 1 つめのクエリでは、アプリケーション キーの前に改行 (\n) があります。これは、アプリケーション リンクの一覧での空白行を防ぐために必要です。詳細については、Microsoft の「Specify Field and Row Terminators (SQL Server)」ドキュメントをご確認ください。

    (info) 注意 2: Oracle データベースを使用する場合、すべての変更をデータベースにコミットするために "commit" を実行するようにします。Oracle により、実行されたが Jira に変更が反映されないコマンドが表示されます。
    (info) 注意 3: 2 つめのクエリ (Microsoft SQL Server 用) では、アプリケーション キーの手前でパラメーター CHAR(10)+ を使用しています。これは、アプリケーション キーの分割に改行ではなくシンプルな空白が使われているが、これが REPLACE 機能では許可されず、このため、シンプルな空白をその文字コードで置き換える必要があるためです。

  5. Jira を起動します。


(warning) アプリケーション リンクの一覧に空白行があった場合、次の atlassian-jira.log の例のようにエラーが発生する可能性があります。

2012-05-18 11:23:17,150 Spring executor 8 ERROR      [plugin.osgi.factory.OsgiPlugin] Unable to start the Spring context for plugin com.atlassian.jira.plugin.ext.bamboo
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gadgetListener' defined in URL [bundle://60.0:0/META-INF/spring/atlassian-plugins-components.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: id must be a valid java.util.UUID string: 
    ...
org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: id must be a valid java.util.UUID string: 
    ...
Caused by: java.lang.IllegalArgumentException: Invalid UUID string: 
    at java.util.UUID.fromString(Unknown Source)
    at com.atlassian.applinks.api.ApplicationId.<init>(ApplicationId.java:34)

このようなエラーが発生した場合、次のクエリの結果を参考に、空白行がないことを確認します。

select * from propertystring where id in (select id from propertyentry where property_key like 'applinks.global%');

(info) ご利用の DBMS に応じて上述の SQL を変更する必要がある可能性があります。詳細については社内の DBA にご相談ください。

代替ソリューション

ソリューションが役に立たない場合、「Fisheye のアプリケーション リンクを取り除けない」記事をご確認ください。

(info) これは Fisheye/Crucible アプリケーションにのみ適用されます。

最終更新日 2019 年 9 月 25 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.