数据大挪移之ora2pg使用指南

ora2pg是一款免费的小工具,用于将Oracle数据库迁移到PostgreSQL。ora2pg通过自动扫描oracle数据库获取表结构以及数据,然后生成PostgreSQL数据库的SQL脚本或者直接在PostgreSQL上创建表并插入数据。而且它还支持视图、序列以及分区表,其功能非常强大。这里有一个120G左右的oracle 11g测试库,因业务需求将其迁移至PostgreSQL 10.6。

一、安装ora2pg

1.1 安装OS依赖软件包

[root@pg07 ~]# yum install perl-DBD-Pg perl perl-devel perl-DBI  perl-CPAN bzip2 perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

1.2 安装Oracle瘦客户端

从Oracle官方网站下载oracle 12c的瘦客户端,然后进行安装并配置。

[root@pg07 u02]# la /u02/software/oracle/
total 55M
drwxr-xr-x 2 root root 4.0K Dec  3 15:04 .
drwxr-xr-x 7 root root   76 Dec  3 15:04 ..
-rw-r--r-- 1 root root  51M Nov 28 14:34 oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
-rw-r--r-- 1 root root 593K Nov 28 14:32 oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
-rw-r--r-- 1 root root 1.5M Nov 28 14:32 oracle-instantclient12.2-jdbc-12.2.0.1.0-1.x86_64.rpm
-rw-r--r-- 1 root root 692K Nov 28 14:32 oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
-rw-r--r-- 1 root root 922K Nov 28 14:35 oracle-instantclient12.2-tools-12.2.0.1.0-1.x86_64.rpm
[root@pg07 ~]# yum -y localinstall /u02/software/oracle/oracle-instantclient12.2-*.rpm
[root@pg07 ~]# mkdir -p /usr/lib/oracle/12.2/client64/network/admin

编辑root环境变量,加入以下内容:

[root@pg07 ~]# vi .bash_profile 
export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export TNS_ADMIN=/usr/lib/oracle/12.2/client64/network/admin
export ORACLE_HOME=/usr/lib/oracle/12.2/client64/
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
[root@pg07 ~]# source .bash_profile

1.3 安装ora2pg

[root@pg07 ~]# wget https://sourceforge.net/projects/ora2pg/files/19.1/ora2pg-19.1.tar.bz2
[root@pg07 ~]# tar -xjf ora2pg-19.1.tar.bz2 
[root@pg07 ~]# cd ora2pg-19.1
[root@pg07 ora2pg-19.1]# perl Makefile.PL 
Checking if your kit is complete...
Looks good
Writing Makefile for Ora2Pg

Done...
------------------------------------------------------------------------------
Please read documentation at http://ora2pg.darold.net/ before asking for help
------------------------------------------------------------------------------
Now type: make && make install
[root@pg07 ora2pg-19.1]# make && make install
cp lib/Ora2Pg.pm blib/lib/Ora2Pg.pm
cp lib/Ora2Pg/GEOM.pm blib/lib/Ora2Pg/GEOM.pm
cp lib/Ora2Pg/PLSQL.pm blib/lib/Ora2Pg/PLSQL.pm
cp lib/Ora2Pg/MySQL.pm blib/lib/Ora2Pg/MySQL.pm
cp scripts/ora2pg blib/script/ora2pg
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/ora2pg
cp scripts/ora2pg_scanner blib/script/ora2pg_scanner
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/ora2pg_scanner
Manifying blib/man3/ora2pg.3
Installing /usr/local/share/perl5/Ora2Pg.pm
Installing /usr/local/share/perl5/Ora2Pg/GEOM.pm
Installing /usr/local/share/perl5/Ora2Pg/PLSQL.pm
Installing /usr/local/share/perl5/Ora2Pg/MySQL.pm
Installing /usr/local/share/man/man3/ora2pg.3
Installing /usr/local/bin/ora2pg
Installing /usr/local/bin/ora2pg_scanner
Installing default configuration file (ora2pg.conf.dist) to /etc/ora2pg
Appending installation info to /usr/lib64/perl5/perllocal.pod

1.4 安装DBD::Oracle

[root@pg07 ~]# perl -MCPAN -e shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.
cpan[1]> get DBD::Oracle
Fetching with HTTP::Tiny:
http://mirror.truenetwork.ru/CPAN/authors/01mailrc.txt.gz
Reading '/root/.cpan/sources/authors/01mailrc.txt.gz'
............................................................................DONE
Fetching with HTTP::Tiny:
http://mirror.truenetwork.ru/CPAN/modules/02packages.details.txt.gz
Reading '/root/.cpan/sources/modules/02packages.details.txt.gz'
  Database was generated on Wed, 28 Nov 2018 23:54:25 GMT
  HTTP::Date not available
.............
  New CPAN.pm version (v2.16) available.
  [Currently running version is v1.9800]
  You might want to try
    install CPAN
    reload cpan
  to both upgrade CPAN.pm and run the new version without leaving
  the current session.

...............................................................DONE
Fetching with HTTP::Tiny:
http://mirror.truenetwork.ru/CPAN/modules/03modlist.data.gz
Reading '/root/.cpan/sources/modules/03modlist.data.gz'
DONE
Writing /root/.cpan/Metadata
Running get for module 'DBD::Oracle'
Fetching with HTTP::Tiny:
http://mirror.truenetwork.ru/CPAN/authors/id/Z/ZA/ZARQUON/DBD-Oracle-1.76.tar.gz
Fetching with HTTP::Tiny:
http://mirror.truenetwork.ru/CPAN/authors/id/Z/ZA/ZARQUON/CHECKSUMS
Checksum for /root/.cpan/sources/authors/id/Z/ZA/ZARQUON/DBD-Oracle-1.76.tar.gz ok
Scanning cache /root/.cpan/build for sizes
DONE
cpan[2]> quit
Terminal does not support GetHistory.
Lockfile removed.
[root@pg07 ~]# cd .cpan/build/DBD-Oracle-1.76-sU5yu5/
[root@pg07 DBD-Oracle-1.76-sU5yu5]# perl Makefile.PL
[root@pg07 DBD-Oracle-1.76-sU5yu5]# make && make install

1.5 创建ora2pg配置文件

首先从示例文件复制一份,然后根据实际情况更改配置文件相关参数:

[root@pg07 ~]# cp /etc/ora2pg/ora2pg.conf.dist /etc/ora2pg/ora2pg.conf
[root@pg07 ~]#  vi /etc/ora2pg/ora2pg.conf
--Oracle连接参数
ORACLE_HOME     /usr/lib/oracle/12.2/client64
ORACLE_DSN      dbi:Oracle:host=172.16.100.19;sid=kkdb;port=1521
ORACLE_USER     system --如果这里的用户是sys、system,则user_grants选项必须设置为1
ORACLE_PWD      abcABC12
USER_GRANTS     1
ORA_INITIAL_COMMAND commit
--schema参数
EXPORT_SCHEMA   1
SCHEMA  XXKIN
CREATE_SCHEMA   0
COMPILE_SCHEMA  0
PG_SCHEMA   public
--导出对象(根据实际情况选择)
TYPE    TABLE COPY  VIEW TYPE 
DISABLE_COMMENT         0
EXTERNAL_TO_FDW         1
TRUNCATE_TABLE  0
USE_TABLESPACE          0
REORDERING_COLUMNS      0
--约束参数
KEEP_PKEY_NAMES         0
PKEY_IN_CREATE          0
FKEY_ADD_UPDATE         never
FKEY_DEFERRABLE 0
DEFER_FKEY      0
DROP_FKEY       1
--触发器参数
DISABLE_SEQUENCE        1
DISABLE_TRIGGERS 1
--对象修改参数
PRESERVE_CASE   0
INDEXES_RENAMING        0
USE_INDEX_OPCLASS       0
PREFIX_PARTITION        0
DISABLE_PARTITION       1
WITH_OID                0
ORA_RESERVED_WORDS      audit,comment
USE_RESERVED_WORDS      1
DISABLE_UNLOGGED        0
--PostgreSQL参数
PG_DSN          dbi:Pg:dbname=kkdb;host=192.168.120.149;port=5432
PG_USER         xxkin
PG_PWD          redhat
OUTPUT          xxkin.sql
OUTPUT_DIR     /tmp
BZIP2
FILE_PER_CONSTRAINT     0
FILE_PER_INDEX          0
FILE_PER_FKEYS          0
FILE_PER_TABLE  0
FILE_PER_FUNCTION       0
STOP_ON_ERROR           1
COPY_FREEZE             0
CREATE_OR_REPLACE       1
--TYPE参数
PG_NUMERIC_TYPE 1
PG_INTEGER_TYPE 1
DEFAULT_NUMERIC bigint
ENABLE_MICROSECOND      1
TO_NUMBER_CONVERSION    numeric
GEN_USER_PWD    0
FORCE_OWNER     0
FORCE_SECURITY_INVOKER  0
--数据参数
DATA_LIMIT      10000
NOESCAPE        0
TRANSACTION     serializable
STANDARD_CONFORMING_STRINGS     1
NO_LOB_LOCATOR  1
XML_PRETTY      0
LOG_ON_ERROR            0
TRIM_TYPE               BOTH
INTERNAL_DATE_MAX       49
FUNCTION_CHECK          1
--Export/Import性能参数
JOBS            1
ORACLE_COPIES   1
PARALLEL_TABLES 1
DEFAULT_PARALLELISM_DEGREE      0
PARALLEL_MIN_ROWS               100000
DROP_INDEXES    0
SYNCHRONOUS_COMMIT      0
--PLSQL参数
EXPORT_INVALID  0
PLSQL_PGSQL     1
NULL_EQUAL_EMPTY        0
EMPTY_LOB_NULL          0
PACKAGE_AS_SCHEMA       1
REWRITE_OUTER_JOIN      1
FUNCTION_STABLE         1
COMMENT_COMMIT_ROLLBACK 0
COMMENT_SAVEPOINT       0
USE_ORAFCE      0
AUTONOMOUS_TRANSACTION  1
--ASSESSMENT参数
ESTIMATE_COST           0
COST_UNIT_VALUE         5
DUMP_AS_HTML            0
TOP_MAX                 10
HUMAN_DAYS_LIMIT        5
--PostgreSQL特性参数
PG_SUPPORTS_WHEN        1
PG_SUPPORTS_INSTEADOF   1
PG_SUPPORTS_MVIEW       1
PG_SUPPORTS_CHECKOPTION 1
PG_SUPPORTS_IFEXISTS    1
PG_SUPPORTS_LATERAL     1
PG_SUPPORTS_PARTITION   1
BITMAP_AS_GIN           1
PG_BACKGROUND           0
PG_SUPPORTS_SUBSTR      1
PG_SUPPORTS_NAMED_OPERATOR      1
PG_SUPPORTS_IDENTITY    1
PG_SUPPORTS_PROCEDURE   0
--SPATIAL参数
AUTODETECT_SPATIAL_TYPE 1
CONVERT_SRID            1
DEFAULT_SRID            4326
GEOMETRY_EXTRACT_TYPE   INTERNAL
--FDW参数
FDW_SERVER      orcl
--MySQL参数
MYSQL_PIPES_AS_CONCAT           0
MYSQL_INTERNAL_EXTRACT_FORMAT   0

到此,整个ora2pg的安装配置已完成。

二、使用ora2pg

2.1 导出全部表结构

如果在配置文件里指定的type包含了COPY,导完表结构后,表的数据也会随之导出,加-t参数即可只导出表结构不导出数据。

[root@pg07 ~]# ora2pg -t table view
[========================>] 777/777 tables (100.0%) end of scanning.                 
[========================>] 777/777 tables (100.0%) end of table export.                  
[========================>] 0/0 views (100.0%) end of output. 

导出完成后,在PostgreSQL中创建数据库以及对应的表。

-bash-4.2$ psql
psql (10.6)
Type "help" for help.

postgres=# CREATE USER xxkin WITH password 'redhat' CREATEDB SUPERUSER replication bypa***ls createrole login;
postgres=# create database kkdb;
postgres=# alter database kkdb owner to xxkin;
postgres=# \c kkdb
You are now connected to database "kkdb" as user "postgres".
kkdb=# \i /tmp/output.sql

ora2pg有很多参数可供使用,具体请参考其帮助文件。

2.2 通过ora2pg迁移数据

之前已创建好数据库以及相关表结构,现在只需通过ora2pg将数据同步到PostgreSQL数据库上即可。

[root@pg07 ~]# ora2pg -d -t copy
[2018-11-30 11:38:51] Ora2Pg version: 19.1
[2018-11-30 11:38:51] Trying to connect to database: dbi:Oracle:host=172.16.100.19;sid=kkdb;port=1521
[2018-11-30 11:38:51] Isolation level: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
[2018-11-30 11:38:51] DEBUG: executing initial command to Oracle: commit
[2018-11-30 11:38:51] Retrieving table information...
[2018-11-30 11:40:55] [1] Scanning table ABC_DEL_CLASS (1 rows)...
[2018-11-30 11:40:55] [2] Scanning table ACTIVITY_DATA (41 rows)...
[2018-11-30 11:40:55] [3] Scanning table ACTIVITY_GBEAN_STAT (243897 rows)...
......

如果在迁移过程中,需要排除某些表,加-e参数,如下:

[root@pg07 ~]# ora2pg -d -t copy -e usr_dx_tbs,hr_info_pg,op_log

总结:

以下是在使用过程遇到的问题,提出的建议:
1、先导出表结构,然后在同步数据;
2、在导出表结构的时候禁用分区表;
3、注意PostgreSQL的保留的关键字是否为oracle表字段名;
4、删除所有外键约束。
5、直接通过ora2pg迁移数据,不要将oracle表数据导出为csv格式,然后再导入PostgreSQL数据库。
参考文献:ora2pg DOCUMENTATION

Ora2Pg简介和安装 ora2pg的简介和安装内容简介ora2pg是什么安装所需的准备安装步骤 内容简介 本文将介绍一款从oracle数据库迁移数据至postgres、greenplum数据库的工具的简介和安装。 ora2pg是什么 Ora2Pg是一个免费工具,用于将Oracle或MySQL数据库数据迁移到PostgreSQL。它连接Oracle数据库,自动扫描并提取其结构或数据,然后生成可以加载到PostgreSQ... 阅读详情

相关推荐

使用ora2pg 迁移oracle12.2到postgresql14.6

导入数据的sql默认是最后提交commit,如果前面的事务INSERT失败,后面的都会失败,所以可以在每个insert事务后面添加commit,这样保证每个事务的提交是独立的,即使报错也不影响其他事务数据的提交。默认情况下,Ora2Pg会查找/etc/ora2pg/ora2pg.conf配置文件,如果文件存在,只需执行:/usr/local/bin/ora2pg,也可以通过-c选项指定配置文件路径,如:ora2pg -c ~/ora2pg/config/ora2pg.conf。

king_harry的专栏 2172

ora2pg使用

本文介绍ora2pg迁移到pg12的用法。

w345731923的专栏 1820

Vue 实现华视身份证读卡器功能

在www.downcc.com下载“华视cvr100驱动”安装程序; 华视电子官网有相应的文档说明和程序下载 一、服务安装 选择安装目录: 启动读卡服务: 安装成功会有如图所示: 注意事项: 安装开发包必须使用管理员权限,因为windows服务和读卡器设备驱动程序均需要管理员权限,否则会安装失败。 win10需要修改组策略才有管理员权限。 二、服务的使用 打开浏览器,输入地址http://127.0.0.1:19196/mainpage,回车 点击openDevice: 点.

zyqgt960812的博客 6454

Ora2pg 把oracle数据导入到postgres

如果已经安装了oracle的,直接用root设定Oracle_Home。创建迁移模板需要 --project_base and --init_project 这两个参数。oracle官网下载basic、devel、sqlplus三个rpm包。提取oracle用户自定义的格式。OUTPUT output.sql #导出的文件名。OUTPUT data.sql #导出的数据文件名。提取所有包括索引、主键、唯一键、外键和检查约束的表。提取在所有对象中转换为pg组、用户和权限的用户。

jnrjian的博客 2519

ora2mysql_数据挪移ora2pg使用指南

一、安装ora2pg1.1 安装OS依赖软件包[root@pg07 ~]# yum install perl-DBD-Pg perl perl-devel perl-DBI perl-CPAN bzip2 perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker1.2 安装Oracle瘦客户端从Oracle官方网站下载oracle 12c的瘦客户端,然后进行安...

weixin_39689622的博客 826

数据架构师指南 pdf_数据挪移ora2pg使用指南

数据挪移ora2pg使用指南作者 Iris (PG深度爱好者)一、 安装ora2pg1.1下载安装包[root@oracleora2gp]#-rwxrwxr-x1 oracle oinstall 448855 Jun9 12:18 DBD-Oracle-1.74.tar.gz-rwxrwxr-x1 oracle oinstall 276607 Jun9 1...

weixin_39982236的博客 504

使用Ora2Pg迁移Oracle数据到openGauss

设置与 Oracle 数据库的连接后,可以执行脚本export_schema.sh 该脚本将从 Oracle 数据库导出所有对象类型,并将 DDL 文件输出到架构的子目录中。这将把Ora2Pg.pm安装到站点Perl存储库中,Ora2Pg安装到/usr/local/bin/中,Ora2Pg.conf安装到/etc/Ora2Pg/中。或者只需从 Oracle 下载中心下载相应的 ZIP 存档并将它们安装在您想要的位置,例如:/opt/oracle/instantclient_12_2/该选项支持多次设置。

yzq280736579的博客 770

ora2pg使用教程

简 介公众号 BigDataTechnology 后台回复: ora2pg 赠送ora2pg参数解释中文版以及安装集成包。 在现在开源工具中、去O化最好的工具就是ora2pg了,在当下的去O环境中,使用面也是比较广泛。 其功能性也很全面。支持oracle多种object的迁移如:TABLE with constraints...

Java_fenxiang的博客 1260

Ora2Pg工具迁移Oracle到openGauss

本文详细阐述了Ora2Pg工具迁移Oracle到openGauss的全过程。

IT邦德 3227

Ora2pg安装与使用

目录安装oracle客户端安装依赖在root下配置环境变量安装 DBD-Oracleora2pg安装检查是否安装成功配置配置文件oracle导表gp创建测试表导出ORACLE表结构和数据将导出的表结构和数据导入GP参考文章 安装oracle客户端 在gp数据库的master节点安装oracle客户端,安装过程如下。 linux(CentOS7.6)安装ORACLE客户端 安装依赖 [root@mdw admin]# yum install perl-DBI perl-DBD-Pg perl-ExtUti

qq_33445829的博客 2156

ora2pg安装和使用

文章目录官方文档特性安装(ubuntu18.04/Redhat7.5)安装说明依赖安装安装Ora2pgOracle迁移导出SQL文件修正SQL文件附录:类型转换记录MySQL迁移修改配置文件导出SQL文件修正SQL文件附录amend_mysql2pg_sql.py官方文档学习笔记帮助文档CONF文件连接配置相关兼容类参数导出类型导出文件配置其他一些有用的参数数据类型转换相关 官方文档 http://ora2pg.darold.net/ http://ora2pg.darold.net/documentati

失语者的专栏 6298

去O--ora2pg使用

去O--ora2pg使用关于ora2pgOr2pg特性Ora2pg支持的导出对象ora2pg安装oracle客户端安装DBI安装DBD-Oracle客户端安装DBD-PG客户端安装安装Ora2pg客户端Ora2pg命令执行参数说明Ora2pg使用案例表结构转换编写模型转换配置ora2pg.conf_all执行模型转化命令数据导入编写Ora2pg数据迁移配置文件ora2pg.conf_data执行数据迁移命令 关于ora2pg Ora2Pg是一个免费工具,用于将Oracle或MySQL数据库迁移到Postgr

darking的博客 2333

postgresql|数据库|数据迁移神器ora2pg的安装部署和初步使用

有的时候有需求需要迁移Oracle数据库数据到postgresql,那么,其实可供选择的工具是比较多的,但从迁移效率,准确度这些角度来选择的话,无疑还是GitHub上的开源免费工具ora2pg比较合适的。 ora2pg的优点是免费,迁移速度快,迁移数据准确,部署简单,快速 下面将介绍如何在A服务器 centos7下面部署安装ora2pg,在另一台服务器B上通过docker安装部署一个Oracle,并简单的写一些数据

zsk_john的技术分享专用博客 6283

ora2pg 导出Oracle数据

当要将 Oracle 中的数据迁移到 PG中时,我们选择 ora2pg,经过实测,ora2pg导出和转换Oracle的数据,效果是很好的,如果配置适当,速度很快,也没有错误。 但是,我们不用ora2pg导出Oracle的表定义,或者其它对象的定义,因为不太好控制。 用ora2pg导出Oracle表数据时,每个表的数据导出为一个文件。 安装: ora2pg是用perl编写的开源软件,我们使用编译安装的方式(难以制作可移植的perl+ora2pg二进制安装包),以root用户编译安装。 sudo ..

howard_shooter的博客 2506

ora2pg迁移Oracle数据库到PG数据库

1、解压ora2pg安装包,在org2pg根目录下运行cmd命令框,运行命令。安装有报错但是安装成功了,安装完成后配置文件。ora2pg是一个开源的数据迁移工具。2.安装DBD:ORACLE。同时还会用到perl命令。等待一段时间安装成功后。

ZHOUxinze11的博客 563

推荐项目:Oracle到PostgreSQL的数据迁移利器 - ora2pg

是一个强的开源工具,专为那些希望从Oracle数据库迁移到PostgreSQL数据库的开发者和系统管理员设计。这个项目由Darold先生维护,它的目标是简化并自动化数据迁移过程,让你能轻松应对型复杂数据库的转换。 ## 项目简介 ora2pg 提供了一个全面的方法,用于将Oracle数据结构、表、视图、索引、存储过程等所有元素转移到PostgreSQL。它通过生成SQL脚本或者直接与Pos...

gitblog_00001的博客 836

Anomalib库安装以及使用

Anomalib是一个专注于异常检测的深度学习库。它的目标是收集最新的异常检测算法,并提供用于在公共和私有数据集上进行基准测试的工具。该库提供了一系列已实现的异常检测算法,这些算法在最近的文献中有所描述。此外,Anomalib还提供了一套工具,方便开发人员开发和实现自定义模型。该库特别注重基于图像的异常检测,旨在识别数据集中的异常图像或图像中的异常像素区域。通过使用Anomalib,用户可以快速构建和评估各种异常检测算法,以满足其特定需求。

mingo_敏 5115

AndroidFileTransferForMac

Android File Transfer for mac是一款帮助用户在Mac上读取安卓手机上的文件的mac软件,能够通过 USB 将 Android 设备连接到 Mac 电脑上并读取里面的文件

上一篇: DEVIntersection 大会即将开幕,精彩内容先睹为快!
下一篇: 对象及变量的并发访问(同步方法、同步代码块、对class进行加锁、线程死锁)&内部类的基本用法...
weixin_34220834
博客等级 码龄10年 5643粉丝 143原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值