前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Confluence 6 找到在创建 XML 备份的时候出现的错误

Confluence 6 找到在创建 XML 备份的时候出现的错误

作者头像
HoneyMoose
发布2019-01-31 10:17:52
1K0
发布2019-01-31 10:17:52
举报
文章被收录于专栏:CWIKIUSCWIKIUS

错误可能是因为数据库突然不可访问而产生。如果你在你的日志中看到了错误  'Couldn't backup database data' ,这个指南将会帮助你更正这个错误。我们强烈推荐你备份 Confluence 数据库和 Confluence 的 home 目录这种备份方式来备份你的 Confluence 服务器。你可以使用 Restoring Data from other Backups 的方法来恢复你的备份,如果需要的话。如果你对数据库 SQL 并不熟悉的话,我们建议你联系你的数据库管理员来获得相关的帮助。

完美解决方案

Production Backup Strategy 备份方案是完美并且最有效的备份方案。如果你在备份 XML 方式遇到了问题,不管是因为内存溢出还是下面描述的问题,我们建议你使用 SQL 的备份方案为你可选的备份方案。

识别并更正问题

希望找到数据库备份的错误或者中断的原因,修改状态信息的日志,能够让你获得更多的有用的信息,然后根据日志修改每一个数据库的配置:

  1. 停止 Confluence。
  2. 如果你使用的是外部数据库,请使用数据库管理工具来创建一个手动的数据库备份。
  3. 备份你的 Confluence  home 目录。你可以使用这个数据库的 SQL 备份来恢复你的整个站点
  4. 打开 my_confluence_install/confluence/WEB-INF/classes/log4j.properties然后在文件的后面添加下面的行,并保存。 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. 你必须现在就要查看你的日志文件来找到是哪一个对象没有被正确转换为 XML 格式。打开 confluence-home/logs/atlassian-confluence.log,并滚动到文件的末尾。
  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 然后连接到你的数据库实例。找到的表名字,你需要修改这些表中的某些记录。
  11. 希望找到是哪个数据表出现了错误,打开 catalina.out,找到的异常的第一行。这里有错误说是在写入 ContentPermission id 为 5 的对象到 XML 的时候出现了错误。换句话说,这个意思就是在主键为 5 的行需要更正,这个在表 CONTENTLOCK 中。希望找到数据库中是哪个表的那个对象,下面对应了内容存储的表:
    • 页面,博客页面,评论(Pages, blogposts, comments) --> CONTENT 表
    • 附件(attachments )--> ATTACHMENTS 表
    • 有关更多的信息可以在页面 schema documentation 中找到。
  12. 现在你必须找到不正确记录在表中的主键。在这个例子中,你可以看到在错误的第一行定义的主键为 5。
  13. 每一个属性都被写入到列中,因此最后写入的属性有不正确的值。当写入的时候出现了异常,抛出了 CONTENT (line 5) 的值 2535 (line 6)。现在你已经知道了列和值。值 2535 为一个一个不再存在的实体 ID。
  14. 使用数据库管理工具,登录 Confluence 数据库。找到相关的表然后更正实体。检查表中其他行的默认值,可能为 null ,0 或者 blank。使用默认的值来重写不正确的值。
  15. 重启 Confluence。
  16. 尝试继续进行备份。如果备份还是失败了,你也找不到合适的信息,请使用下面的连接 lodge a support request 提交给我们进行解决,请提供完整的日志信息。

"Duplicate Key" 相关的问题解决

如果你在备份的时候遇到了下面的错误:

代码语言:javascript
复制
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 如下:

代码语言:javascript
复制
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 版本,而不是最新的 Confluence 的版本,这个时候你应该考虑升级你的 Confluence。

https://www.cwiki.us/display/CONFLUENCEWIKI/Troubleshooting+failed+XML+site+backups

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/06/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 完美解决方案
  • 识别并更正问题
  • "Duplicate Key" 相关的问题解决
  • 希望避免这些问题重复发生
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档