深入ORACLE迁移到MYSQL的总结分析

这两个星期里一直都在忙于一件事儿,就是数据库的迁移问题。没有做的时候感觉这是一件十分轻松的事儿,可是等到实实在在去做去实现的时候,自己傻眼了。这种纠结啊,

在这里先说下遇到的问题:
1。数据库的表结构问题:数据类型不同需要解决varchar2------varchar、number-----int、date----datetime,建表的sql语句字段默认值、注释怎么解决。

2. oracle中没有所谓的敏感字段,可是mysql表中的敏感字段有好多。当时出错的时候很奇怪不知道是哪里错了。原来有个describe的字段是mysql的敏感字段。

这里我也是在网上找了一个现成的工具:oracletomysql,它是只能为我们迁移表结构。
具体地址:http://www.5stardatabasesoftware.com/cn/
3. oracle的备份sql没法正常的mysql中跑,一些to_date()函数,to_char()让人很是痛苦不知道怎么去代替,原因很简单在oracle的备份文件中有一堆的解释文字:


代码如下:

prompt PL/SQL Developer import file
prompt Created on 2012-05-30 by chenbh
set feedback off
set define off
prompt Disabling triggers for T_B_AUDITOR...
alter table T_B_AUDITOR disable all triggers;
prompt Loading T_B_AUDITOR...
insert into T_B_AUDITOR (AUDITORID, NAME, ORGID, SEX, IDCARDNO, TITLE, PHONE, MOBILE, DESCRIBE, AUDITORRIGHT, AUDITORSTATUS, RECORDSTATUS, FIELD1, FIELD2)

这些东西该怎么除去,大家的想法可能是我直接删除后直接在mysql中跑,可是您想一下如果要是您的备份文件很大很大呢,根本打不开就是。我遇到的sql备份有1G的,电脑不行实在是打不开没有办法只好,从新想其他的办法了。

在这里感谢下:ITPUB论坛的philip_zhong朋友,这里他给提供了一个程序,来处理大数据量的迁移工作。在这里说下我的使用感言啊,他提供了多种方式,shell脚本、windows下的bat启动、还有源程序。我都试过了,前两者没有调通,只好硬着头皮把他的源程序给跑一下,各种debug修改后终于调通了。很高兴……
这里需要提醒的是:


代码如下:

static dataSyncDataSourceParameter dataSourceParameters;
 static dataSyncSessionParameter sessionParameter;
 //static final String configFileName = "config.properties";//这里是源程序中的参数,按照自己的需要进行配置
 static final String configFileName = "config_oracle2mysql.properties";//这里是我的配置文件
 /**
  * @param args
  */
 public static void main(String[] args) {
  // initialize the parameters
  //String progPath = args[0];
  //String progPath = "D://work//MyEclipse 8.5//Workspaces//dataSync";E://workspace//oracletomysql//package
  String progPath = "E://workspace//oracletomysql//package";//这里大家注意下,是你的package的位置所在。
  String confFilePath = progPath + "//conf";
  if (setparameters(confFilePath)) {
   // start to call thread to sync the data
   syncData();
  }
 }

config_oracle2mysql.properties配置文件:这里需要注意的是:ora_hash是个10g中才有的函数这里我们从新改变下:DBMS_UTILITY.GET_HASH_VALUE这个hash函数是在网上找了好长时间才有人提到的类似与ora_hash的函数。反正这里我的理解就是为了多线程进行大数据量的搬运节约时间,作者才通过hash的方法进行控制。其他注意的地方我已经在程序里写出来一来提醒我注意二来给大家提个醒别犯我的错而浪费大家的时间。


代码如下:

#for source database parameters
source.dataSource.initialSize=10
source.dataSource.maxIdle=20
source.dataSource.minIdle=5
source.dataSource.maxActive=100
source.dataSource.maxWait=120000
source.jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
source.jdbc.url=jdbc:oracle:thin:@10.17.199.8:1521:lab1107
source.jdbc.username=lab1107
source.jdbc.password=lab1107
#Target sync data threadNum=source.database.threadNum
source.database.threadNum=10
#这里的auditorid必须是主键,ora_hash是在10g中使用的,我们的9i没办法用啊。
source.database.selectSql=select * from t_b_role where DBMS_UTILITY.GET_HASH_VALUE(roleid,1,#threadNum#)=?
#you can input many commands and split by ";"
source.database.sessionCommand=ALTER SESSION SET DB_FILE_MULTIBLOCK_READ_COUNT=128;
#for target jdbc parameters
target.dataSource.initialSize=10
target.dataSource.maxIdle=20
target.dataSource.minIdle=5
target.dataSource.maxActive=100
target.dataSource.maxWait=120000
target.jdbc.driverClassName=com.mysql.jdbc.Driver
target.jdbc.url=jdbc:mysql://10.5.110.239:3306/test?autoReconnect=true&characterEncoding=UTF-8
target.jdbc.username=root
target.jdbc.password=chen
#target.database.insertSql=insert into test2(PATHALIASID,PATH,CREATETIME,LASTMODIFIEDTIME,OBJECTPREFIX,PATHMD5ID,COLLIDESWITH) values(?,?,?,?,?,?,?)
target.database.insertSql=insert into T_B_ROLE(ROLEID,ROLENAME,ROLEDESC,ROLESTATUS,RECORDSTATUS,FIELD1,FIELD2,SORTNUM) values(?,?,?,?,?,?,?,?)这里必须是目标数据库中的现成的一张表。
target.database.commitNum=1000

具体的问题大家要是遇到了,可以一起交流下。

(0)

相关推荐

  • Oracle表空间数据文件移动的方法

    实现把用户表空间中的数据文件从某一个路径移动到另一个路径 一.针对可offline的非系统表空间 本例移动oracle的案例表空间(EXAMPLE表空间),将其从 D:\ORADATA\ORCL\ 移动到 D:\ORACLE\ORADATA\ 1.查看要改变的表空间的数据文件信息 SQL> select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='EXAMPLE'; TABL

  • 在ORACLE移动数据库文件

    正在看的ORACLE教程是:在ORACLE移动数据库文件. ---- ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成.由于磁盘空间的变化,或者基于数据库磁盘I/O性能的调整等,数据库管理员可能会考虑移动数据库文件.下面以UNIX平台为例,分别讨论三种数据库文件的移动方法. ---- 一.移动数据文件: ---- 可以用ALTER DATABASE,ALTER TABLESPACE两种方法移动数据文件. ---- 1. ALTER DATABASE方法: ---- 用此方法,可以

  • Oracle数据库迁移方案

    1 在数据迁移时,用户首先有权限修改数据库,并且进行表空间创建.删除等权利 例如: select * from dba_tab_privs where grantee='SCOT'; ---查看SCOTT权限(sys用户登录) 显示结果为: select * from dba_role_privs where grantee='SCOT'; --查看SCOTT角色 显示结果为: (1) 如果用户被锁定通过以下语句来解锁表 alter user scott account unlock; --解锁

  • Oracle数据库升级或数据迁移方法研究

    一.数据库升级的必要性 数据库升级是数据库管理员经常要面对的问题,如果你的应用要使用新版本数据库的新特性:如果数据库运行负载过重,而通过软硬件调整又不能有根本性的改善:如果要更换操作系统平台:如果要增强数据库的安全性:还有一个原因是随着新版本数据库的出现与成熟,oracle停止了对旧版本数据库的技术支持,升级到高版本,可以继续获得oracle的支持,还可以利用新版本数据库的新特新,可以改善系统的性能,健壮性,可扩张性和可用性,等等,面对这些问题,需要通过数据库升级才得以解决.不过,如果你的系统运

  • 直接拷贝数据文件实现Oracle数据迁移

    背景介绍 由于机房服务器变更,需要将 Oracle 迁移到一台新服务器上去. 以下是环境说明: 原服务器地址: 192.168.1.15 新服务器地址: 192.168.1.18 操作系统:都是 CentOS 6.5 数据库版本: 都是 11.2.0.1 新服务器上安装和配置 Oracle 192.168.1.18 在新服务器(192.168.1.18)上安装了Oracle,为了保险,主机名.数据库实例名.安装目录都和原数据库保持一致.具体安装方法可参考:centos 6.5下安装oracle

  • 数据从MySQL迁移到Oracle 需要注意什么

    将数据从MySQL迁移到Oracle的注意事项,有如下几点 1.自动增长的数据类型处理 MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段. CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE; INSERT 语句插入这个字段值为:

  • oracle 数据库数据迁移解决方案

    去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,有一些心得体会,与大家分享. 首先说说迁移流程,在迁移之前,写好方案,特别是实施的方案步骤一定要写清楚,然后进行完整的测试.我们在迁移时,有的系统测试了四五次,通过测试来完善方案和流程. 针对物理迁移,也即通过RMAN备份来进行还原并应用归档的方式(这里不讨论通过dd方式进行的冷迁移),虽然注意的是要将数据库设为force logging的方式,在用RMAN做全备之前,一定要执行: 否则可能会产

  • mysql数据库迁移至Oracle数据库

    本文实例为大家分享了java获取不同路径的方法,供大家参考,具体内容如下 1.使用工具: (1) Navicat Premium (2) PL/SQL Developer 11.0 (3) Oracle SQL Developer 4.0.0.12.84(点击可进入下载页面) 特别说明:最初我用的一直是高版本的SQL Developer,但在数据库移植到大概两分钟的时候,总是报错,而错误信息又不明确.最后换成 Oracle SQL Developer 4.0.0.12.84,才把问题解决掉!如果

  • Access2000迁移到Oracle9i要点

    正在看的ORACLE教程是:Access2000迁移到Oracle9i要点. Oracle9i中提供强大的迁移功能,可以从多种数据库向Oracle迁移数据.Oracle新发行的迁移工具提供了从Access2000向Oracle92010迁移的简便易行的解决方案,该方案克服了中文乱码问题和字符串被截断的问题,如下就是从Access2000向Oracle92010迁移的全过程. 一.到OTN下载最新版本的OMWB(Oracle Migration Workbench)并安装到http://otn.O

  • 深入ORACLE迁移到MYSQL的总结分析

    这两个星期里一直都在忙于一件事儿,就是数据库的迁移问题.没有做的时候感觉这是一件十分轻松的事儿,可是等到实实在在去做去实现的时候,自己傻眼了.这种纠结啊, 在这里先说下遇到的问题:1.数据库的表结构问题:数据类型不同需要解决varchar2------varchar.number-----int.date----datetime,建表的sql语句字段默认值.注释怎么解决. 2. oracle中没有所谓的敏感字段,可是mysql表中的敏感字段有好多.当时出错的时候很奇怪不知道是哪里错了.原来有个d

  • oracle数据库迁移到MySQL的方法总结

    前言 之前搭建了一个ExtJS + spring + Oracle 的这样一个报表系统的框架. 因为其他部门的要求, 也需要这个Framework 进行一些特殊的定制. 但是有一个问题是 Oracle 的数据库是需要收费的, 个人使用倒没什么问题, 公司使用的话就会有侵权的问题了. 而MySQL 则是完全免费的. 所以使用 ExtJS + Spring + MySQL  这样的组合应该就没什么问题了. 理论上来说, MySQL 已经被Oracle 收购, 这两者之间的Migrate 应该比较容易

  • 使用Navicat Premium工具将oracle数据库迁移到MySQL

    1.安装数据库图形界面工具Navicat Premium,以及本地Oracle客户端: 2.打开Navicat Premium界面,新建oracle连接,输入Oracle数据库服务地址.端口.服务及用户名密码: 注:在连接的时候会报错,因为Navicat Premium连接需要Oracle的一个oci.dll文件,这时需要选择Oracle客户端下的oci文件: 3.测试连接成功,确定:右键Oracle连接,选择数据传输或选择工具-->数据传输: 4.选择需要从oracle传输到mysql的数据库

  • 如何把sqlserver数据迁移到mysql数据库及需要注意事项

    在项目开发中,有时由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据迁移到MySQL.下面是小编日常整理的一种sqlserver数据库迁移的方法. 一.SQL Server中常用数据类型与MySQL不同的地方 二.将SQL Server数据迁移到MySQL需要注意的一些问题 1.唯一索引的不同,sql server的唯一索引的字段只能允许存在一个null值,而mysql,一直oracle中唯一索引对应的字段都允许存在多个n

  • 抽取oracle数据到mysql数据库的实现过程

    在oracle数据库迁移至mysql数据库,除了oracle数据库模型移到mysql外,还一个重要环节就是要将oracle数据库的数据移到mysql数据库,本人尝试用过多款数据迁移程序,性能都不是很好的,于是自己动手写一个针对于oracle数据库数据迁移到mysql数据程序,其具体过程如下: 1.要抽取mysql表.字段及过滤条件的配制文件imp_data.sql 2.建立一个目录ETL_DIR 3.运行oracle数据库程序P_ETL_ORA_DATA,生成各表的csv数据文件,同时也生成一个

  • Oracle更换为MySQL遇到的问题及解决

    迁移工具 测试时,使用powerdesinger进行表结构转换,使用Navicat进行数据导入. 生产环境数据量较大,会由数据组同事选用其他工具进行迁移,到时再行补充. 应用改造 添加mysql8.0驱动包 使用mysql-connector-java-8.0.15.jar,如果是maven管理,直接添加依赖: <!--MySql 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>m

  • SQL Server携程核心系统无感迁移到MySQL实战

    目录 前言 一.架构综述 二.应用场景 1.新单秒级各端同步 2.自动发单与工作台 3.查询与数据分析 三.系统升级实践 1.分布式订单缓存 2.无损迁移工艺 3.数仓衔接 四.核心问题精编 1.SQLServer & MySQL 流量迁移如何细粒度监控 2.如何解决双写期间DB一致性问题 3.引入订单缓存后导致的数据不同步问题处理 4.存量订单数据如何一次性校准 5.一些数据库特性差异问题 五.预警实践 1.百亿级数据差异校验预警 2.ALL Shard 实时订单总量监控 3.“流浪地球”实操

  • 将 Ghost 从 SQLite3 数据库迁移到 MySQL 数据库

    下面我们就来说说如何从 SQLite 迁移到 MySQL . 准备 首先你要已经安装好 MySQL 数据库.如果你用的是 Ubuntu 系统,请参考这篇文章.其他系统请参考各自对应的文档. 导出当前数据 进入 http://your-domain.com/ghost/debug 页面: 点击蓝色的 EXPORT 按钮将当前数据库中的所有数据导出并下载到本地,默认文件名是 GhostData.json . 切换数据库配置 编辑 config.js 文件,在 production 配置段将数据库配置

  • 对于oracle对session进行跟踪的分析

    跟踪 session 的活动,Oracle提供了很多种手段,不仅可以对当前连接的 session 进行跟踪, 也可以对其他用户的 session 进行跟踪:通过对 trace 档的分析,不仅可以掌握该 session 的活动, 也可以找出这个 session 中的瓶颈所在,对 session 的跟踪是 DBA 进行系统调优.故障诊断的常用方法. 对当前会话的活动进行跟踪及停止跟踪: alter session set sql_trace=true/false 对任意的 session 进行跟踪及

  • Perl访问MSSQL并迁移到MySQL数据库脚本实例

    Linux下没有专门为MSSQL设计的访问库,不过介于MSSQL本是从sybase派生出来的,因此用来访问Sybase的库自然也能访问MSSQL,FreeTDS就是这么一个实现.Perl中通常使用DBI来访问数据库,因此在系统安装了FreeTDS之后,可以使用DBI来通过FreeTDS来访问MSSQL数据库,例子: 复制代码 代码如下: using DBI;my $cs = "DRIVER={FreeTDS};SERVER=主机;PORT=1433;DATABASE=数据库;UID=sa;PWD

随机推荐