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

問題

ソリューション

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

以下の手順に従います。

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

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

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

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

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

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

  1. Confluence を停止します。
  2. 外部データベースがある場合、データベース管理ツールを使用して手動データベース バックアップを作成します。
  3. Confluence ホーム ディレクトリをバックアップします。これとデータベースのバックアップを使用して、サイト全体を復元することが可能です。
  4. Open the my_confluence_install/confluence/WEB-INF/classes/log4j.properties and 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. Find your Confluence output logs. On standalone, this is the /logs directory under your Confluence install. Move or delete all existing Confluence logs to makes it easier to find the relevant logging output.
  6. Confluence を再起動してログインします。
  7. エラーが再発するようにバックアップを開始します。
  8. ログ ファイルを確認し、XML フォーマットへの変換に失敗したオブジェクトを探します。my_confluence_install/logs/catalina.out を開きます。ファイルの一番下までスクロールします。
  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 catalina.out, 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 table needs fixing. To work out what table an object maps to in the database, here's a rough guide:
    • ページ、ブログ投稿、コメント --> CONTENT テーブル
    • 添付ファイル --> ATTACHMENTS テーブル
  12. このテーブル内の不正な行の主キーを見つける必要があります。この場合、エラーの1行目を確認すると、行の主キーが5であることがわかります。
  13. 各プロパティは列として書き込まれるため、最後に書き込まれたプロパティが不正な値であることになります。例外が発生した際に書き込まれた行は、CONTENT (5 行目) で、値は 2535 (6 行目) です。これで列と値を確認できました。この値 2535 は、存在しないエントリの id です。
  14. データベース管理ツールを使用して、Confluence データベースにログインします。関連するテーブル内の行を見つけて、エントリーを修正します。テーブル内の他の行のデフォルト列値について確認します。これは null、0、または空白である場合があります。不正な行の値をデフォルト値で上書きします。
  15. Confluence を再起動します。
  16. 再度バックアップを試みます。バックアップが失敗し、停止してしまった場合は、最新のログを添付してサポート リクエストを送信してください。

この問題の再発を防ぐ方法

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