oracle数据迁移到pg库上

  • Post author:
  • Post category:其他


迁移工具: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 & //后台运行



版权声明:本文为God_sign原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。