失敗した XML サイト バックアップのトラブルシューティング
Confluence 8.3 以降では、バックアップと復元の方法が変更されました。これらの変更の詳細については、「Confluence 8.3 リリース ノート」を参照してください。
この変更の結果、古いシステムに関する問題の多くが解決されました。つまり、以下の推奨事項はバックアップと復元に適用されなくなります。
XML サイト バックアップは、新しいデータベースに移行する場合にのみ必要です。テスト サーバーの設定または信頼性の高いバックアップ戦略の確立については、SQL ダンプで行うほうが適切です。
関連ページ
バックアップの作成またはインポート時にエラーが発生する
問題 | ソリューション |
---|---|
バックアップ作成時の例外 | 以下の手順に従います。 |
バックアップ インポート時の例外 | 代わりに「復元に失敗した XML バックアップのトラブルシューティング」に従います。 |
一般的な問題
- エクスポートのタイムアウトやメモリ不足のエラーが生じていますか?
サイトの規模が大きいときは、Confluence で使用可能なメモリを一時的に増やす必要がある場合があります。「利用可能なメモリを増やして out of memory エラーを修正する方法」を参照してください。
手動の XML バックアップで生じるエラーの解決
データベースのわずかな破損によってエラーが発生する場合があります。ログ内に「データベースのデータがバックアップできません」などのエラーが出力されている場合は、このガイドがエラーの修正に役立ちます。必要に応じてバックアップからサイトを復元できるように、事前にデータベースと Confluence ホーム ディレクトリをバックアップすることを強くお勧めします。SQL に詳しくない場合、データベース管理者に支援してもらえるよう連絡することをお勧めします。
望ましい解決策
問題を特定して解決する
データの破損した場所や問題のある箇所を解決するには、バックアップ中に報告されるステータス情報を増やし、有効ではないデータベース エントリを編集します。
- Confluence を停止します。
- 外部データベースがある場合、データベース管理ツールを使用して手動データベース バックアップを作成します。
- Confluence ホーム ディレクトリをバックアップします。これとデータベースのバックアップを使用して、サイト全体を復元することが可能です。
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
- アプリケーション ログを探します。すべての既存の Confluence アプリケーション ログを移動または削除し、簡単に関連ログ出力を見つけられるようにします。また、エクスポートを開始した時間がわかるように、Confluence を再起動した後にアプリケーション ログにマークを付けることもできます。
- Confluence を再起動してログインします。
- エラーが再発するようにバックアップを開始します。
- ログ ファイルを確認し、XML フォーマットへの変換に失敗したオブジェクトを探します。
confluence-home/logs/atlassian-confluence.log
を開きます。ファイルの一番下までスクロールします。 「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)
- DbVisualizer などの DBA ツールを開き、データベース インスタンスに接続します。スキーマ内のテーブル名をスキャンします。これらのテーブルのいずれかの行を編集する必要があります。
- テーブルを調べるには、
atlassian-confluence.log
を開き、例外の最初の行を確認します。これは、XML に id 5 のContentPermission
オブジェクトを書き込む際にエラーが発生したことを示しています。これは CONTENTLOCK テーブルの主キー 5 の行を修正する必要があることを意味しています。以下は、データベースでのオブジェクトとテーブル間のマッピングを確認するための概要です。- ページ、ブログ投稿、コメント --> CONTENT テーブル
- 添付ファイル --> ATTACHMENTS テーブル
- 詳細については、スキーマ ドキュメントを参照してください。
- このテーブル内の不正な行の主キーを見つける必要があります。この場合、エラーの1行目を確認すると、行の主キーが5であることがわかります。
- 各プロパティは列として書き込まれるため、最後に書き込まれたプロパティが不正な値であることになります。例外が発生した際に書き込まれた行は、
CONTENT
(5 行目) で、値は2535
(6 行目) です。これで列と値を確認できました。この値2535
は、存在しないエントリの id です。 - データベース管理ツールを使用して、Confluence データベースにログインします。関連するテーブルで行を見つけて、エントリを修正します。テーブル内の他の行のデフォルト列値について確認します。これは null、0、または空白である場合があります。不正な行の値をデフォルト値で上書きします。
- Confluence を再起動します。
- 再度バックアップを試みます。バックアップが失敗し、停止してしまった場合は、最新のログを添付してサポート リクエストを送信してください。
「重複キー」に関連する問題のトラブルシューティング
以下のようなエラーメッセージが発生した場合
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
この問題の再発を防止する
- 組み込みデータベースを使用している場合、これは評価用にバンドルされており、突然停電が発生した場合、完全なトランザクションの整合性を提供しないため、本番環境での使用には外部データベースを推奨していることに注意してください。外部データベースに移行する必要があります。
- 最新より前のバージョンの Confluence を使用している場合、この時点でアップグレードを検討する必要があります。