因为业务需要,有个临时的活动需要DBA来支持一些数据业务,问题来了,需要从MySQL端同步一部分数据到Oracle端,然后从Oracle端匹配查到相应的数据返回给MySQL,至于原因,也是不同的业务系统,不同的权限分配,还没法做到一个应用端去读取这些信息,而且也有安全的考虑,大体就是两部分的数据也是互相补充,但又彼此独立,是一个全集和子集的关系。
这个流程本来从开发的角度来看似乎是一头雾水,所以交给他们来规划就容易出现问题,最后沟通后的流程是下面的形式。
下面这个图左边是Oracle的环境,右边是MySQL的环境,两个环境的表中都存在一个共同的字段就是序列号serial_no,而且MySQL段的序列号是Oracle端的子集,两者是存在一一映射关系的。

现在的问题是MySQL端可以提供uid,但是无法得知cn_number,因为这部分信息在Oracle端。Oracle端又没有uid的概念,所以需要MySQL端提供serial_no来映射才可以。
所以一来二去,得到的流程就是需要5个步骤。
首先开发部门提供需要的uid(1),然后MySQL端抽取后把文件同步到Oracle端(2),然后在Oracle端进行关联查询,得到一个uid和cn_number的组合(3),然后同步到MySQL端,
最后MySQL端得到这部分数据,最终开发的需求就完成了。

很快就得到了MySQL端同步过来的数据,是个本文文件,内容如下:
687914 | 0d6c3956-d53d-4e14-9fba-cb73cec661e6
694786 | 41159bb3-970b-4b6b-9c5d-46e1f3d388be
746010 | 011d632d-149a-4e3d-ad00-dcae53f60825
1226533| 78dd80d3-6ad0-4bd5-aa1d-843c32b7ddab
1399846| 3dcc5982-bcc7-4cbf-9f99-b5a51b932b1d
1400221| 4fc505eb-20a6-451c-8674-5667e33167e7
因为推送过来的表的数据可能会有变化的,但是每次都去更新表的数据还是有些繁琐,一个方便的办法就是外部表了。
CREATE TABLE passport_ext
      (uid    number,
       serial_no  varchar2(100))
    ORGANIZATION EXTERNAL
      (TYPE ORACLE_LOADER
      DEFAULT DIRECTORY ext_dir
      ACCESS PARAMETERS
        (
        FIELDS TERMINATED BY '|'        
        )
      LOCATION ('mysql_uid_serial_no.lst')
     );
所以一旦MySQL端推送文件过来了,我只需要替换文本文件即可,然后就不用反复做数据的导入了。
直接拿过来关联即可。
但是创建外部表的时候老师抛错,最后发现uid是保留字,用下面的例子来验证。
>  CREATE TABLE passport_ext (uid varchar2(10));
 CREATE TABLE passport_ext (uid varchar2(10))
                                          *
ERROR at line 1:
ORA-00904: : invalid identifier
>  CREATE TABLE passport_ext (uidd varchar2(10));
Table created.
其实后面经过老猫指点,还是可以用"uid"来代替的,这个用法就跟MySQL里面的反引号类似了。
create table test1(`int` int);
Query OK, 0 rows affected (0.00 sec)
不过这个时候还是要注意。下面的输出结果,其实如果用双引号,还是不规范的,而且需要应用端去修改,这样就是一个隐藏的雷。多谢怀总指点。
SQL> create table test("uid" number);
Table created.
SQL> select uid,UID,"uid" from test;
UID UID uid
---------- ---------- ----------
0 0 1
所以在数据导入之后还是最好把字段名改过来,我就直接改成了uidd,因为字段名表关联没有强制要求uid这个列名。
关于保留字可以通过下面的方式来查询
SQL> select * from v$reserved_words where keyword='UID';
外部表加载了之后,关联的时候发现竟然没有匹配的数据,最后发现还是得trim一下数据
select t1.uidd ,t2.cn_number from passport_ext t1,passport t2 where trim(t1.serial_no)=t2.seriao_no;
通过这种方式就得到了一个数据清单,可以再次推送给MySQL端了。
这个案例还是很简单的,但是把这个过程做了多步的分解,可以看出在数据迁移中还是有很多的潜在因素需要考虑。

使用外部表关联MySQL数据到Oracle相关推荐

  1. Hive 外部表关联分区数据

    0. 说明 已经安装好Hadoop和hive环境,hive把元数据存储在mysql数据库.这里仅讨论外部表和HDFS的关联,并且删掉外部表之后,对HDFS上的文件没有影响. 1. 在HDFS创建分区, ...

  2. oracle数据表转换为mysql数据表

    oracle数据表转换为mysql数据表,或者反过来,我们可以借助navica的工具 1.打开navicat的工具->数据传输 2.选择源数据库以及目标数据库 目标可以选择数据库也可以选择文件, ...

  3. 通达OA系统2019版流程中心,外部表单提交数据到指定流程第一步

    通达OA系统2019版流程中心,外部表单提交数据到指定流程第一步 总体操作过程 具体操作过程 1.根据需要提交到流程的表单,新建表 2.系统管理员账号登录OA系统,按照 菜单>流程中心>工 ...

  4. hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据

    概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...

  5. MySQL高级之外键、表关联、数据导入及导出

    文章目录 MySQL高级 外键(foreign key) 嵌套查询(子查询) 多表查询 连接查询 数据导入 数据导出 表的复制 锁(自动加锁和释放锁) MySQL高级-重点掌握 外键 嵌套查询(子查询 ...

  6. mysql delete 表关联删除数据_MYSQL中delete删除多表数据与删除关联数据

    在mysql中删除数据方法有很多种,最常用的是使用delete来删除记录,下面我来介绍delete删除单条记 录与删除多表关联数据的一些简单实例. 1.delete from t1 where 条件 ...

  7. Power Pivot 系列 (1) - 做一个多表关联的数据透视表

    先看一个图: 这个系列的图在网上常被引用,所表达的关系曾经代表 Microsoft 公司数据分析工具的一个推荐组合:原始的数据 (Raw Data) 被加载到 Power Query 中进行清洗 (P ...

  8. 【原创】大叔经验分享(25)hive通过外部表读写hbase数据

    在hive中创建外部表: CREATE EXTERNAL TABLE hive_hbase_table( key string, name string, desc string ) STORED B ...

  9. php mysql 表关联,mysql的多表关联_MySQL

    bitsCN.com mysql的多表关联 数据库中经常要用到多个表的关联.mysql的关联主要包括inner join,left join,right join三种,下面分别加以介绍,并举例说明. ...

最新文章

  1. c语言运动会成绩统计报告,C语言程序设计运动会成绩统计系统1研究报告.doc
  2. 二维模式(矩阵)匹配(Rabin-Karp算法推广到二维)[转]
  3. WordPress永久链接 静态化教程
  4. 【杭电多校2020】Total Eclipse【贪心】【并查集】
  5. PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延
  6. 服务器存储满了进不去系统,解决PC常见问题 篇四十五:建议收藏!手贱升级进不去系统?两步简单恢复黑群晖!...
  7. mysql 浮点类型有宽度指示器吗_mysql中的浮点类型
  8. 年度最流行英文字体20款
  9. keil安装及mdk
  10. 线性代数-矩阵方程应用:配平化学方程式
  11. Relative Orientation 与fundamental essential matrix
  12. hp1020打印机驱动下载地址
  13. 原创SpringMvc+Mybatis+Redis框架
  14. NLP初学-Word Segmentation(分词)
  15. 知之道,达有余而通不足;行之道,嬴有余以弥不足。知行合一,亦乎 如是。
  16. 前端萌新看过来了—— 0基础1小时vue入门到实战
  17. 我们应该怎样面对自己
  18. birthday中文是什么_birthday中文怎么读
  19. 如何报名拼多多官方活动?万顿思电商
  20. 浅谈智能化能源管理系统平台在企业中的应用

热门文章

  1. Android学习之JSON数据解析
  2. SCRUM的三个工件
  3. Qt 连接达梦数据库
  4. BetaBot 木马分析
  5. Android 多线程下载 显示进度 速度
  6. 一键安装lamp系统
  7. Windows 10或成为最后一个Windows版本
  8. JavaScript实现存储HTML字符串
  9. WPF QuickStart系列之样式和模板(Style and Template)
  10. 使用负载均衡SLB IPv6搞定苹果AppStore审核