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

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


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

問題

ソリューション

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

以下の手順に従います。

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

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

一般的な問題

XMLバックアップの作成によるエラーの解決

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

望ましい解決策

バックアップ生成戦略は非常に信頼性が高く、より効率的なバックアップの方法です。メモリ関連またはここに記載しているような問題が原因の XML バックアップの問題が発生している場合、代わりのソリューションとしてネイティブ バックアップ ツールを使用します。

問題を特定および解決する方法

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

  1. Confluence を停止します。
  2. 外部データベースがある場合、データベース管理ツールを使用して手動データベース バックアップを作成します。
  3. Confluence ホーム ディレクトリをバックアップします。これとデータベースのバックアップを使用して、サイト全体を復元することが可能です。
  4. Open the my_confluence_install/confluence/WEB-INF/classes/log4j.propertiesand add this to the bottom and save:

    log4j.logger.com.atlassian.confluence.importexport.impl.XMLDatabinder=DEBUG, confluencelog
    log4j.additivity.com.atlassian.confluence.importexport.impl.XMLDatabinder=false
    
  5. atlassian-confluence.log を見つけます。すべての既存の Confluence ログを移動または削除し、簡単に関連ログ出力を見つけられるようにします。
  6. Confluence を再起動してログインします。
  7. エラーが再発するようにバックアップを開始します。
  8. You must now check your log files to find out what object could not be converted into XML format. Open confluence-home/logs/atlassian-confluence.log. Scroll to the bottom of the file.
  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. To work out which table, open atlassian-confluence.log, check the first line of the exception. This says there was an error writing the ContentPermission object with id 5 into XML. This translates as the row with primary key 5 in the CONTENTLOCK tableneeds fixing. To work out what table an object maps to in the database, here's a rough guide:
    • ページ、ブログ投稿、コメント --> CONTENT テーブル
    • 添付ファイル --> ATTACHMENTS テーブル
    • 詳細については、スキーマ ドキュメントを参照してください。
  12. このテーブル内の不正な行の主キーを見つける必要があります。この場合、エラーの1行目を確認すると、行の主キーが5であることがわかります。
  13. Each property is written to a column, so the last property that was being written has the incorrect value. The row being written to when the exception was thrown was CONTENT (line 5) with a value of 2535 (line 6). Now you know the column and value. This value 2535 is the id of an entry that no longer exists.
  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 を使用している場合、この時点でアップグレードを検討する必要があります。
最終更新日: 2019 年 2 月 5 日

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

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