先说在安装过程中遇到的问题:
1.首次想到的是将工具安装到oracle的服务器上面,从而达到数据不出机器,安全的一种思路,但是在安装的过程中遇到了这样或者那样的问题,虽然最后都解决了问题,也成功执行了。但是最终导致了linux的账号和密码无法登录的问题,root权限也无法登录,进而只能重刷服务器镜像环境。 故放弃。
遇到的问题就不记录了。意义不大。最后将ora2pg安装在了界定于oracle和PG的第三台机器上面。
最终实现的效果,通过执行命令,ora2pg会扫描数据库,将数据库的表结构和数据全部导出变成 sql文件,然后在通过pg 客户端,通过psql 命令将sql文件重新再次导入到PG,完成需求。
再次声明:
1. oracle 和PG 有些许数据类型的不一致,在导入导出之前需要根据实际情况进行判断,确定自己需要导出和导入的数据类型。
2. oracle 和PG 的sql 语法有细小区别,可能会导致修改sql
3. 数据库字段的大小写问题,oracle 内部默认字段全部是大写,而PG 默认是小写,这就导致我们自己编写的查库sql多少会有差异。
4. 二者的函数也有稍许不同。同样需要注意。
参考官网: https://ora2pg.darold.net/
linux: 8.x
ora2pg: 23.1
DBD-oracle: 1.8.3
oracle-instantclient 19. basic, devel,jdbc,sqlplus: 19.6.0.0.0
postgresql: 12
yum install -y oracle-instantclient19.6-jdbc oracle-instantclient19.6-basic oracle-instantclient19.6-devel oracle-instantclient19.6-sqlplus
yum install -y gcc
yum install perl-devel
yum install -y perl-DBI
起名为ora2pg
将安装包放入ora2pg目录下
tar xvf DBD-Oracle-1.8.3.tar.gz
cd DBD-Oracle-1.8.3
perl Makefile.PL
make
make install
同样的将安装包放入创建好的ora2pg 目录下
tar xvf ora2pg-23.1.tar.gz
cd ora2pg-23.1.tar
perl Makefile.PL
make&&make install
安装完成进行检查:
ora2pg -v
如果执行此命令发现没有反应,not found command, 那么需要我们手动配置ora2pg 的环境进行。一般情况下,安装会在默认的目录下面
如果需要,请自行查询ora2pg 的默认安装目录,然后通过export 命令,将其环境变量进行配置,然后再次执行check 命令。
yum -y install postgresql12
安装完成进行检查:
psql -v
首先,当我们吧ora2pg 安装好之后,进入到ora2pg的目录后,我们会看到 ora2pg.conf.dist 这个文件,这个为官方的配置参考文件。
一般情况下,我们在导入导出数据的时候,我们会将数据库表结构和数据分开进行导入。
所以这里我们需要两个配置文件。一个针对table,一个针对data
配置文件存放的地方也同样放于前面新创建的目录:ora2pg
导出的表名称起名为: ora2pg_table.conf
# oracle 数据库的安装目录
ORACLE_HOME
# oracle数据库的连接信息
ORACLE_DSN
# oracle数据库用户名
ORACLE_USER
#密码配置的明文
ORACLE_PWD
#oracle 数据库的schema
SCHEMA
#配置0不导出schema, 配置1导出schema
EXPORT_SCHEMA 0
# TYPE 为table 表明导出的是数据库表结构,如果为insert, 导出的则是数据, 还有其他的配置,具体查询官方给的配置文档
TYPE TABLE
#此字段为导入PG时候需要的schema字段,如果上述配置导出的时候导出了oracle的schema,那么这个字段可删除掉不进行配置,如果没有导出Oracle的schema,需要在导入到PG的时候导入新的schema,那么则需要手动提前创建PG的schema,并在此处进行配置
PG_SCHEMA
# 此处配置的oracle导入到PG 的数据类型的转换。针对不同的数据类型,自行根据需要进行配置,多个之间逗号隔开
DATA_TYPE DATA:data
#导出的字符格式,一般不需要懂
NLS_LANG AMERICAN_AMERICA.UTF8
#配置导出时的log输出路径,如果导出成功,log文件里面没有内容,如果导出失败,log里面一般会有原因
LOGFILE /tmp/table.log
# 配置导出的表结构sql文件,可以和log放一块
OUTPUT /tmp/table.sql
导出的数据配置文件起名为: ora2pg_data.conf
# oracle 数据库的安装目录
ORACLE_HOME
# oracle数据库的连接信息
ORACLE_DSN
# oracle数据库用户名
ORACLE_USER
#密码配置的明文
ORACLE_PWD
#oracle 数据库的schema
SCHEMA
#配置0不导出schema, 配置1导出schema
EXPORT_SCHEMA 0
# TYPE 为table 表明导出的是数据库表结构,如果为insert, 导出的则是数据, 还有其他的配置,具体查询官方给的配置文档
TYPE INSERT
#此字段为导入PG时候需要的schema字段,如果上述配置导出的时候导出了oracle的schema,那么这个字段可删除掉不进行配置,如果没有导出Oracle的schema,需要在导入到PG的时候导入新的schema,那么则需要手动提前创建PG的schema,并在此处进行配置
PG_SCHEMA
# 此处配置的oracle导入到PG 的数据类型的转换。针对不同的数据类型,自行根据需要进行配置,多个之间逗号隔开
DATA_TYPE DATA:data
#导出的字符格式,一般不需要懂
NLS_LANG AMERICAN_AMERICA.UTF8
#配置导出时的log输出路径,如果导出成功,log文件里面没有内容,如果导出失败,log里面一般会有原因
LOGFILE /tmp/data.log
# 配置导出的表结构sql文件,可以和log放一块
OUTPUT /tmp/data.sql
#此命令执行的时候会进行当前schema 下的全表扫描并导出所有的表结构
ora2pg -c ora2pg_table.conf
#此命令执行的时候会进行当前schema下的指定的表名进行扫描,并导出表结构
ora2pg -c ora2pg_table.conf -a 'TABLE[表名,表名,表名]'
#此命令执行的时候会进行当前schema 下的全表扫描并导出所有的表数据
ora2pg -c ora2pg_data.conf
#此命令执行的时候会进行当前schema下的指定的表名进行扫描,并导出表数据
ora2pg -c ora2pg_data.conf -a 'TABLE[表名,表名,表名]'
同样的,这块因为安装了PG,我们也是直接执行psql 命令直接进行导入就行。
3.3.1 导入表结构
# -h pg 的host, -p 端口, -U 用户名, -d database, -f 前面导出的数据文件路径和名称
psql -h xxx -p xxx -U xxx -d xxx -f /tmp/table.sql
3.3.2 导入 数据
# -h pg 的host, -p 端口, -U 用户名, -d database, -f 前面导出的数据文件路径和名称
psql -h xxx -p xxx -U xxx -d xxx -f /tmp/data.sql