oracle数据迁移到pg库上

本文详细介绍了如何使用ora2pg工具从Oracle数据库迁移到PostgreSQL的过程,包括查询Oracle信息、配置迁移参数、导出表结构和数据、处理数据迁移中的问题以及在PostgreSQL中导入对象和数据。步骤清晰,适用于大规模数据迁移操作。

迁移工具:ora2pg
工具版本:v23.1

1、查询oracle信息

1.1、查看是否有分区表

1.2、查看用户对象占用空间(需要迁移的对象占用空间大小)

2、准备配置文件

vi *.conf

PG_VERSION 12
ORACLE_HOME /oracle/app/oracle/product/11.2.0/dbhome_1
ORACLE_DSN dbi:Oracle:host=xxx.xxx.xxx.xxx;sid=oradb;port=1521
ORACLE_USER user
ORACLE_PWD password
SCHEMA user
PG_NUMERIC_TYPE 0
PG_INTEGER_TYPE 1
DEFAULT_NUMERIC float
NLS_LANG AMERICAN_AMERICA.UTF8
#ALLOW TPR_* TSM_*
#ALLOW tpr_,tsm_,twf_*
#exclude 20 TSM_FUNCTION
#SKIP fkeys pkeys ukeys indexes checks
#OUTPUT table.sql

3、导出表结构和索引

ora2pg -p -c .conf -t TABLE -o table.sql
-e 'TABLE[XXX.
,XXX.]’ 排除指定的表
-a 'TABLE[XXX.
,XXX.*]’ 包括指定的表

4、导出表数据

测试表(数据量小)
[root@myoracle ~]# vi data.sh
ora2pg -p -c *.conf -t COPY -o data.sql -j 4
[root@myoracle ~]# chmod +x data.sh
[root@myoracle ~]# nohup ./data.sh > ./data.out & //后台运行
生产表(数据量大)
select ‘ora2pg -p -c *.conf -t COPY -a ‘‘TABLE[’|| table_name ||’]’’ -o ‘||table_name||’.sql -j 4’ from user_tables where
table_name not like ‘%xxx%’ and table_name not like ‘%xxx%’
order by 1 asc;
//not like 排除某些不需要的表
写成脚本使每个表单独导出
chmod +x data.sh
nohup ./data.sh > ./data.out & //后台运行
导出的.sql文件打包成.tar.gz压缩包

5、导出其他对象数据

vi other.sh //将以下命令放入other脚本中,统一执行
ora2pg -p -c db.conf -t VIEW -o VIEW.sql
ora2pg -p -c db.conf -t SEQUENCE -o SEQUENCE.sql
ora2pg -p -c db.conf -t TRIGGER -o TRIGGER.sql
ora2pg -p -c db.conf -t FUNCTION -o FUNCTION.sql
ora2pg -p -c db.conf -t PROCEDURE -o PROCEDURE.sql
ora2pg -p -c db.conf -t PACKAGE -o PACKAGE.sql
ora2pg -p -c db.conf -t MVIEW -o MVIEW.sql
ora2pg -p -c db.conf -t DBLINK -o DBLINK.sql
ora2pg -p -c db.conf -t SYNONYM -o SYNONYM.sql
ora2pg -p -c db.conf -t TYPE -o TYPE.sql
chmod +x other.sh //赋予执行权限
nohup ./other.sh > ./other.out & //后台执行
tail -f other.out //查看输出日志

6、导入type类型、表结构、表序列

export PGPASSWORD=password //避免手动输入密码
psql --host=xxx.xxx.xxx.xxx --port=5432 --username=user --echo-errors dbname -f TYPE.sql -1
psql --host=xxx.xxx.xxx.xxx --port=5432 --username=user --echo-errors dbname -f table.sql -1
psql --host=xxx.xxx.xxx.xxx --port=5432 --username=user --echo-errors dbname -f SEQUENCE.sql -1
psql:table.sql:1329: ERROR: function round(timestamp
without time zone) does not exist
LINE 14: fldvaliditydate timestamp DEFAULT
ROUND(LOCALTIMESTAMP + '2…
^
去掉ROUND

7、导入数据

测试表(数据量小)
psql --host=xxx.xxx.xxx.xxx --port=5432 --username=user --echo-errors dbname -f data.sql -1
生产表(数据量大)根据导出时的方法
select ‘ora2pg -p -c *.conf -t COPY -a ‘‘TABLE[’|| table_name ||’]’’ -o ‘||table_name||’.sql -j 4’ from user_tables where
table_name not like ‘%xxx%’ and table_name not like ‘%xxx%’
order by 1 asc;
//not like 排除某些不需要的表
写成脚本使每个表单独导出
chmod +x data.sh
nohup ./data.sh > ./data.out & //后台运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值