根据业务需求,需要从MySQL库中同步一张表tap_application到Oracle中,下面是记录的导入过程.

1. 查看MySQL表结构

desc tap_application;
+---------------------+---------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------+------+-----+---------------------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| VENDORID | int(11) | NO | | NULL | |
| NAME | varchar(128) | NO | | NULL | |
| DESCRIPTION | varchar(255) | YES | | NULL | |
| CREATIONDATE | datetime | NO | | 0000-00-00 00:00:00 | |
| MODIFICATIONDATE | datetime | NO | | 0000-00-00 00:00:00 | |
| STATUS | int(11) | NO | | NULL | |
| URL | varchar(1024) | YES | | NULL | |
| APPTYPE | smallint(6) | YES | | NULL | |
| TEST_KEY | varchar(512) | YES | | NULL | |
| PRODUCTION_KEY | varchar(512) | YES | | NULL | |
| TEST_APISUSED | varchar(256) | YES | | NULL | |
| PRODUCTION_APISUSED | varchar(256) | YES | | NULL | |
+---------------------+---------------+------+-----+---------------------+----------------+
13 rows in set (0.01 sec)

 2. 查看表是否有特殊字符

select * from tap_application where ID=1 or ID=55\G
*************************** 1. row ***************************
ID: 1
VENDORID: 1
NAME: app name
DESCRIPTION: NULL
CREATIONDATE: 2009-03-30 18:40:36
MODIFICATIONDATE: 2009-03-30 18:40:36
STATUS: 1
URL: NULL
APPTYPE: NULL
TEST_KEY: AQAAASBaL2Igf/////////8AAAABAAAAAQEAAAAQnPDr8PHxexN/hwVcTYQL9AEAAAAOAwAAAAEAAAABAAAAAQA=
PRODUCTION_KEY: NULL
TEST_APISUSED: NULL
PRODUCTION_APISUSED: NULL
*************************** 2. row ***************************
ID: 55
VENDORID: 52
NAME: Raj Rao's test 1 application.
DESCRIPTION: <script type='text/javascript'>
alert("I am an alert box!");
</script> CREATIONDATE: 2010-04-09 15:20:53
MODIFICATIONDATE: 2010-06-04 09:09:01
STATUS: 1
URL: http://somewhere.a.b
APPTYPE: 1
TEST_KEY: NULL
PRODUCTION_KEY: NULL
TEST_APISUSED: NULL
PRODUCTION_APISUSED: NULL

#可以看到"TEST_KEY"字段有特殊字符存在,"DESCRIPTION"字段也有换行符等特殊字符存在,因此在导出时需要特别留意,实际上通过cat -v查看数据时可以看到windows换行符"\r\n"

3. 导出MySQL表数据到文本文件中

select count(*) from tap_application;
+----------+
| count(*) |
+----------+
| 847 |
+----------+
1 row in set (0.01 sec) select
IFNULL(ID,''),
IFNULL(VENDORID,''),
IFNULL(NAME,''),
REPLACE(IFNULL(DESCRIPTION,''),'\r\n','/$'),
IFNULL(CREATIONDATE,''),
IFNULL(MODIFICATIONDATE,''),
IFNULL(STATUS,''),
IFNULL(URL,''),
IFNULL(APPTYPE,''),
IFNULL(TEST_KEY,''),
IFNULL(PRODUCTION_KEY,''),
IFNULL(TEST_APISUSED,''),
IFNULL(PRODUCTION_APISUSED,'')
into outfile '/usr/local/mysql/dba/exp/tap_application.txt' fields terminated by '||' optionally enclosed by '^' lines terminated by '\r\n' from tap_application; Query OK, 847 rows affected (0.01 sec) scp /usr/local/mysql/dba/exp/tap_application.txt oracle@10.189.102.118:/u01/app/oracle/dba/imp/

 4. 在Oracle数据库创建对应表结构

CREATE TABLE tap_application (
ID INT NOT NULL PRIMARY KEY,
VENDORID INT NOT NULL,
NAME VARCHAR2(128) NOT NULL,
DESCRIPTION VARCHAR2(255),
CREATIONDATE DATE NOT NULL,
MODIFICATIONDATE DATE NOT NULL,
STATUS INT NOT NULL,
URL VARCHAR2(1024),
APPTYPE INT,
TEST_KEY VARCHAR2(512),
PRODUCTION_KEY VARCHAR2(512),
PRODUCTION_APISUSED VARCHAR2(256)
);

 5. 创建sqlldr控制文件

$ cat /u01/app/oracle/dba/imp/load_tap_application.ctl
load DATA
INFILE '/u01/app/oracle/dba/imp/tap_application.txt'
BADFILE '/u01/app/oracle/dba/imp/tap_application.bad'
DISCARDFILE '/u01/app/oracle/dba/imp/tap_application.dsc'
TRUNCATE
INTO TABLE TAP_APPLICATION
fields terminated by '||' optionally enclosed by '^'
TRAILING NULLCOLS
(
ID integer external,
VENDORID integer external,
NAME char(128),
DESCRIPTION char(255) "replace(:DESCRIPTION,'/$','\r\n')",
CREATIONDATE date "YYYY-MM-DD HH24:MI:SS",
MODIFICATIONDATE date "YYYY-MM-DD HH24:MI:SS",
STATUS integer external,
URL char(1024),
APPTYPE integer external,
TEST_KEY char(512),
PRODUCTION_KEY char(512),
PRODUCTION_APISUSED char(256)
)

 6. 导入数据到Oracle

$ $ORACLE_HOME/bin/sqlldr system/888888 control=/u01/app/oracle/dba/imp/load_tap_application.ctl errors=50000 log=/u01/app/oracle/dba/imp/load_tap_application.log

SQL*Loader: Release 11.2.0.4.0 - Production on Fri Jul 7 08:33:39 2017

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 60
Commit point reached - logical record count 120
Commit point reached - logical record count 180
Commit point reached - logical record count 240
Commit point reached - logical record count 300
Commit point reached - logical record count 360
Commit point reached - logical record count 420
Commit point reached - logical record count 480
Commit point reached - logical record count 540
Commit point reached - logical record count 600
Commit point reached - logical record count 660
Commit point reached - logical record count 720
Commit point reached - logical record count 780
Commit point reached - logical record count 840
Commit point reached - logical record count 847

7. 查看导入的log信息

$ cat /u01/app/oracle/dba/imp/load_tap_application.log 

SQL*Loader: Release 11.2.0.4. - Production on Fri Jul  :: 

Copyright (c) , , Oracle and/or its affiliates.  All rights reserved.

Control File:   /u01/app/oracle/dba/imp/load_tap_application.ctl
Data File: /u01/app/oracle/dba/imp/tap_application.txt
Bad File: /u01/app/oracle/dba/imp/tap_application.bad
Discard File: /u01/app/oracle/dba/imp/tap_application.dsc
(Allow all discards) Number to load: ALL
Number to skip:
Errors allowed:
Bind array: rows, maximum of bytes
Continuation: none specified
Path used: Conventional Table TAP_APPLICATION, loaded from every logical record.
Insert option in effect for this table: TRUNCATE
TRAILING NULLCOLS option in effect Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
ID FIRST * O(^) CHARACTER
Terminator string : '||'
VENDORID NEXT * O(^) CHARACTER
Terminator string : '||'
NAME NEXT O(^) CHARACTER
Terminator string : '||'
DESCRIPTION NEXT O(^) CHARACTER
Terminator string : '||'
SQL string for column : "replace(:DESCRIPTION,'/$','
')"
CREATIONDATE NEXT * O(^) DATE YYYY-MM-DD HH24:MI:SS
Terminator string : '||'
MODIFICATIONDATE NEXT * O(^) DATE YYYY-MM-DD HH24:MI:SS
Terminator string : '||'
STATUS NEXT * O(^) CHARACTER
Terminator string : '||'
URL NEXT O(^) CHARACTER
Terminator string : '||'
APPTYPE NEXT * O(^) CHARACTER
Terminator string : '||'
TEST_KEY NEXT O(^) CHARACTER
Terminator string : '||'
PRODUCTION_KEY NEXT O(^) CHARACTER
Terminator string : '||'
PRODUCTION_APISUSED NEXT O(^) CHARACTER
Terminator string : '||' value used for ROWS parameter changed from to Table TAP_APPLICATION:
Rows successfully loaded.
Rows not loaded due to data errors.
Rows not loaded because all WHEN clauses were failed.
Rows not loaded because all fields were null. Space allocated for bind array: bytes( rows)
Read buffer bytes: Total logical records skipped:
Total logical records read:
Total logical records rejected:
Total logical records discarded: Run began on Fri Jul ::
Run ended on Fri Jul :: Elapsed time was: ::00.44
CPU time was: ::00.01

利用sqlldr从MySQL导出一张表数据到Oracle的更多相关文章

  1. Mysql导出(多张表)表结构及表数据 mysqldump用法

        命令行下具体用法如下:  mysqldump -u用戶名 -p密码 -d 數據库名 表名 脚本名; 1.导出數據库為dbname的表结构(其中用戶名為root,密码為dbpasswd,生成的脚 ...

  2. MySQL实现两张表数据的同步

    有两张表A和B,要求往A里面插入一条记录的同时要向B里面也插入一条记录,向B里面插入一条记录的同时也向A插入一条记录.两张表的结构不同,需要将其中几个字段对应起来.可以用下面的触发器实现. 表A的触发 ...

  3. mysql导出某张表的部分数据

    .使用into outfile '保存到操作系统的外部文件路径' mysql -uroot -p123456 -hhostname -P3306 select column_name_list fro ...

  4. mysql导出多个表数据为excel方法,substring函数查询

    //查询sys_username以S.00655开头的用户 ),sys_password FROM `tbl_sa_syslogin` where sys_username like 'S.%'; / ...

  5. mysql查询哪张表数据最大

    转载:https://blog.csdn.net/qq13650793239/article/details/81142134 mysql数据库中information_schema 数据库存储了数据 ...

  6. sqlplus 导出一张表数据

    内网只让用sql developer 这软件搓的不行,数据加载到51行就黑了,没法法用sqlplus. 打开cmd, sqlplus user/passwd@ip:port/库名set colsep ...

  7. 将Mysql的一张表导出至Excel格式文件

    将Mysql的一张表导出至Excel格式文件 导出语句 进入mysql数据库,输入如下sql语句: select id, name, age from tablename into outfile ' ...

  8. MySQL实例多库某张表数据文件损坏导致xxx库无法访问故障恢复

    一.问题发现 命令行进入数据库实例手动给某张表进行alter操作,发现如下报错. mysql> use xx_xxx; No connection. Trying to reconnect... ...

  9. [转]mysql导出导入中文表解决方法

    在开发过程中会经常用到mysql导出导入中文表,本文将详细介绍其如何使用,需要的朋友可以参考下. 在开发过程中会经常用到mysql导出导入中文表,本文将详细介绍其如何使用,需要的朋友可以参考下一.先针 ...

随机推荐

  1. Redis 应用:缓存

    使用Redis做预定库存缓存功能 缓存是在业务层做的,准确讲应该是在MVC模型中Model的ORM里面 PHP项目的缓存从以前的APC缓存逐渐切换到Redis中,并且根据Redis所支持的数据结构做了 ...

  2. 正则匹配-URL-域名

    DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母.标号中除连字符(-)外不能使用其他的标点符号.级别最低的域名写在最左边,而级别最高的域名写在最右边.由多 ...

  3. JS中什么是发布--订阅模式?

    转载文章部分内容: 发布订阅模式介绍 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. ...

  4. Unity--game

    打怪兽--头像状态 Git :https://github.com/vinieo/attck 打怪兽--背景音乐音量 Git :https://github.com/vinieo/ack_bgm 小球 ...

  5. _spellmod_aura_trigger

    一.spell.dbc做一个空光环 二.配置_spellmod_aura_trigger表 comment 备注 aura 光环ID,有此光环时,才会触发下面技能 linkSpell1-3 链接的技能 ...

  6. docker 日志分析

    日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (Ce ...

  7. java.io.FileNotFoundException异常,一是“拒绝访问”,二是“系统找不到指定路径”

    关于java.io.FileNotFoundException异常 因为这个异常抛出俩种情况:一是“拒绝访问”,二是“系统找不到指定路径” 这里只讲明什么时候抛拒绝访问,什么时候抛找不到指定路径. 原 ...

  8. QT---事件系统

    1         QT事件系统 1.1  事件的定义 QT中事件是有专门的类QEvent,常见的有键盘事件QKeyEvent.鼠标事件QMouseEvent和定时器事件QTimerEvent.例如用 ...

  9. 虚拟机镜像压缩(qcow2,raw)

    ●qcow2 格式的压缩首先,需要对虚拟机系统的剩余空间写零操作: $ dd if=/dev/zero of=/zero.dat 删除 zero.dat$ rm /zero.dat关闭虚拟机,进入虚拟 ...

  10. Codeforces 958C3 - Encryption (hard)

    C3 - Encryption (hard) 思路: 记sum[i]表示0 - i 的和对 p 取模的值. 1.如果k * p > n,那么与C2的做法一致,O(k*p*n)复杂度低于1e8. ...