XML からのインポート後にお気に入りの欠落を復元する方法

お困りですか?

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

コミュニティに質問

プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。

Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Fisheye および Crucible は除く

問題

Confluence インスタンスの XML バックアップを利用した XML からの復元を行ったあと、システム内でユーザーのお気に入りがなくなっている。XML インポートは基本的に成功しているが、一部のユーザーが Confluence へのログイン後にお気に入りが見つからない。復元時のエラーはないが、Confluence の以前のデータベースのバックアップを取得済みの場合は、過去のお気に入りの数を確認できます。

診断

要件

この問題を適切に診断するには次のものを用意する必要があります。

  1. 現在の Confluence データベース
  2. Confluence データベースの過去のバックアップ
  3. 新しいインスタンスでお気に入りが失われた既知のユーザー
  4. 本番とバックアップ両方のデータベースにクエリを実行できる権限

診断ステップ

  1. 次のクエリを実行し、影響を受けているユーザーのお気に入りを確認します。<name_of_user> を実際のユーザー名で置き換えるようにします。

    SELECT l.labelid, l.name, u.username
    FROM label l join user_mapping u on l.owner = u.user_key
    WHERE name like 'favourite'
    and u.username = '<name_of_user>';


  2. 上記のクエリの labelid を利用して対象のユーザーのお気に入りの一覧を作成します。

    SELECT u.username, l.name, c.contenttype, c.title
    FROM label l, content_label t, content c, user_mapping u
    WHERE l.labelid=t.labelid
    AND t.contentid=c.contentid
    AND t.owner = u.user_key
    AND t.labelid=<labelid_from_first_query>;
  3. 比較のため、このクエリを現在過去の Confluence データベースで実行します。違いが見受けられる場合はこの問題の影響を受けており、以降の回避策を利用する必要があります。

原因

The root cause for this issue is that the import process misplaces Favourites within the database and they may work for one user, but not for another user. Although the Export is working correctly, the import does not restore the favorites properly for all users. This is issue CONFSERVER-36348 - Favourites missing after importing.

回避策

データベースの変更を行う場合は必ず事前にバックアップを取得してください。可能な場合は、まずステージング サーバーで SQL コマンドの変更、挿入、更新、または削除を行うようにします。

(warning) This workaround should be thoroughly tested in a Test environment prior to making changes within your production instance. This will provide a safety net should this not function as intended through any errors that may occur in the process.

回避策のプロセスは次のとおりです。

  1. 次の SQL クエリを使い、以前のデータベースからお気に入りを抽出します。

    SELECT * FROM LABEL WHERE NAME='favourite' 
  2. このデータを別のデータベースに転送したいため、以前のコマンドの出力を含む CSV ファイルを作成することをおすすめします。ここでは old_favourites.csv と呼びます。
  3. 新しい Confluence データベースを実行しているテスト サーバーに old_favourites.csv をコピーします。
  4. Shutdown your test instance of Confluence to avoid data inconsistencies while modifying your database.
    (warning) Please make sure you backup your data before you do any changes so you can roll back in case it is needed.
  5. 次のような一時テーブルを作成します。

    CREATE TABLE LABEL_OLD
    (
      labelid bigint NOT NULL,
      name character varying(255),
      owner character varying(255),
      namespace character varying(255),
      creationdate timestamp without time zone,
      lastmoddate timestamp without time zone
    ); 
  6. CSV ファイルのコンテンツを一時テーブルにダンプします。PostgreSQL をご利用の場合は次のコマンドで行なえます。

    COPY LABEL_OLD FROM '/full/path/to/old_favourite.csv' WITH DELIMITER ',' CSV HEADER; 
  7. ステップ 2 で生成した CSV ファイルの形式によってはクエリを変更する必要がある場合があります。
  8. 不足しているラベルを Confluence の適切なテーブルに移動します。

    INSERT INTO LABEL(LABELID, NAME, OWNER, NAMESPACE, CREATIONDATE, LASTMODDATE)
    SELECT LABELID, NAME, OWNER, NAMESPACE, CREATIONDATE, LASTMODDATE
    FROM LABEL_OLD
    WHERE NAME='favourite'
    AND LABELID NOT IN (
            SELECT LABELID
            FROM LABEL
            WHERE NAME='favourite'
    ); 
  9. テーブル CONTENT_LABEL を更新し、適切な情報が含まれるようにします。

    UPDATE CONTENT_LABEL CL
    SET LABELID = L.LABELID
    FROM LABEL L
    WHERE CL.OWNER = L.OWNER AND CL.id IN (SELECT  cl.id
    	FROM content_label cl
    	INNER JOIN label l ON cl.labelid = l.labelid
    	where l.name = 'favourite' and cl.owner <> l.owner); 
  10. インデックスに更新情報を確実に含めるため、次のようにインデックスをゼロから再構築することをおすすめします。
  11. <confluence-home>/index/plugin ディレクトリが存在する場合はそのバックアップを作成します。ここには Usage Tracking プラグインが利用状況の統計のためのインデックスを格納します (必要な場合)。
  12. <confluence-home>/index ディレクトリを削除します。
  13. <confluence-home>/index/plugin ディレクトリがある場合は <confluence-home>/index ディレクトリを作り、ステップ 2 で作成した <confluence-home>/index/plugin ディレクトリをコピーします。
  14. Confluence を再起動します。
  15. サイト内で手動の再インデックスを実行し、新しいインデックスをゼロから構築します。

これでインスタンス内にお気に入りが復元されるはずです。

ソリューション

現在この問題のソリューションはありません。上記の回避策を利用してください。



最終更新日: 2025 年 1 月 22 日

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

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