-
java将oracle一个表空间的数据同步到另一个表空间的数据,来看看有没有问题5
代码如下:import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Date; import java.util.List; public class Bak { public static String shengchanku = "aaa";//生产库登录名 public static String shengchanku_pw = "1";//生产库密码 public static String shengchanku_serviceName = "127.0.0.1";//生产库服务名 public static String ceshiku = "aaatest";//测试库登录名 public static String ceshiku_pw = "1";//测试库密码 public static String ceshiku_serviceName = "127.0.0.1";//测试库服务名 /** * @param args * @throws SQLException */ public static void main(String[] args){ Date d = new Date(); long start = d.getTime(); String msg = ""; Connection conn = null; try { conn = getConnection(); } catch (Exception e1) { msg = "获取生产库链接失败"; } Connection connTest = null; try { connTest = getTestConnection(); } catch (Exception e1) { msg = "获取测试库链接失败"; } if("".equals(msg)){ try { //开启事务 conn.setAutoCommit(false); //查询出生产库所有表的名称 List<String> list_table_names = new ArrayList<String>(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select table_name from user_tables"); while(rs.next()){ list_table_names.add(rs.getString(1)); } rs.close(); stmt.close(); //查询测试库所有表的名称 List<String> list_table_names_test = new ArrayList<String>(); stmt = connTest.createStatement(); rs = stmt.executeQuery("select table_name from user_tables"); while(rs.next()){ list_table_names_test.add(rs.getString(1)); } //拼接往测试库每个表插数据的sql String table_name = ""; List<String> sql_create = new ArrayList<String>(); for(int i =0;i<list_table_names.size();i++){ table_name = list_table_names.get(i); sql_create.add("create table "+ceshiku+"."+table_name+" AS SELECT * FROM "+shengchanku+"."+table_name+""); } //拼接删除测试库表的sql List<String> sql_drop = new ArrayList<String>(); for(int i =0;i<list_table_names_test.size();i++){ table_name = list_table_names_test.get(i); sql_drop.add("drop table "+ceshiku+"." + table_name); } //删除测试库的数据 stmt = conn.createStatement(); for(int i = 0 ;i<sql_drop.size();i++){ stmt.addBatch(sql_drop.get(i)); } //执行删除sql int[] result = stmt.executeBatch(); System.out.println("执行删除表:" + result.length); stmt.close(); //重新创建测试库的数据 stmt = connTest.createStatement(); for(int i = 0 ;i<sql_create.size();i++){ stmt.addBatch(sql_create.get(i)); } //执行创建sql result = stmt.executeBatch(); System.out.println("执行创建表:" + result.length); stmt.close(); //提交事务 conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); }finally{ try { conn.close(); connTest.close(); } catch (SQLException e) { e.printStackTrace(); } } }else{ System.out.println(msg); } d = new Date(); long end = d.getTime(); System.out.println("执行时间:" + (end-start) + "毫秒"); } //获取生产库链接 public static Connection getConnection() throws Exception{ Connection ct = null; Class.forName("oracle.jdbc.driver.OracleDriver"); ct = DriverManager.getConnection("jdbc:oracle:thin:"+shengchanku+"/"+shengchanku_pw+"@"+shengchanku_serviceName+":1521:orcl"); return ct; } //获取测试库链接 public static Connection getTestConnection() throws Exception{ Connection ct = null; Class.forName("oracle.jdbc.driver.OracleDriver"); ct = DriverManager.getConnection("jdbc:oracle:thin:"+ceshiku+"/"+ceshiku_pw+"@"+ceshiku_serviceName+":1521:orcl"); return ct; } }
大伙来看看这样写有没有什么问题,性能如何,我执行时间大概10秒多,数据量不是很大,不过有个附件表,表空间数据全部导出来大概有300多M
问题补充:两个用户对应两个不同的表空间,但在同一个库里2013年3月28日 09:31
1个答案 按时间排序 按投票排序
-
采纳的答案
看不出什么大问题。只是小问题好多,哈。
setAutoCommit是指是否自动提交,不是开启事务。
你的SQL文貌似都不能回滚的,应该不需要动这个。
另外,这个处理不是引用将oracle一个表空间的数据同步到另一个表空间的数据
应该是用户(或者schema),而不是表空间。
表空间是指物理意义上的数据文件。
-------------------
Class.forName("oracle.jdbc.driver.OracleDriver");
调用一遍就好了。
拼SQL文同时直接做批处理就好了,为什么又循环一次。
任意个connection建立失败时,在catch块里直接return掉,就可以省去那个最大的if("".equals(msg)){ ... }
嵌套
2013年3月28日 17:38
相关推荐
标题“mysql导数据到oracle”涉及的是数据库迁移或数据同步的过程,从MySQL数据库系统将数据迁移到Oracle数据库系统。在IT行业中,这种操作通常用于升级数据库系统、整合多个数据库或者在不同平台间转移数据。 描述...
- **数据流线**:定义各个转换步骤之间的数据流,即数据如何从一个步骤流向另一个步骤。 - **数据转换**:对数据进行处理,如字段选择、字段转换、中文乱码处理等。 - **表输出**:将处理后的数据加载到目标...
标题“数据库同步系统_javaoracle_CC08FB424F88_92444.c.c_B51.955-2004_44efbf3ab”暗示了这是一个关于数据库同步系统的项目,它可能使用Java和Oracle数据库技术。其中的标签进一步细化了相关技术,如“CC08FB424...
"jumpa2p"可能是一个自定义的库或工具,它在数据传输过程中起到关键作用,可能是用于在Oracle和MySQL之间进行数据迁移或同步。然而,由于缺乏详细信息,我们只能猜测其功能,具体实现方式需要查看项目的源代码或相关...
Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,由美国甲骨文公司(Oracle Corporation)开发和维护。...对于希望从事IT行业,特别是数据库管理或者Java开发的人员来说,这是一个非常有价值的资料集合。
在Solr中,有时我们需要与传统的关系型数据库如SQL Server或Oracle进行交互,以获取数据或者同步数据库中的信息到Solr索引中。本文将详细介绍如何在Solr中建立与SQL Server和Oracle的连接,并解决可能出现的连接问题...
2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行...
这可能是因为系统中有部分数据存储在MySQL中,另一部分数据存储在Oracle中,或者需要实现数据迁移、同步等功能。为了确保程序的稳定性和兼容性,开发者需要对两种数据库的特性有深入理解,例如SQL语法差异、事务管理...
这份“Java学习笔记(必看经典)”涵盖了Java语言的基础到进阶内容,对于想要深入理解Java的开发者来说是一份宝贵的资源。 首先,Java语言基础包括语法结构、数据类型、变量、运算符、流程控制等。Java支持两种主要的...
这份“Java学习笔记(必看经典).doc”文档将涵盖Java的核心概念和重要知识点,对于初学者和有经验的开发者来说都是宝贵的参考资料。 首先,Java的基础部分通常包括以下几个方面: 1. **Java语法基础**:这是所有...
例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望...
Oracle数据库系统是一个复杂而强大的关系型数据库管理系统,其在企业级应用中占据着重要的地位。本文将对Oracle的几个核心概念和技术进行详细解释。 首先,我们来看一下Oracle的内存结构,特别是SGA(System Global...
2. **封装性**:封装是OOP的一个核心特性,指的是将数据和操作数据的方法绑定在一起,隐藏对象的属性和实现细节,仅对外提供接口。 3. **继承性**:一个类可以继承另一个类的属性和方法,从而实现代码重用和功能扩展...
"JAVA新手必看的学习资料"这一资源显然是一个为Java初学者量身定制的教程集合,旨在帮助新手快速入门并深入理解Java编程基础。 首先,Java是一种广泛使用的面向对象的编程语言,它以其平台独立性、高效性和强大的...
经常的进行知识难点的查询,如果一个问题牵扯的面比较广,就干脆到网上搜索一些相关的专题,比如“java 乱码 mysql” “oracle 创建用户”等等,如果有必要,不要犯懒,勤动手写一些小小的测试程序,来弄明白知识点...
- **DataX**:DataX是一个开源的异构数据源间的数据同步工具,支持包括MySQL、Oracle、SQLServer、PostgreSQL、HDFS、Hive、ADS、HBase、OTS、OSS、MaxCompute等多种数据源之间的数据同步。DataX的执行机制基于Java...
- 对于想要深入了解 Java 平台最新特性和最佳实践的开发者来说,这是一个宝贵的资源。 - 经常更新的内容确保开发者能够紧跟技术发展的步伐。 #### 2. **Java 官方网站 (http://java.sun.com)** - **简介**:这是...
"JAVA编程人员必看"这一标题暗示了本资料将涵盖Java编程的基础到高级概念,是学习者提升技能的重要资源。 【面向对象编程】 Java的核心特性之一是面向对象编程(OOP)。在Java中,一切皆为对象,类是创建对象的...
在提供的文件列表中,"alicall_v3.0.EXE"看起来像是一个可执行文件,通常不是Java的源代码或类文件。这可能是某种应用程序或工具,与Java基础学习关系不大,但如果是Java开发的桌面应用,那么它可能经过了Java打包...