Ora2Pg是一个开源的迁移转换工具,它可以连接Oracle数据库并进行扫描,自动提取结构或数据,然后生成可加载到AntDB数据库中的SQL脚本。
本文介绍使用Ora2Pg工具先搬迁数据表及数据搬迁到AntDB。
创建相关目录:
mkdir -p /adbdata/ora2pg/{scripts,conf,ddl,data,log}
scripts 存放导出导入操作需要使用的shell脚本。
conf 存放导出对象和数据时候需要使用的配置文件。
ddl 存放导出的对象。
data存放导出的数据。
log 存放导出导入进程产生的日志。
我们使用ora2pg导出迁移范围内的表对象和数据。
导出对象
编写配置文件
ora2pg 导出对象的配置文件如下:
cat > shcrm_so1_ddl.conf << EOF
ORACLE_HOME /home/postgres/oracle/instantclient_11_2
ORACLE_DSN dbi:Oracle:host=10.10.141.225;sid=shcrm1
ORACLE_USER so1
ORACLE_PWD Csxt-123
SCHEMA so1
TYPE TABLE
USER_GRANTS 1
PKEY_IN_CREATE 1
UKEY_IN_CREATE 1
DISABLE_SEQUENCE 1
INDEX_RENAMING 0
STOP_ON_ERROR 0
ALLOW INS_OFFER_21.*,INS_OFF_INS_USER_21.*INS_OFF_INS_USER_21.*,INS_PROD_21.*,INS_PROD_INS_SRV_21.*,INS_SRV_ATTR_21.*,INS_USER_EXT_21.*,INS_DES_USER_21.*,INS_DES_OFFER_21.*,INS_DES_OFF_INS_USER_21.*,INS_DES_PROD_21.*,INS_DES_PROD_INS_SRV_21.*,INS_DES_SRV_ATTR_21.*,INS_DES_USER_EXT_21.*
EOF
建议配置文件放在 ora2pg/conf 目录下。
执行导出操作
nohup ora2pg -c /adbdata/ora2pg/conf/shcrm_so1_ddl.conf -o /adbdata/ora2pg/ddl/shcrm_so1_ins.sql -d > /adbdata/ora2pg/log/shcrm_so1_ins.log 2>&1 &
导入对象
导出的sql文件可以直接通过psql端执行,如下:
psql -p 5432 -d shcrm -u so1 -f /adbdata/ora2pg/ddl/shcrm_so1_ins.sql
对象稽核
对象稽核主要是看两端数据库中在迁移范围内,表数量和索引数量是否一致。
Oracle侧查询
Oracle通过 dba_tables/dba_indexes 或者 user_table/user_indexes来查询:
vi check_obj_ora.sh
#!/bin/bash
# find /data/ora2pg/data/shhis/so1 -maxdepth 1 -name "ORD_BUSI_PRICE_F*.sql" -exec ls -lrt {} \;|awk 'BEGIN {sum7=0}{sum7+=$5} END {print sum7/1024/1024/1024}'
sqldir="/data/ora2pg/data/shhis"
owner=$1
type=$2
tablelike=(ORD_BUSI_PRICE_F
ORD_CUST_F ORD_OFFER_F
ORD_OFF_ORD_USER_F
ORD_PROD_F
ORD_PROD_ORD_SRV_F
ORD_SRV_ATTR_F
ORD_USER_F SO_BUSI_LOG
SO_BUSI_LOG_EXT
SO_CHAG_OFFER_RECORD
ORD_USER_EXT_F
ORD_CUST_EXT_F
ORD_DSMP_SWITCH_F
ORD_ACCREL_F
ORD_DTL_INFO_F
ORD_PRICE_ATTR_F
ORD_USER_OS_STATE_F
ORD_OFFER_RELAT_F
INS_ACCREL_H
I_OPEN_RADIUS_H
I_OPEN_RADIUS_IDX_H )
usertns="username/[email protected]/shhis"
for t in ${tablelike[@]}
do
sqlplus -S /nolog <
用法:sh check_obj_ora.sh so1 dba_index
ADB侧查询
ADB侧通过 pg_tables/pg_indexes来查询:
vi check_obj_adb.sh
#!/bin/bash
# find /data/ora2pg/data/shhis/so1 -maxdepth 1 -name "ORD_BUSI_PRICE_F*.sql" -exec ls -lrt {} \;|awk 'BEGIN {sum7=0}{sum7+=$5} END {print sum7/1024/1024/1024}'
sqldir="/data/ora2pg/data/shhis"
owner=$1
type=$2
tablelike=(ORD_BUSI_PRICE_F
ORD_CUST_F ORD_OFFER_F
ORD_OFF_ORD_USER_F
ORD_PROD_F
ORD_PROD_ORD_SRV_F
ORD_SRV_ATTR_F
ORD_USER_F SO_BUSI_LOG
SO_BUSI_LOG_EXT
SO_CHAG_OFFER_RECORD
ORD_USER_EXT_F
ORD_CUST_EXT_F
ORD_DSMP_SWITCH_F
ORD_ACCREL_F
ORD_DTL_INFO_F
ORD_PRICE_ATTR_F
ORD_USER_OS_STATE_F
ORD_OFFER_RELAT_F
INS_ACCREL_H
I_OPEN_RADIUS_H
I_OPEN_RADIUS_IDX_H )
psqlconn="psql -d shhis -U $owner -q -t"
for t in ${tablelike[@]}
do
$psqlconn << EOF
select '$t',schemaname,count(*)
from $type a
where 1=1
and a.schemaname='$owner'
and upper(a.tablename) like '$t%'
group by schemaname;
EOF
done
用法:sh check_obj_adb.sh so1 pg_tables
AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔电信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。