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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 因为业务需要,有个临时的活动需要DBA来支持一些数据业务,问题来了,需要从MySQL端同步一部分数据到Oracle端,然后从Oracle端匹配查到相应的数据返回给MySQL,至于原因,也是不同的业务系统,不同的权限分配,还没法做到一个应用端去读取这些信息,而且也有安全的考虑,大体就是两部分的数据也是互相补充,但又彼此独立,是一个全集和子集的关系。
因为业务需要,有个临时的活动需要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端了。
这个案例还是很简单的,但是把这个过程做了多步的分解,可以看出在数据迁移中还是有很多的潜在因素需要考虑。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
缓存 NoSQL 关系型数据库
13- Redis和Mysql如何保证数据⼀致?
该内容讨论了保证Redis和MySQL数据一致性的几种策略。首先提到的两种方法存在不一致风险:先更新MySQL再更新Redis,或先删Redis再更新MySQL。第三种方案是通过MQ异步同步以达到最终一致性,适用于一致性要求较高的场景。项目中根据不同业务需求选择不同方案,如对一致性要求不高的情况不做处理,时效性数据设置过期时间,高一致性需求则使用MQ确保同步,最严格的情况可能涉及分布式事务(如Seata的TCC模式)。
35 6
|
16天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
|
23天前
|
关系型数据库 MySQL
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
20 0
|
25天前
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
20 1
|
25天前
Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
21 2
|
25天前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
15 1
|
21天前
|
关系型数据库 MySQL
MySQL查询当天昨天明天本月上月今年等数据
MySQL查询当天昨天明天本月上月今年等数据
19 2
|
25天前
|
Java 数据库连接 mybatis
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
14 1
|
25天前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
14 1
|
25天前
Mybatis+mysql动态分页查询数据案例——房屋信息的接口(IHouseDao)
Mybatis+mysql动态分页查询数据案例——房屋信息的接口(IHouseDao)
12 1

推荐镜像

更多