失敗した XML サイト バックアップのトラブルシューティング

Confluence 8.3 以降では、バックアップと復元の方法が変更されました。これらの変更の詳細については、「Confluence 8.3 リリース ノート」を参照してください。

この変更の結果、古いシステムに関する問題の多くが解決されました。つまり、以下の推奨事項はバックアップと復元に適用されなくなります。

XML サイト バックアップは、新しいデータベースに移行する場合にのみ必要です。テスト サーバーの設定または信頼性の高いバックアップ戦略の確立については、SQL ダンプで行うほうが適切です。


バックアップの作成またはインポート時にエラーが発生する

問題

ソリューション

バックアップ作成時の例外

以下の手順に従います。

バックアップ インポート時の例外

代わりに「復元に失敗した XML バックアップのトラブルシューティング」に従います。

一般的な問題

手動の XML バックアップで生じるエラーの解決

データベースのわずかな破損によってエラーが発生する場合があります。ログ内に「データベースのデータがバックアップできません」などのエラーが出力されている場合は、このガイドがエラーの修正に役立ちます。必要に応じてバックアップからサイトを復元できるように、事前にデータベースと Confluence ホーム ディレクトリをバックアップすることを強くお勧めします。SQL に詳しくない場合、データベース管理者に支援してもらえるよう連絡することをお勧めします。

望ましい解決策

問題を特定して解決する

データの破損した場所や問題のある箇所を解決するには、バックアップ中に報告されるステータス情報を増やし、有効ではないデータベース エントリを編集します。

  1. Confluence を停止します。
  2. 外部データベースがある場合、データベース管理ツールを使用して手動データベース バックアップを作成します。
  3. Confluence ホーム ディレクトリをバックアップします。これとデータベースのバックアップを使用して、サイト全体を復元することが可能です。
  4. my_confluence_install/confluence/WEB-INF/classes/log4j.properties  を開き、一番下に以下を追加して保存します。

    log4j.logger.com.atlassian.hibernate.extras.XMLDatabinder=DEBUG, confluencelog
    log4j.additivity.com.atlassian.hibernate.extras.XMLDatabinder=false
  5. アプリケーション ログを探します。すべての既存の Confluence アプリケーション ログを移動または削除し、簡単に関連ログ出力を見つけられるようにします。また、エクスポートを開始した時間がわかるように、Confluence を再起動した後にアプリケーション ログにマークを付けることもできます。 
  6. Confluence を再起動してログインします。
  7. エラーが再発するようにバックアップを開始します。
  8. ログ ファイルを確認し、XML フォーマットへの変換に失敗したオブジェクトを探します。confluence-home/logs/atlassian-confluence.log を開きます。ファイルの一番下までスクロールします。
  9. 「ObjectNotFoundException」を検索します。エラーは以下のように表示されるはずです。

    01 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing object: com.atlassian.confluence.core.ContentPermission with ID: 5 to XML.
    02 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing property: type
    03 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing property: group
    04 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing property: expiry
    05 2005-08-24 00:00:33,743 DEBUG [DOCPRIV2:confluence.importexport.impl.XMLDatabinder] Writing property: content
    06 [DOCPRIV2:ERROR] LazyInitializer - Exception initializing proxy <net.sf.hibernate.ObjectNotFoundException: No row with the given identifier exists: 2535,
    07 of class: com.atlassian.confluence.core.ContentEntityObject>net.sf.hibernate.ObjectNotFoundException:
    08 No row with the given identifier exists: 2535, of class: com.atlassian.confluence.core.ContentEntityObject
    09	at net.sf.hibernate.ObjectNotFoundException.throwIfNull(ObjectNotFoundException.java:24)
    10	at net.sf.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:1946)
    11	at net.sf.hibernate.proxy.LazyInitializer.initialize(LazyInitializer.java:53)
    12	at net.sf.hibernate.proxy.LazyInitializer.initializeWrapExceptions(LazyInitializer.java:60)
    13	at net.sf.hibernate.proxy.LazyInitializer.getImplementation(LazyInitializer.java:164)
    14	at net.sf.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:108)
    15	at com.atlassian.confluence.core.ContentEntityObject$$EnhancerByCGLIB$$cc2f5557.hashCode(<generated>)
    16	at java.util.HashMap.hash(HashMap.java:261)
    17	at java.util.HashMap.containsKey(HashMap.java:339)
    18	at com.atlassian.confluence.importexport.impl.XMLDatabinder.toGenericXML(XMLDatabinder.java:155)
    
  10. DbVisualizer などの DBA ツールを開き、データベース インスタンスに接続します。スキーマ内のテーブル名をスキャンします。これらのテーブルのいずれかの行を編集する必要があります。
  11. テーブルを調べるには、atlassian-confluence.log を開き、例外の最初の行を確認します。これは、XML に id 5 の ContentPermission オブジェクトを書き込む際にエラーが発生したことを示しています。これは CONTENTLOCK テーブルの主キー 5 の行を修正する必要があることを意味しています。以下は、データベースでのオブジェクトとテーブル間のマッピングを確認するための概要です。
    • ページ、ブログ投稿、コメント --> CONTENT テーブル
    • 添付ファイル --> ATTACHMENTS テーブル
    • 詳細については、スキーマ ドキュメントを参照してください。
  12. このテーブル内の不正な行の主キーを見つける必要があります。この場合、エラーの1行目を確認すると、行の主キーが5であることがわかります。
  13. 各プロパティは列として書き込まれるため、最後に書き込まれたプロパティが不正な値であることになります。例外が発生した際に書き込まれた行は、CONTENT (5 行目) で、値は 2535 (6 行目) です。これで列と値を確認できました。この値 2535 は、存在しないエントリの id です。
  14. データベース管理ツールを使用して、Confluence データベースにログインします。関連するテーブルで行を見つけて、エントリを修正します。テーブル内の他の行のデフォルト列値について確認します。これは null、0、または空白である場合があります。不正な行の値をデフォルト値で上書きします。
  15. Confluence を再起動します。
  16. 再度バックアップを試みます。バックアップが失敗し、停止してしまった場合は、最新のログを添付してサポート リクエストを送信してください。

「重複キー」に関連する問題のトラブルシューティング

以下のようなエラーメッセージが発生した場合

could not insert: [bucket.user.propertyset.BucketPropertySetItem#bucket.user.propertyset.BucketPropertySetItem@a70067d3]; SQL []; Violation of PRIMARY KEY constraint 'PK_OS_PROPERTYENTRY314D4EA8'. Cannot insert duplicate key in object 'OS_PROPERTYENTRY'.; nested exception is java.sql.SQLException: Violation of PRIMARY KEY constraint 'PKOS_PROPERTYENTRY_314D4EA8'. Cannot insert duplicate key in object 'OS_PROPERTYENTRY'.

これは、主キー制約「PK_OS_PROPERTYENTRY_314D4EA8」がテーブル「OS_PROPERTYENTRY」内で重複するエントリーを持つことを示しています。
テーブル「OS_PROPERTYENTRY」内の「PK_OS_PROPERTYENTRY_314D4EA8」を参照する制約キーを見つけ、重複している値を探し、削除することで、「主キー」を一意にします。「OS_PROPERTYENTRY」テーブル内の重複エントリーを一覧表示するクエリの例は以下のとおりです。

SELECT ENTITY_NAME,ENTITY_ID,ENTITY_KEY,COUNT(*) FROM OS_PROPERTYENTRY GROUP BY ENTITY_NAME,ENTITY_ID,ENTITY_KEY HAVING COUNT(*)>1

この問題の再発を防止する

  1. 組み込みデータベースを使用している場合、これは評価用にバンドルされており、突然停電が発生した場合、完全なトランザクションの整合性を提供しないため、本番環境での使用には外部データベースを推奨していることに注意してください。外部データベースに移行する必要があります。
  2. 最新より前のバージョンの Confluence を使用している場合、この時点でアップグレードを検討する必要があります。
最終更新日 2023 年 6 月 27 日

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

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