在过去的社区讨论中,想要使用或正在使用IvorySQL的社区用户,经常问到Oracle 如何迁移到 IvorySQL 中,而且近期随着 Centos7 官方已经停止维护,这一变动促使了很多将 Oracle 部署在 Centos7 上的 Oracle 用户,开始准备 Oracle 数据库的迁移工作。本文将通过介绍 Ora2Pg 工具的安装步骤及使用方法,为 Oracle 数据库迁移到IvorySQL提供一套清晰、可行的操作指南。
1 Ora2Pg 简介
Ora2Pg 是一款专门用于将 Oracle 数据库迁移到 PostgreSQL上的开源工具。而IvorySQL基于PostgreSQL开发,也同样适配Ora2Pg。
Ora2Pg由一个Perl 脚本(ora2pg)以及一个Perl 模块组成。https://github.com/darold/ora2pg/blob/master/lib/Ora2Pg.pm[Ora2Pg.pm]
使用Ora2Pg时唯一需要做的事情就是修改它的配置文件 ora2pg.conf,设置连接 Oracle 数据库的 DSN 和一个可选的 SCHEMA 名称。
完成之后,只需要设置导出的类型:TABLE(包括约束和索引)、VIEW、MVIEW、TABLESPACE、SEQUENCE、INDEXES、TRIGGER、GRANT、FUNCTION、PROCEDURE、PACKAGE、PARTITION、TYPE、INSERT 或 COPY、FDW、QUERY、KETTLE 以及 SYNONYM。
默认情况下,Ora2Pg 会导出一个 SQL语句的 文件,可以通过 IvorySQL 客户端工具 psql 执行导出SQL文件。当进行数据迁移时,可以在配置文件中设置一个目标数据库的 DSN,直接将数据从Oracle导入到 IvorySQL 数据库中。
2 Ora2Pg 安装
数据库部署环境:
Linux环境 | Oracle版本 | IvorySQL版本 |
Centos 7.9 | 19.0.0.0 | \ |
Ubuntu 24.04(Docker25.0.4) | \ | 3.2 |
2.1 yum安装perl、perl相关模块及其他工具
yum install -y perl perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker bzip2
2.2 下载编译安装DBI
wget
https://mirrors.sjtug.sjtu.edu.cn/cpan/modules/by-module/Plack/TIMB/DBI-1.643.tar.gz
tar zxvf DBI-1.643.tar.gz
cd DBI-1.643/
perl Makefile.PL
make && make install
2.3 下载编译安装 DBD-Oracle
wget --no-check-certificate
https://www.cpan.org/modules/by-module/DBD/DBD-Oracle-1.76.tar.gz
export LD_LIBRARY_PATH=/opt/oracle/product/19c/dbhome_1/lib:$LD_LIBRARY_PATH
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
tar -zxvf DBD-Oracle-1.76.tar.gz
cd DBD-Oracle-1.76
perl Makefile.PL
make && make install
2.4 下载编译安装 Ora2Pg
进入
https://sourceforge.net/projects/ora2pg/
下载ora2pg-24.0.tar.bz2
tar -xjf ora2pg-24.0.tar.bz2
cd ora2pg-24.0
perl Makefile.PL
make && make install
3 Ora2Pg 工具使用
3.1 修改ora2pg.conf
cat /etc/ora2pg/ora2pg.conf.dist | grep -v ^# |grep -v ^$ >ora2pg.conf
vim ora2pg.conf
根据自己Oracle数据库信息,在ora2pg.conf修改信息,包括host,sid,port,用户名、密码,SCHEMA等,如下图所示。
3.2 确认信息填写正确
信息修改完成后,通过查看oracle数据库版本号,确认ora2pg.conf可以使用
ora2pg -t SHOW_VERSION -c ora2pg.conf
3.3 评估迁移成本
在数据库迁移过程中,评估迁移成本非常重要,而Ora2Pg拥有评估迁移成本的功能。
在评估过程中,Ora2Pg会检查所有数据库对象,所有函数和存储过程,以检测是否仍有一些对象和PL / SQL代码无法由Ora2Pg自动转换,最终,通过内容分析模式,生成有关Oracle数据库包含的内容和无法导出的内容的文本报告。
导出数据评估报告命令如下:
ora2pg -t SHOW_REPORT --estimate_cost -c ora2pg.conf
3.4 查询源端对象类型,修改ora2pg.conf
select distinct OBJECT_TYPE from dba_objects where OWNER = 'BALINOR';
通过Ora2Pg导出类型文档
https://ora2pg.darold.net/documentation.html#Oracle-schema-to-export
修改ora2pg.conf
3.5 开始数据库导出
使用导出命令,对数据库进行导出操作,命令如下:
ora2pg -c ora2pg.conf
导出成功后,将产生如下文件。
之后,我们还需要对表中数据进行导出
vim ora2pg.conf
按下图标记处内容进行修改即可
执行导出命令
ora2pg -c ora2pg.conf
至此,所有数据均已导出,导出文件为:DATA_output.sql,FUNCTION_output.sql, PROCEDURE_output.sql,TABLE_output.sql,VIEW_output.sql
4
完成数据库迁移
在已经安装IvorySQL数据库的服务器上,对导出文件进行解压。
4.1 迁移前准备
连接IvorySQL数据库,创建一个orcl数据库,并创建一个balinor的用户。
4.2 导入表结构
psql orcl -U ivorysql -h 127.0.0.1 -p 1524
-f ./TABLE_output.sql
4.3 导入数据
psql orcl -U ivorysql -h 127.0.0.1 -p 1524 -f ./DATA_output.sql
4.4 导入存储过程
psql orcl -U ivorysql -h 127.0.0.1 -p 1524 -f ./PROCEDURE_output.sql
4.5 导入函数
psql orcl -U ivorysql -h 127.0.0.1 -p 1524 -f ./FUNCTION_output.sql
4.6 导入视图
psql orcl -U ivorysql -h 127.0.0.1 -p 1524 -f ./VIEW_output.sql
4.7 检查迁移结果
在IvorySQL中,查看迁移的Table,View并测试Procedure,Function,均获得到正确结果。
至此,利用Ora2Pg工具将Oracle迁移到IvorySQL工作已经完成。