• 【云原生】-Docker容器迁移Oracle到MySQL


    ???
    哈喽!大家好,我是【】,江湖人称jeames007,10年DBA工作经验
    一位上进心十足的【大数据领域博主】!???
    中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
    擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
    如果有对【数据库】感兴趣的【小可爱】,欢迎关注【】???
    感谢各位大可爱小可爱!

    文章目录

    前言

    Kettle是开源的 【TEL】 工具,JVAV编写,可以运行在多个平台,使用时有图形界面、命令脚本,还可以二次开发。用于数据抽取、转存等,非常方便


    1. 创建专用网络

    docker network create --subnet=168.66.6.0/24 db-network
    [root@docker ~]# docker network inspect db-network --查看网络信息

    在这里插入图片描述

    2. Oracle 12C部署

    2.1 镜像下载

    docker pull registry.cn-shanghai.aliyuncs.com/techerwang/oracle:ora12c_12201

    在这里插入图片描述

    2.2 容器创建

    docker run -itd --name jemora1221 -h jemora1221
    –net=db-network --ip 168.66.6.34
    -p 1526:1521 -p 3396:3389
    –privileged=true
    registry.cn-shanghai.aliyuncs.com/techerwang/oracle:ora12c_12201 init

    在这里插入图片描述

    2.3 创建业务用户

    [root@jeames ~]# docker exec -it jemora1221 bash
    [root@jemora1221 /]# su - oracle
    [oracle@jemora1221 ~]$ sqlplus / as sysdba
    SYS@jem> startup
    SYS@jem> show pdbs
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 JEMPDB                         MOUNTED
    alter pluggable database JEMPDB open;
    SYS@jem> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
    SYS@jem> alter session set container=JEMPDB;
    SYS@jem> create user jemmes identified by jemmes
    SYS@jem> GRANT DBA to jemmes ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.4 监听启动

    [oracle@jemora1221 ~]$ cd $ORACLE_HOME/network
    [oracle@jemora1221 network]$ cd admin
    
    ## 配置TNS,后续连接数据库
    [oracle@jemora1221 admin]$ vi tnsnames.ora
    JEMPDB =
     (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = jemora1221)(PORT = 1521))
     (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = JEMPDB)
     )
     )
     
     ## 监听启动
    lsnrctl start
    lsnrctl status
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    3. MySQL8部署

    3.1 容器创建

    docker run -d --name mysql8027 -h mysql8027 -p 3418:3306
    –net=db-network --ip 168.66.6.35
    -v /etc/mysql/mysql8027/conf:/etc/mysql/conf.d
    -e MYSQL_ROOT_PASSWORD=jeames -e TZ=Asia/Shanghai
    mysql:8.0.27

    查看容器
    [root@jeames ~]# docker ps --format “table {{.ID}} {{.Names}} {{.Status}}”
    CONTAINER ID NAMES STATUS
    043d1652404d jemora1221 Up 7 minutes
    dc2989508b67 mysql8027 Up 23 seconds
    7e6a53d71017 centos7.8 Up 20 minutes

    在这里插入图片描述

    3.2 参数设置

    cat > /etc/mysql/mysql8027/conf/my.cnf << “EOF”
    [mysqld]
    default-time-zone = ‘+8:00’
    log_timestamps = SYSTEM
    skip-name-resolve
    log-bin
    server_id=80273418
    character_set_server=utf8mb4
    default_authentication_plugin=mysql_native_password
    EOF

    3.3 登陆MySQL

    mysql -uroot -pjeames -h 168.66.6.35
    create database jemdb;

    在这里插入图片描述

    4. kettle迁移Oracle到MySQL

    4.1 部署kettle

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行.
    Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

    ??? kettle的组成
    在这里插入图片描述

    整个流程一共分为两步:一是安装JAVA环境;二是下载kettle的安装包

    ??? 安装AVA JDK

    下载jdk安装包后打开文件开始安装
    在这里插入图片描述
    在这里插入图片描述

    添加以下3个变量
    【1】JAVA_HOME:刚刚Java安装的路径,我的是:C:Program FilesJavajdk1.8.0_231
    【2】CLASSPATH:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;
    【3】配置环境变量Path
    双击Path,添加“%JAVA_HOME%in”;添加“%JAVA_HOME%jrein”。
    Win+R键弹出运行窗口,输入cmd,回车运行
    分别输入“java -version”,“javac”进行测试,显示以下内容说明配置成功

    在这里插入图片描述
    ??? 下载kettle安装包

    这里我们选择7.1版本
    在这里插入图片描述
    下载完成解压到任意路径,打开文件夹,找到Spoon.bat,创建桌面快捷方式,打开
    在这里插入图片描述
    在这里插入图片描述
    ??? 数据库驱动包下载

    将mysql驱动和oracle驱动放在kettle包下面的lib包下面即可。
    MySQL JDBC 驱动下载
    文件后缀名为 .tar.gz 的是Linux/IOS的压缩包;后缀为 .zip 的是Windows下的压缩包,
    根据系统选择下载。
    下载这个版本即可:mysql-connector-java-5.1.49-bin.jar
    Oracle JDBC 驱动下载
    在这里插入图片描述
    ??? 数据库连接

    A.建立转换
    在文件->新建装换,新建转换后在左边的主对象树中建立DB连接用以连接数据库

    在这里插入图片描述
    B.数据库连接MySQL
    在这里插入图片描述
    C.数据库连接Oracle 12C
    在这里插入图片描述

    4.2 Oracle端数据校验

    ## 创建测试表
     SYS@jem> conn jemmes/jemmes@JEMPDB    
    @/home/oracle/demo_ora_create.sql
    @/home/oracle/demo_ora_insert.sql
    
    create table flower(
               id varchar2(32)  default sys_guid() primary key,
               flower_name varchar2(200),
               color varchar2(100),
               origin varchar2(200),
               moral varchar2(200),
               create_time timestamp default sysdate,
               update_time timestamp
        );
     JEMMES@JEMPDB> insert into flower(flower_name) values('dd');
    --oracle所有表
    JEMMES@JEMPDB> select * from tab;
    
    --迁移前相关检查
    col TABLE_NAME format a30
    SELECT a.table_name,a.num_rows FROM dba_tables a where a.OWNER='JEMMES' ;
    select object_type,count(*) from dba_objects where owner='JEMMES' group by object_type;
    select object_type,status,count(*) from dba_objects where owner='JEMMES' group by object_type,status;
    select sum(bytes)/1024/1024 from dba_segments where owner='JEMMES';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述

    4.3 迁移Oracle到MySQL

    复制多表
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    完成后,会自动生成如下的执行树:
    在这里插入图片描述
    点击run,开始执行即可:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.4 迁移后MySQL数据验证

    在这里插入图片描述
    在这里插入图片描述

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    一个有关char和整型提升的小题
    【Linux】第十三章 多线程(线程互斥+线程安全和可重入+死锁+线程同步)
    运动耳机哪种佩戴方式好?佩戴稳固舒适的运动耳机
    大数据背景下的信息资源管理
    医院空调冷热源设计方案VR元宇宙模拟演练的独特之处
    手把手教你纯c实现异常捕获try-catch组件
    AT2382-[AGC015D]A or...or B Problem
    Java_多态
    Unity3D Application模拟进入前后台及暂停
    当Web3叙事寒冬到来,游戏是否是冬日里的“一把火”?
  • 原文地址:https://blog.csdn.net/m0_67392409/article/details/126080729