导出数据
编写配置文件
ora2pg 导出数据的配置文件如下:
cat > shcrm_so1_data.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 COPY
OUTPUT_DIR /adbdata/ora2pg/data/so1
USER_GRANTS 1
FILE_PER_TABLE 1
SPLIT_FILE 1
DISABLE_SEQUENCE 1
STOP_ON_ERROR 0
ORACLE_COPIES 10
DATA_LIMIT 100000
SPLIT_LIMIT 10000000
WHERE expire_date >= to_date('2015/06/01 00:00:00','yyyy/MM/dd hh24:mi:ss') and expire_date < to_date('2016/07/01 00:00:00','yyyy/MM/dd hh24:mi:ss')
EOF
OUTPUT_DIR 指定了导出sql文件的存放目录。
WHERE 指定了导出时候对数据的过滤条件,如果需要全表数据导出,则去掉该参数。
创建相关目录
mkdir -p /adbdata/ora2pg/data/{so1,so2,party}/import_done
import_done 存放各个用户下,导入完成后的sql文件。
导出数据
在迁移涉及到的表数量比较多的时候,建议采用表的方式来记录迁移表的信息,方便查询表的迁移状态。
创建配置表
创建配置表用来存放迁移表的信息:
create table t_ora2adb_tableinfo
(
dbname text,
owner text,
tablename text,
batch_tag text,
o_cnt numeric,
a_cnt numeric,
o_cnt_time timestamp,
a_cnt_time timestamp,
o_minus_a numeric,
a_minus_o numeric,
o_size_m numeric,
a_size_m numeric,
is_export numeric,
export_time timestamp,
where_filter text
);
初始化配置表
insert into t_ora2adb_tableinfo
(dbname,owner,tablename,is_export)
select 'shhis',a.tableowner,a.tablename,0
from pg_tables a
where 1=1
and a.tableowner not in ('postgres','')
and a.schemaname not in ('public','pg_catalog','information_schema')
and a.tablename like 'sec%';
;
更新配置表字段
字段is_export的值在初始化的时候设置为0,需要更新该字段为1或者更新其他字段,则通过update语句来操作:
update t_ora2adb_tableinfo set xx=xx where xx ..
编写导出脚本
vi ora2pg_export.sh
#!/bin/bash
# ora2pg export
# ora2pg config: shhis_data.conf
# sh ora2pg_export.sh owner tablenamelike tablecnt
# sh ora2pg_export.sh configfile username tablename logdir tablecnt
function check_ora_conn
{
conn_tag=`sqlplus -S /nolog < ${logdir}/"ora2pg_"$tableowner_$t.log 2>&1 &
echo "ora2pg to export table: $tableowner.$t"
done
}
# init parameter
configfile=$1
username=$2
tablelike=$3
logdir=$4
tablecnt=$5
tableowner="$username"
dbname="shcrm1"
# Make sure this option is correct,If the oracle database is not connected, the program will exit
oraconn="$username/[email protected]/shcrm"
psqlconn="psql -d $dbname -U $tableowner -q -t"
check_ora2pg
check_ora2pgcfg
init_tablecnt
ora2pg_background
执行导出操作
sh ora2pg_export.sh /adbdata/ora2pg/conf/shcrm_so1_data.conf so1 ord_user_ext_f_210_201612 /adbdata/ora2pg/log 3
AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔电信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。