数据库迁移
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/passwd@10.10.10.10/shhis" for t in ${tablelike[@]} do sqlplus -S /nolog <<EOF set heading off feedback off pagesize 0 verify off echo off conn $usertns select '$t',owner,count(*) from $type a where 1=1 and a.owner=upper('$owner') and a.table_name like '$t%' group by owner; EOF done
复制
用法: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数据库
AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的数亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔电信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。