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

お困りですか?

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

コミュニティに質問

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

問題

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  CONF-36348 - Getting issue details... STATUS .

回避策

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

(warning) 本番インスタンスを変更する前に、この回避策をテスト環境で十分にテストしてください。これにより、プロセス中に発生したエラーで意図したように動作しない事態を防ぐことができます。

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

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

    SELECT * FROM LABEL WHERE NAME='favourite' 
  2. このデータを別のデータベースに転送したいため、以前のコマンドの出力を含む CSV ファイルを作成することをおすすめします。ここでは old_favourites.csv と呼びます。
  3. 新しい Confluence データベースを実行しているテスト サーバーに old_favourites.csv をコピーします。
  4. データベースを変更する際のデータ不整合を避けるため、Confluence のテストインスタンスをシャットダウンしてください。
    (warning)必要な場合にロールバックできるように、変更を加える前に必ずデータをバックアップしてください。
  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. サイト内で手動の再インデックスを実行し、新しいインデックスをゼロから構築します。

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

ソリューション

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

 

 

最終更新日 2017 年 4 月 6 日

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

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