zoukankan      html  css  js  c++  java
  • 利用sqlldr从MySQL导出一张表数据到Oracle

    根据业务需求,需要从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=55G
    *************************** 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换行符" "

    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,''),'
    ','/$'),
    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 '
    ' 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,'/$','
    ')",
    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.0 - Production on Fri Jul 7 08:33:39 2017
    
    Copyright (c) 1982, 2011, 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: 0
    Errors allowed: 50000
    Bind array:     64 rows, maximum of 256000 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   128      O(^) CHARACTER            
        Terminator string : '||'
    DESCRIPTION                          NEXT   255      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  1024      O(^) CHARACTER            
        Terminator string : '||'
    APPTYPE                              NEXT     *      O(^) CHARACTER            
        Terminator string : '||'
    TEST_KEY                             NEXT   512      O(^) CHARACTER            
        Terminator string : '||'
    PRODUCTION_KEY                       NEXT   512      O(^) CHARACTER            
        Terminator string : '||'
    PRODUCTION_APISUSED                  NEXT   256      O(^) CHARACTER            
        Terminator string : '||'
    
    value used for ROWS parameter changed from 64 to 60
    
    Table TAP_APPLICATION:
      847 Rows successfully loaded.
      0 Rows not loaded due to data errors.
      0 Rows not loaded because all WHEN clauses were failed.
      0 Rows not loaded because all fields were null.
    
    
    Space allocated for bind array:                 254880 bytes(60 rows)
    Read   buffer bytes: 1048576
    
    Total logical records skipped:          0
    Total logical records read:           847
    Total logical records rejected:         0
    Total logical records discarded:        0
    
    Run began on Fri Jul 07 08:33:39 2017
    Run ended on Fri Jul 07 08:33:39 2017
    
    Elapsed time was:     00:00:00.44
    CPU time was:         00:00:00.01
  • 相关阅读:
    Google黑板报上连载的长文
    sql server2000 数据同步
    sql server 2000 数据同步(2)
    reset sql server express sa password
    Fetion分析之二:服务器地址从何而来——变态的配置文件(转)
    CentOS软件安装血泪经验(转)
    《Unix & Linux 大学教程》(转)
    有关CentOS6的man报错
    linux 命令行学习笔记
    ubuntu 無法掛載ntfs分區
  • 原文地址:https://www.cnblogs.com/ilifeilong/p/7128513.html
Copyright © 2011-2022 走看看