錯誤多是由於數據庫忽然不可訪問而產生。若是你在你的日誌中看到了錯誤 'Couldn't backup database data' ,這個指南將會幫助你更正這個錯誤。咱們強烈推薦你備份 Confluence 數據庫和 Confluence 的 home 目錄這種備份方式來備份你的 Confluence 服務器。你可使用 Restoring Data from other Backups 的方法來恢復你的備份,若是須要的話。若是你對數據庫 SQL 並不熟悉的話,咱們建議你聯繫你的數據庫管理員來得到相關的幫助。java
Production Backup Strategy 備份方案是完美而且最有效的備份方案。若是你在備份 XML 方式遇到了問題,無論是由於內存溢出仍是下面描述的問題,咱們建議你使用 SQL 的備份方案爲你可選的備份方案。sql
但願找到數據庫備份的錯誤或者中斷的緣由,修改狀態信息的日誌,可以讓你得到更多的有用的信息,而後根據日誌修改每個數據庫的配置:數據庫
my_confluence_install/confluence/WEB-INF/classes/log4j.properties
而後在文件的後面添加下面的行,並保存。
|
confluence-home/logs/atlassian-confluence.log
,並滾動到文件的末尾。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)
catalina.out
,找到的異常的第一行。這裏有錯誤說是在寫入 ContentPermission
id 爲 5 的對象到 XML 的時候出現了錯誤。換句話說,這個意思就是在主鍵爲 5 的行須要更正,這個在表 CONTENTLOCK 中。但願找到數據庫中是哪一個表的那個對象,下面對應了內容存儲的表:
CONTENT
(line 5) 的值 2535
(line 6)。如今你已經知道了列和值。值 2535
爲一個一個再也不存在的實體 ID。若是你在備份的時候遇到了下面的錯誤:ide
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' 中定義的主鍵,而後找到重複的值後刪除重複的值。須要肯定 "PRIMARY KEY" 必須保持不重複。一個能夠找到 'OS_PROPERTYENTRY' 表中是否有重複主鍵的 SQL 以下:工具
SELECT ENTITY_NAME,ENTITY_ID,ENTITY_KEY,COUNT(*) FROM OS_PROPERTYENTRY GROUP BY ENTITY_NAME,ENTITY_ID,ENTITY_KEY HAVING COUNT(*)>1
https://www.cwiki.us/display/CONFLUENCEWIKI/Troubleshooting+failed+XML+site+backupspost