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

错误可能是因为数据库突然不可访问而产生。如果你在你的日志中看到了错误  ‘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" 相关的问题解决

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

could not insert: [bucket.user.propertyset.BucketPropertySetItem#[email protected]]; 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

希望避免这些问题重复发生

  1. 如果你使用的是嵌入数据库,请注意这个数据库仅仅被用来进行测试,并且这个数据库没有完整的事物管理,可能因为计算机断电而导致数据库异常和其他问题。因此我们推荐你针对生产环境中使用外部数据库,请参考整合到外部数据库进行操作。
  2. 如果你正在使用的是一个较老的 Confluence 版本,而不是最新的 Confluence 的版本,这个时候你应该考虑升级你的 Confluence。

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

原文地址:https://www.cnblogs.com/huyuchengus/p/9226623.html

时间: 2024-08-29 12:13:27

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

Confluence 6 尝试从 XML 备份中恢复时解决错误

错误可能是因为数据库突然不可访问而产生.也有可能是你备份文件有问题,你需要找到你 XML 备份文件中违反数据库规定的记录修改这个记录后再创建一个新的 XML 备份: 在实例开始恢复的时候,请按照下面的指南来禁用批量更新(针对简单的问题解决),启用 SQL 日志和SQL 查询日志,通过在 Enabling Detailed SQL Logging 页面中描述的参数(with parameters). 一旦上面 3 个修改都完成了后,重启 Confluence. 尝试另外一次恢复. 当你在恢复的时候

Confluence 6 XML 备份失败的问题解决

XML 站点备份仅仅被用于整合到一个新的数据库.设置一个测试服务器 或者 创建一个可用的备份策略 相对 XML 备份来说是更合适的策略. 相关页面: Enabling detailed SQL logging 在创建和导入备份的时候出现了错误? 在创建备份的时候出现了错误 请参考下面的策略 在导入备份的时候出现了错误 请参考 Troubleshooting XML backups that fail on restore 页面 https://www.cwiki.us/display/CONFL

C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)

最近工作中遇到一个问题,要求创建一个XML文件,在创建的时候要初始化该XML文档,同时该文档打开后是XML形式,但是后缀名不是.在网上找了好些资料没找到,只能自己试着弄了一下,没想到成功了,把它记下来作为自己的学习笔记. 需求:创建XML文件,后缀名为.xwsp 初始化的文档节点如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <xxxversion="1.0" name="

C#基础巩固(2)-Linq To XML创建XML

一.首先要清楚一个正确的XML基本格式是怎样的. 1.后缀名.xml结尾 2.有一行描述 3.有且仅有一个根节点. 如图: 一个正确的xml文件能够被浏览器打开且显示.所以判断一个xml文件有没有错误也可以用浏览器打开看有没有报错. 二.传统的XML创建方式. 命名空间:System.XML 用到的类库:XmlDocument -文档 XmlElement  -元素 XmlAttribute -属性 代码: static void Main(string[] args) { Traditiona

使用PYTHON创建XML文档_python

当用GOOGLE查的时候,内容几乎都是一样的.但是你想要的东西,一个也没有.例如,我就找不到中国人写的如何使用PYTHON来创建一个XML文件.当然,直接用文件写的方式也能够达到同样的效果,但是毕竟容易出错,而且看起来不优雅.最后,我看了很多资料,终于明白如何使用PYTHON写一个XML文件了.以下就是一个简单的例子,这个例子是已经调试通过的,大家可以放心使用. import xml.dom.minidom from xml.dom.DOMImplementation import implem

python使用 minidom创建xml实例

python创建xml实例 模仿下面的xml文件,使用python脚本进行创建. <?xml version='1.0'?> <database> <user username="user" fromAddress="[email protected]" fullName="John Q. User" password="pass"> <subscription host="

创建XML

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace 创建XML { class Program { static void Main(string[] args) { //通过代码来创建XML文档 //1.引用命名空间 //2.创建XML文档对象 元素包含节点,元

Java读取、创建xml(通过dom方式)

创建一个接口 XmlInterface.java public interface XmlInterface {         /**         * 建立XML文档         * @param fileName 文件全路径名称         */         public void createXml(String fileName);         /**         * 解析XML文档         * @param fileName 文件全路径名称       

创建Xml的将但方法和向Xml中添加数据

1 想要的Xml样式 2 <Root> 3   <Cast> 4     <SendUserId>3</SendUserId> 5     <Title>asdafdf</Title> 6     <Content>sadggdfaf</Content> 7     <DateTime>2014/8/30 18:11:23</DateTime> 8     <ListUser>