Ora2Pg工具迁移Oracle到openGauss

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.前言
    • 📣 2.Ora2Pg特点
    • 📣 3.环境准备
      • ✨ 3.1 安装openGauss
      • ✨ 3.2 安装Oracle
    • 📣 4.安装Ora2Pg
      • ✨ 4.1 依赖安装
      • ✨ 4.2 正式安装
      • ✨ 4.3 环境变量
    • 📣 5.创建迁移项目
    • 📣 6.正式迁移
      • ✨ 6.1 创建测试表
      • ✨ 6.2 配置ora2pg.conf
      • ✨ 6.3 表迁移

前言

本文详细阐述了Ora2Pg工具迁移Oracle到openGauss的全过程。

📣 1.前言

随着目前信创产业的发展,部分项目的需求,需要将Oracle过渡到openGauss。这种转变将我从一个经验丰富的Oracle DBA转变为openGauss领域的新人。在经历了这次迁移之后,我觉得有必要分享我在此过程中获得的见解。
本文详细介绍了我的旅程、遇到的挑战以及促进这一转变的ora2og这个不可或缺的工具。我希望分享这些经验将使你的openGauss之旅更加顺利。

从Oracle迁移到openGauss不仅仅是按下一个开关这么简单。这是一个包含一系列步骤的旅程,例如架构转换、数据迁移、应用程序迁移和性能调优。每个阶段都有自己的问题,我需要一个解决方案的工具箱来处理它们。

📣 2.Ora2Pg特点

Ora2Pg在openGauss的应用
Ora2Pg主要语言是perl,使用Perl DBI模块,通过DBD:Pg连接PostgreSQL目标数据库,openGauss兼容PostgreSQL的通信协议以及绝大部分语法,因此只需作部分命名上的修改,Ora2Pg同样可应用于openGauss

特点:
支持导出数据库绝大多数对象类型,包括表、视图、序列、索引、外键、约束、函数、存储过程等。
提供PL/SQL到PL/PGSQL语法的自动转换,一定程度避免了人工修正。
可生成迁移报告,包括迁移难度评估、人天估算。
可选对导出数据进行压缩,节约磁盘开销。
配置选项丰富,可自定义迁移行为。
官方网站:https://ora2pg.darold.net/

在这里插入图片描述

📣 3.环境准备

✨ 3.1 安装openGauss

–创建用户组dbgroup
groupadd dbgroup

–创建用户opengauss
创建用户组dbgroup下的普通用户opengauss,并设置普通用户opengauss的密码
useradd -g dbgroup opengauss
passwd opengauss

–解压安装包
mkdir -p /app/openGauss
chmod 755 -R /opt/openGauss-5.0.0-CentOS-64bit.tar.bz2
chown opengauss:dbgroup -R /opt/openGauss-5.0.0-CentOS-64bit.tar.bz2

chmod 755 -R /app/openGauss
chown opengauss:dbgroup -R /app/openGauss

[root@opengauss /]# yum install bzip2
su - opengauss
cd /app/openGauss
tar -jxf /opt/openGauss-5.0.0-CentOS-64bit.tar.bz2 -C /app/openGauss

–安装openGauss
##进入解压后目录下的simpleInstall,执行install.sh脚本安装openGauss
su - opengauss
cd /app/openGauss/simpleInstall
sh install.sh -w “jeames@007” &&source ~/.bashrc

#登录opengauss
[opengauss@centos79 ~]$ gsql -d postgres

[opengauss@opengauss simpleInstall]$  gsql -d postgres
gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:07:56 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

openGauss=# \l
                                   List of databases
   Name    |   Owner   | Encoding |   Collate   |    Ctype    |    Access privileges    
-----------+-----------+----------+-------------+-------------+-------------------------
 finance   | opengauss | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | opengauss | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 school    | opengauss | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | opengauss | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/opengauss           +
           |           |          |             |             | opengauss=CTc/opengauss
 template1 | opengauss | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/opengauss           +
           |           |          |             |             | opengauss=CTc/opengauss
(5 rows)

##编辑 postgresql.conf
[opengauss@centos79 ~]$ cd $GAUSSHOME/data/single_node
修改下面两个参数
listen_addresses = ‘*’
max_connections = 1000

##编辑 pg_hba.conf
文末追加
host all all 0.0.0.0/0 md5

重启openGauss服务
gs_ctl restart -D $GAUSSHOME/data/single_node -Z single_node

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

✨ 3.2 安装Oracle

docker run -itd --name jemora11204 -h jemora11204 \
--privileged=true -p 21521:1521 -p 1222:22  -p 21158:1158 \
--network=mynet --ip 172.18.12.30 \
registry.cn-shanghai.aliyuncs.com/techerwang/oracle:ora11g11204 init

📣 4.安装Ora2Pg

✨ 4.1 依赖安装

1.安装依赖包
Ora2Pg 语言为 perl,故需安装所需 perl 模块。
--root 用户下操作
yum install gcc make net-tools.x86_64
yum install -y perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
yum install perl-CPAN

2.安装perl的一些常用模块安装,Ora2Pg 依赖这些软件去连接数据库。
DBI、JSON、DBD:Pg、DBD:Oracle

[root@ora2pg /]# perl -MCPAN -e 'install DBI'
Appending installation info to /usr/lib64/perl5/perllocal.pod
  TIMB/DBI-1.643.tar.gz
  /usr/bin/make install  -- OK
  
  
[root@ora2pg /]# perl -MCPAN -e 'install JSON'
Appending installation info to /usr/lib64/perl5/perllocal.pod
  ISHIGAKI/JSON-4.10.tar.gz
  /usr/bin/make install  -- OK
  

[root@ora2pg /]# yum install postgresql-devel
[root@ora2pg /]# perl -MCPAN -e 'install DBD::Pg'
Appending installation info to /usr/lib64/perl5/perllocal.pod
  TURNSTEP/DBD-Pg-3.17.0.tar.gz
  /usr/bin/make install  -- OK
  
##安装DBD:Oracle,需要先安装Oracle客户端
https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/


yum install libaio
rpm -ivh oracle-instantclient19.11-basic-19.11.0.0.0-1.x86_64.rpm
rpm -ivh oracle-instantclient19.11-devel-19.11.0.0.0-1.x86_64.rpm
rpm -ivh oracle-instantclient19.11-jdbc-19.11.0.0.0-1.x86_64.rpm
rpm -ivh oracle-instantclient19.11-sqlplus-19.11.0.0.0-1.x86_64.rpm

设置环境变量:
vi /etc/profile 
##添加内容
export ORACLE_HOME=/usr/lib/oracle/19.11/client64/
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

[root@ora2pg ~]# source /etc/profile

# 安装DBD:Oracle
yum install perl-Test-Simple
perl -MCPAN -e 'install DBD::Oracle'


使用 perl -MCPAN -e 'install DBD::Oracle' 安装报错了,换了另一种自己编译的方式。
perl -MCPAN -e shell
cpan[1]> get DBD::Oracle
cpan[2]> quit

[root@ora2pg /]# cd /root/.cpan/sources/authors/id/Z/ZA/ZARQUON/
[root@ora2pg ZARQUON]# tar -zxvf DBD-Oracle-1.83.tar.gz
[root@ora2pg ZARQUON]# cd DBD-Oracle-1.83


[root@ora2pg DBD-Oracle-1.80]# perl Makefile.PL
[root@ora2pg DBD-Oracle-1.80]# make && make install

在这里插入图片描述

✨ 4.2 正式安装

1.安装包下载
https://github.com/darold/ora2pg/releases/tag/v24.1

[root@ora2pg opt]# mkdir /ora2pg
[root@ora2pg opt]# tar -zxvf ora2pg-24.1.tar.gz

[root@ora2pg opt]# cd ora2pg-24.1
[root@ora2pg ora2pg-24.1]# ll
total 660
-rw-rw-r-- 1 root root 21 Sep 8 11:16 INSTALL
-rw-rw-r-- 1 root root 32472 Sep 8 11:16 LICENSE
-rw-rw-r-- 1 root root 180 Sep 8 11:16 MANIFEST
-rw-rw-r-- 1 root root 74326 Sep 8 11:16 Makefile.PL
-rw-rw-r-- 1 root root 169519 Sep 8 11:16 README
-rw-rw-r-- 1 root root 366059 Sep 8 11:16 changelog
drwxrwxr-x 2 root root 4096 Sep 8 11:16 doc
drwxrwxr-x 3 root root 4096 Sep 8 11:16 lib
drwxrwxr-x 5 root root 4096 Sep 8 11:16 packaging
drwxrwxr-x 2 root root 4096 Sep 8 11:16 scripts

perl Makefile.PL PREFIX=/ora2pg
make && make install

[root@ora2pg ora2pg-24.1]# ll /opt/ora2pg-24.1/lib
total 696
drwxrwxr-x 2 root root 4096 Sep 8 11:16 Ora2Pg
-rw-rw-r-- 1 root root 707565 Sep 8 11:16 Ora2Pg.pm

[root@ora2pg ora2pg-24.1]# ll /ora2pg/usr/local/bin
total 60
-r-xr-xr-x 1 root root 47260 Nov 13 16:07 ora2pg
-r-xr-xr-x 1 root root 10549 Nov 13 16:07 ora2pg_scanner

在这里插入图片描述

✨ 4.3 环境变量

##设置环境变量
vi /etc/profile
export PERL5LIB=/opt/ora2pg-24.1/lib
export PATH=$PATH:/ora2pg/usr/local/bin

source /etc/profile

[root@ora2pg ora2pg-24.1]# ora2pg --help
[root@ora2pg ora2pg-24.1]# ora2pg -v
Ora2Pg v24.1

📣 5.创建迁移项目

[root@ora2pg ora2pg-24.1]# ora2pg --init_project oramig
Creating project oramig.
./oramig/
        schema/
                dblinks/
                directories/
                functions/
                grants/
                mviews/
                packages/
                partitions/
                procedures/
                sequences/
                sequence_values/
                synonyms/
                tables/
                tablespaces/
                triggers/
                types/
                views/
        sources/
                functions/
                mviews/
                packages/
                partitions/
                procedures/
                triggers/
                types/
                views/
        data/
        config/
        reports/

Generating generic configuration file
Creating script export_schema.sh to automate all exports.
Creating script import_all.sh to automate all imports.


说明:
其中主要包含两个脚本export_schema.sh和import_all.sh,后续导出和导入即使用这两个脚本。
schema和sources目录存放各对象的DDL语句,区别在于
1)schema存放PL/SQL语法转化为PL/PGSQL后的语句, 
2)sources目录存放转化前PL/SQL的语句

data目录存放表数据文件
config目录包含配置文件ora2pg.conf
reports目录存放迁移报告

📣 6.正式迁移

✨ 6.1 创建测试表

## Oracle建表
create user jeames identified by oracle;
grant dba to jeames;

create table jeames.test(name char(10));
insert into jeames.test values('opengauss');
create table jeames.machine(name char(20));
insert into jeames.machine values('it');

2.openGauss侧新建数据库mydb和用户tuser

su - opengauss
gs_ctl start -D $GAUSSHOME/data/single_node -Z single_node
gsql -d postgres -r


openGauss=# create database mydb;
openGauss=# CREATE USER test WITH PASSWORD 'adm@23456';
openGauss=# GRANT ALL PRIVILEGES TO test;
openGauss=# alter database mydb owner to test;

✨ 6.2 配置ora2pg.conf

参数文件:
/opt/ora2pg-24.1/oramig/config/ora2pg.conf


ORACLE相关参数:
ORACLE_HOME /u01/app/oracle/product/11.2.0/
ORACLE_DSN dbi:Oracle:host=oracleIP;sid=orcl;port=1521
ORACLE_USER customerchat // 这里用的oracle普通用户和密码
ORACLE_PWD XXXXX
SCHEMA customerchat //一般和用户名一样

openGauss相关参数:
PG_DSN dbi:Pg:dbname=mydb;host=localhost;port=5432
PG_USER tuser
PG_PWD 自己定义的密码
工具自身参数:
DATA_LIMIT 默认是10000,如果oracle服务器内存较小,比如4G以下,可以修改为2500或5000,否则可能会报内存不足。
更多更详细的配置项说明,可查看ora2pg.darold.net官网.


测试一下配置:
执行如下命令会返回连接的Oracle版本号
[root@ora2pg /]# ora2pg -t SHOW_VERSION -c /opt/ora2pg-24.1/oramig/config/ora2pg.conf
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0

SHOW_VERSION : display Oracle version
-c 指定配置文件

在这里插入图片描述

✨ 6.3 表迁移

–修改迁移工具oramig目录下export_schema.sh中导出类型EXPORT_TYPE和SOURCE_TYPE
如果迁移迁表和函数,请做如下修改
vi export_schema.sh
EXPORT_TYPE=“TABLE FUNCTION”
SOURCE_TYPE=“FUNCTION”

[root@ora2pg /]# cd /opt/ora2pg-24.1/oramig/
1.导出
在oramig目录下执行
[root@ora2pg oramig]# cd /opt/ora2pg-24.1/oramig/
[root@ora2pg oramig]# sh export_schema.sh
[2023-11-14 01:55:03] [>] 2/2 tables (100.0%) end of scanning.
[2023-11-14 01:55:05] [
>] 5/5 objects types (100.0%) end of objects auditing.
Running: ora2pg -p -t TABLE -o table.sql -b ./schema/tables -c ./config/ora2pg.conf
[2023-11-14 01:55:47] [>] 2/2 tables (100.0%) end of scanning.
[2023-11-14 01:55:50] [
>] 2/2 tables (100.0%) end of table export.
Running: ora2pg -p -t FUNCTION -o function.sql -b ./schema/functions -c ./config/ora2pg.conf
[2023-11-14 01:55:51] [>] 0/0 functions (100.0%) end of functions export.
Running: ora2pg -t FUNCTION -o function.sql -b ./sources/functions -c ./config/ora2pg.conf
[2023-11-14 01:55:53] [
>] 0/0 functions (100.0%) end of functions export.
To extract data use the following command:
ora2pg -t COPY -o data.sql -b ./data -c ./config/ora2pg.conf
注意:执行导出脚本,等待迁移完成。结束后在schema和sources的子目录下生成对应类型的DDL文件,并在末尾给出导出表数据的命令。

在这里插入图片描述

同时reports目录下也生成html格式的迁移报告
cd /opt/ora2pg-24.1/oramig/reports

在这里插入图片描述

--导入,还是在oramig目录下执行导入
导入之前需要具备以下要求:
1.先在openGauss库中创建数据库,并在该数据库下创建用户,把mydb属主设为该用户
import_all.sh中使用PostgreSQL特有的createuser和createdb创建用户和数据库
2.为了使用openGauss命令行工具gsql,需要将数据库的bin和lib加在操作系统的环境变量PATH和LD_LIBRARY_PATH中
vi /etc/profile

export GAUSSHOME=/app/openGauss
export PATH=$GAUSSHOME/bin:$PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH

gsql -U test -d mydb –h 172.18.12.60 -p 5432 -W adm@23456

3.将import_all.sh里的psql修改为gsql
cd /opt/ora2pg-24.1/oramig/

4.当使用普通用户导入数据时,可增加一个执行该脚本的选项,指定用户密码,避免频繁输入密码
sh import_all.sh -d mydb -o test –h 172.18.12.60 -p 5432 –f
注:执行导入脚本,表示使用用户test登录名为mydb的数据库,ip和端口分别是172.18.12.60和5432,-f选项表示跳过用户和数据库是否需要创建的检查。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/145023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2022年12月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下面哪个语句正确定义了元组类型数据tuple1?( ) A: tuple1=[“张三”,“李四”,“王五”] B: tuple1=(“张三”;“李四”;“王五”) C: tuple1=(张三,李四,王五) D: tuple1=(“张三…

C语言从入门到精通之【printf和scanf函数】

printf()是输出函数,scanf()是输入函数,但是它们的工作原理几乎相同。两个函数都使用格式字符串和参数列表。 printf()函数的格式 printf( 格式字符串, 待打印项1, 待打印项2,…);待打印项1、待打印项2等都是要打印的项。它们可以是变量、常量&#xff…

【论文阅读】GAIN: Missing Data Imputation using Generative Adversarial Nets

论文地址:[1806.02920] GAIN: Missing Data Imputation using Generative Adversarial Nets (arxiv.org)

应用层——HTTPS协议

文章目录 一.HTTPS协议介绍二.关于加密1.什么是"加密"2.为什么要加密3.常见的加密方式4.数据摘要 && 数据指纹 三.HTTPS的工作过程探究1.方案1 —— 只使用对称加密(明文传输不可取)2.方案2 —— 只使用非对称加密(仅单向安…

【数据分享】2015-2023年我国地级市逐月房价数据(Excel格式/Shp格式)

房价是一个城市发展程度的重要体现,一个城市的房价越高通常代表这个城市越发达,对于人口的吸引力越大!因此,房价数据是我们在各项城市研究中都非常常用的数据!之前我们分享过我国主要城市2023年房价数据(可…

Vue基础必备掌握知识点-Vue的指令系统讲解(二)

Vue指令系统继续讲解 v-for 作用:基于数据进行循环,多次渲染整个元素 数据类型:数组.对象.数字。。。 遍历数组语法:v-for"(item,index)" in 数组 item:表示每一项 index:则是表现下标 注意:v-for中的key值,key属性唯一的…

【算法|动态规划 | 区间dp No.2】AcWing 1068.环形石子合并

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【AcWing算法提高学习专栏】【手撕算法系列专栏】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程&a…

深度学习实战59-NLP最核心的模型:transformer的搭建与训练过程详解,手把手搭建与跑通

大家好,我是微学AI,今天给大家介绍一下深度学习实战59-NLP最核心的模型:transformer的搭建与训练过程详解,手把手搭建与跑通。transformer是一种基于自注意力机制的深度学习模型,由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它最初被设计用来处理序…

SpringCloudalibaba2

一、nacos简介 Nacos(全称为"Nano Service")是一个用于动态服务发现、配置管理和服务元数据的开源平台。它由阿里巴巴集团于2018年开源,并逐渐成为云原生应用中的重要组件之一。 Nacos提供了以下主要功能: 1. 服务发…

【论文阅读】CTAB-GAN: Effective Table Data Synthesizing

论文地址:[2102.08369] CTAB-GAN: Effective Table Data Synthesizing (arxiv.org) 介绍 虽然数据共享对于知识发展至关重要,但遗憾的是,隐私问题和严格的监管(例如欧洲通用数据保护条例 GDPR)限制了其充分发挥作用。…

IDEA接口调试插件不好找?这款免费用!

IDEA插件市场中的API调试插件不是收费(Fast Request )就是不好用(apidoc、apidocx等等)今天给大家介绍一款国产的API调试插件:Apipost-Helper,完全免费且好看好用! 这款插件由Apipost团队开发的…

java springboot2.7 JSR303与Hibernate进行Bean的数据校验

我们如果对数据能进行格式校验 做个安全检查就会容易很多 其实 各个系统中都必然后拥有数据校验&#xff0c;这也不是新东西 J2EE规范中JSR303就规范定义了一组有关数据校验的API 首先 我们在 pom.xml 中 注入依赖 <dependency><groupId>javax.validation</gr…

异常与中断(一)

使用生活实例引入中断 假设有个大房间里面有小房间&#xff0c;婴儿正在睡觉&#xff0c;他的妈妈在外面看书。 问&#xff1a;这个母亲怎么才能知道这个小孩醒&#xff1f; 过一会打开一次房门&#xff0c;看婴儿是否睡醒&#xff0c;然后接着看书一直等到婴儿发出声音以后再…

接口测试用例设计

接口测试 最后感谢每一个认真阅读我文章的人&#xff0c;礼尚往来总是要有的&#xff0c;虽然不是什么很值钱的东西&#xff0c;如果你用得到的话可以直接拿走&#xff1a; 这些资料&#xff0c;对于【软件测试】的朋友来说应该是最全面最完整的备战仓库&#xff0c;这个仓库也…

【论文阅读】(VAE)Auto-Encoding Variational Bayes

论文地址&#xff1a;[1312.6114] Auto-Encoding Variational Bayes (arxiv.org) 【前言】&#xff1a;VAE模型是Kingma(也是Adam的作者)大神在2014年发表的文章&#xff0c;是一篇非常非常经典&#xff0c;且实现非常优雅的生成模型&#xff0c;同时它还为bayes概率图模型难以…

老卫带你学---go语言中context库里propagateCancel函数

go语言中context库里propagateCancel函数 // 设置当父context取消时候&#xff0c;子context也取消的逻辑 func propagateCancel(parent Context, child canceler) {//父context永远不会被取消&#xff08;例如WithValue&#xff09;done : parent.Done()if done nil {return …

SAP:解决函数CONNE_IMPORT_WRONG_COMP_DECS CX_SY_IMPORT_MISMATCH_ERROR错误

用户反馈报表中取数异常&#xff0c;经检查发现SE37执行取数函数ZLY_R_CWFX03报以下错误。 Category ABAP Programming Error Runtime Errors CONNE_IMPORT_WRONG_COMP_DECS Except. CX_SY_IMPORT_MISMATCH_ERROR ABAP Program ZLY_R_CWFX03FT Application Component Not Assig…

爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)

&#x1f680; 作者&#xff1a;阿辉不一般 &#x1f680; 你说呢&#xff1a;生活本来沉闷&#xff0c;但跑起来就有风 &#x1f680; 专栏&#xff1a;爱上C语言 &#x1f680;作图工具&#xff1a;draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话&#xff0c;还请…

spring-cloud 简介

springcloud 定义 1.定义&#xff1a;springcloud为开发人员提供了在分布式系统中快速构建一些通用模式的工具&#xff08;例如配置管理、服务发现、断路器、路由、控制总线等&#xff09;2.微服务:基于单体应用&#xff0c;基于业务进行拆分&#xff0c;每个服务都是独立应用…