失敗した XML サイト バックアップのトラブルシューティング
XML サイト バックアップは、新しいデータベースに移行する場合にのみ必要です。テスト サーバーの設定または信頼性の高いバックアップ戦略の確立については、SQL ダンプで行うほうが適切です。
関連ページ
バックアップの作成またはインポート時にエラーが発生する
問題 | ソリューション |
---|---|
バックアップ作成時の例外 | 以下の手順に従います。 |
バックアップ インポート時の例外 | 代わりに「復元に失敗した XML バックアップのトラブルシューティング」に従います。 |
一般的な問題
- Is the export timing out or causing out of memory errors?
If your site is large, you may need to temporarily increase the memory available to Confluence. See Fix java.lang.OutOfMemoryError in Confluence.
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 を使用している場合、この時点でアップグレードを検討する必要があります。