Confluence 6 找到在创建 XML 备份的时候出现的错误
错误可能是因为数据库突然不可访问而产生。如果你在你的日志中看到了错误 'Couldn't backup database data' ,这个指南将会帮助你更正这个错误。我们强烈推荐你备份 Confluence 数据库和 Confluence 的 home 目录这种备份方式来备份你的 Confluence 服务器。你可以使用 Restoring Data from other Backups 的方法来恢复你的备份,如果需要的话。如果你对数据库 SQL 并不熟悉的话,我们建议你联系你的数据库管理员来获得相关的帮助。
完美解决方案
Production Backup Strategy 备份方案是完美并且最有效的备份方案。如果你在备份 XML 方式遇到了问题,不管是因为内存溢出还是下面描述的问题,我们建议你使用 SQL 的备份方案为你可选的备份方案。
识别并更正问题
希望找到数据库备份的错误或者中断的原因,修改状态信息的日志,能够让你获得更多的有用的信息,然后根据日志修改每一个数据库的配置:
- 停止 Confluence。
- 如果你使用的是外部数据库,请使用数据库管理工具来创建一个手动的数据库备份。
- 备份你的 Confluence home 目录。你可以使用这个数据库的 SQL 备份来恢复你的整个站点。
- 打开
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
- 找到你的 atlassian-confluence.log。移动或者删除所有已经存在的 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 然后连接到你的数据库实例。找到的表名字,你需要修改这些表中的某些记录。
- 希望找到是哪个数据表出现了错误,打开
catalina.out
,找到的异常的第一行。这里有错误说是在写入ContentPermission
id 为 5 的对象到 XML 的时候出现了错误。换句话说,这个意思就是在主键为 5 的行需要更正,这个在表 CONTENTLOCK 中。希望找到数据库中是哪个表的那个对象,下面对应了内容存储的表:- 页面,博客页面,评论(Pages, blogposts, comments) --> CONTENT 表
- 附件(attachments )--> ATTACHMENTS 表
- 有关更多的信息可以在页面 schema documentation 中找到。
- 现在你必须找到不正确记录在表中的主键。在这个例子中,你可以看到在错误的第一行定义的主键为 5。
- 每一个属性都被写入到列中,因此最后写入的属性有不正确的值。当写入的时候出现了异常,抛出了
CONTENT
(line 5) 的值2535
(line 6)。现在你已经知道了列和值。值2535
为一个一个不再存在的实体 ID。 - 使用数据库管理工具,登录 Confluence 数据库。找到相关的表然后更正实体。检查表中其他行的默认值,可能为 null ,0 或者 blank。使用默认的值来重写不正确的值。
- 重启 Confluence。
- 尝试继续进行备份。如果备份还是失败了,你也找不到合适的信息,请使用下面的连接 lodge a support request 提交给我们进行解决,请提供完整的日志信息。
"Duplicate Key" 相关的问题解决
如果你在备份的时候遇到了下面的错误:
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
希望避免这些问题重复发生
- 如果你使用的是嵌入数据库,请注意这个数据库仅仅被用来进行测试,并且这个数据库没有完整的事物管理,可能因为计算机断电而导致数据库异常和其他问题。因此我们推荐你针对生产环境中使用外部数据库,请参考整合到外部数据库进行操作。
- 如果你正在使用的是一个较老的 Confluence 版本,而不是最新的 Confluence 的版本,这个时候你应该考虑升级你的 Confluence。
https://www.cwiki.us/display/CONFLUENCEWIKI/Troubleshooting+failed+XML+site+backups
Confluence 6 找到在创建 XML 备份的时候出现的错误的更多相关文章
- Confluence 6 尝试从 XML 备份中恢复时解决错误
错误可能是因为数据库突然不可访问而产生.也有可能是你备份文件有问题,你需要找到你 XML 备份文件中违反数据库规定的记录修改这个记录后再创建一个新的 XML 备份: 在实例开始恢复的时候,请按照下面的 ...
- Confluence 6 XML 备份恢复失败的问题解决
XML 站点备份仅仅针对新数据库恢复的时候是必要的. Upgrading Confluence,Setting up a test server 或者 Production Backup Strate ...
- Confluence 6 XML 备份失败的问题解决
XML 站点备份仅仅被用于整合到一个新的数据库.设置一个测试服务器 或者 创建一个可用的备份策略 相对 XML 备份来说是更合适的策略. 相关页面: Enabling detailed SQL log ...
- Confluence 6 针对大数据量备份
XML 站点备份的方式只针对 Confluence 包含有几千页面的情况,XML 备份所需要的时间随着数据量的变化而增加.另外的一个问题是 XML 站点的备份将会包含上 G 的附件数据,随着数据量的增 ...
- C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)
最近工作中遇到一个问题,要求创建一个XML文件,在创建的时候要初始化该XML文档,同时该文档打开后是XML形式,但是后缀名不是.在网上找了好些资料没找到,只能自己试着弄了一下,没想到成功了,把它记下来 ...
- C#基础巩固(2)-Linq To XML创建XML
一.首先要清楚一个正确的XML基本格式是怎样的. 1.后缀名.xml结尾 2.有一行描述 3.有且仅有一个根节点. 如图: 一个正确的xml文件能够被浏览器打开且显示.所以判断一个xml文件有没有错误 ...
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
- Java四种读取和创建XML文档的例子教程
四种方法解析XML文档:Dom.SAX.JDOM.dom4j 1.了解XML XML,即可扩展标记语言(Extensible Markup Language),标准通用标记语言的子集 ...
- .net中xml文件的导入使用(包括创建xml和导入xml)
上次有说到.net 创建xml文件的方法(一种固定方式,一种动态方法),这次记录一下怎样导入xml文件 1.导入xml文件的方法 1)xml文件格式
随机推荐
- 利用PHP连接数据库——实现用户登录注册功能以及管理员对用户注册的审核功能
1.用户注册页面 页面效果: 代码如下: <!DOCTYPE html><html> <head> <meta charset=" ...
- GDI+学习---2.GDI+编程模式及组成类
在使用GDI+的时候,您不必像在GDI中那样关心设备场景句柄,只需简单地创建一个Graphics对象,然后以您熟悉的面向对象的方式(如myGraphicsObject.DrawLine(paramet ...
- 【tmos】SpringBoot登录拦截
我的代码 public class WebLoginInterceptor implements HandlerInterceptor { @Autowired private WeixinConfi ...
- #6278. 数列分块入门 2(询问区间内小于某个值 xx 的元素个数)
题目链接:https://loj.ac/problem/6278 题目大意:中文题目 具体思路:数列分块模板题,对于更新的时候,我们通过一个辅助数组来进行,对于原始的数组,我们只是用来加减,然后这个辅 ...
- mysql案例~非常规操作汇总
一 简介:此文汇总mysql不常见的数据库的操作二 mysql表修改最大自增ID 目的: 修复canal相关问题 语法: alter table a AUTO_INCREMENT=num; 执行速度: ...
- RabbitMQ安装(一)
RabbitMQ官网 http://www.rabbitmq.com 下载地址 http://www.rabbitmq.com/download.html 一 Windows下安装RabbitMq 1 ...
- 数组转集合、集合转数组、字符串数组与int型、long型数组等的转换
在项目中经常会遇到数组转集合.集合转数组.数组之间类型转换等操作 1.数组转集合 为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码: String str[] = { ...
- android页面渲染速度提升的常用方法
参考文档:http://blog.csdn.net/vector_yi/article/details/24402101 当activity中用到的布局较多较为复杂时,页面渲染就会变得复杂,现汇总以下 ...
- Go语言中的结构体 (struct)
Golang官方称Go语言的语法相对Java语言而言要简洁很多,但是简洁背后也灵活了很多,所以很多看似很简单的代码上的细节稍不注意就会产生坑.本文主要对struct结构体的相关的语法进行总结和说明. ...
- 初识python异步模块Trio
Trio翻译过来是三重奏的意思,它提供了更方便异步编程,是asyncio的更高级的封装. 它试图简化复杂的asyncio模块.使用起来比asyncio和Twisted要简单的同时,拥有其同样强大功能. ...