使用DBUnit进行数据库备份与恢复
2009-11-03 15:18
579 查看
最近主要使用DBUnit进行跨数据库备份恢复,一方面用于单元测试,另一方面也用于快速导入初始数据。遇到的问题有:
1、建立数据库。
DBUnit可以使用DTD结构存储数据库结构,但是貌似结构不可以恢复,所以使用了Hibernate的DDL恢复数据库结构。
2、关联表结构。
数据库需要按照关联表结构从低到高依次插入,否则外键关联时无法插入。在导出备份数据时,需要按照次序导出。代码如下:
3、不同数据库的支持。
DBUnit数据库扩展支持里包含了几种主流数据库,其支持包括了不同数据库的数据库连接、数据库字段类型等。
ORACLE:由于数据库存在多用户多表空间,所以不管是在备份还是恢复时,其连接都需要指定schema,即登陆用户名。在恢复数据时,对于二进制数据还可能出现BLOB或者CLOB相关的错误,使用其扩展连接基本可以解决。其表名全部是大写,需要单独处理。
MSSQL:由于其字段自增机制,主键是无法插入的,使用其扩展支持操作类可以解决。其表名首字母大写,需要单独处理。
MYSQL:MYSQL在备份数据时,布尔字段值为true或者false。但不管是ORACLE还是MSSQL,布尔型的存储都是数字类型(NUMBER、Tinyint,通过Hibernate-ddl建立)。DBUnit在恢复true或者false值到ORACLE及MSSQL时把true或false转换成数字型,目前没有找到解决方案,只好把导出数据的true及false改成1和0。
HSQLDB:由于只有数据导入,目前没有发现问题。
1、建立数据库。
DBUnit可以使用DTD结构存储数据库结构,但是貌似结构不可以恢复,所以使用了Hibernate的DDL恢复数据库结构。
2、关联表结构。
数据库需要按照关联表结构从低到高依次插入,否则外键关联时无法插入。在导出备份数据时,需要按照次序导出。代码如下:
TablesDependencyHelper.getAllDependentTable(connection,mainTableName); //这句会自动按照关联顺序导出表名,含有主键的数据会放在最前边 IDataSet dataSet = connection.createDataSet(tableNames);
3、不同数据库的支持。
DBUnit数据库扩展支持里包含了几种主流数据库,其支持包括了不同数据库的数据库连接、数据库字段类型等。
ORACLE:由于数据库存在多用户多表空间,所以不管是在备份还是恢复时,其连接都需要指定schema,即登陆用户名。在恢复数据时,对于二进制数据还可能出现BLOB或者CLOB相关的错误,使用其扩展连接基本可以解决。其表名全部是大写,需要单独处理。
IDatabaseConnection connection= new OracleConnection(conn,user);
MSSQL:由于其字段自增机制,主键是无法插入的,使用其扩展支持操作类可以解决。其表名首字母大写,需要单独处理。
org.dbunit.ext.mssql.InsertIdentityOperation.REFRESH.execute(connection,dataSet);
MYSQL:MYSQL在备份数据时,布尔字段值为true或者false。但不管是ORACLE还是MSSQL,布尔型的存储都是数字类型(NUMBER、Tinyint,通过Hibernate-ddl建立)。DBUnit在恢复true或者false值到ORACLE及MSSQL时把true或false转换成数字型,目前没有找到解决方案,只好把导出数据的true及false改成1和0。
HSQLDB:由于只有数据导入,目前没有发现问题。
相关文章推荐
- Oracle学习(11)---使用rman备份进行数据库的恢复
- 使用xtrabackup对mariadb数据库进行增量备份以及恢复 推荐
- 在win7和Linux环境,使用mysql进行数据库的备份和恢复
- 使用mysql自带工具mysqldump进行全库备份以及source命令恢复数据库
- 使用exp工具进行数据库备份及恢复
- 使用exp&imp工具进行数据库备份及恢复
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复
- 在cmd、C#中使用命令为PostgreSQL创建数据库、登录角色,并对数据库进行备份和恢复
- 使用EXP/IMP来进行数据库表的逻辑备份与恢复
- mysql中如何使用linux命令对数据库进行备份与恢复?
- ASP.NET中使用代码来进行备份和还原数据库
- MySQL中使用mysqldump命令进行备份与恢复
- 使用Symantec Backup Exec 对Exchange 2010 进行备份还原和灾难恢复系列之七
- 使用mongoDB必须要知道的备份和恢复数据库的命令
- 使用sdeexport和sdeimport命令对SDE数据库的备份、迁移或恢复
- 数据库正在使用,恢复备份失败的解决办法
- RMAN压缩备份本地数据库,进行异地恢复操作
- 区别与网上的数据库备份恢复:使用内存集合list或者map
- 使用xtrabackup对MySQL进行备份和恢复