Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Ora2pg 把oracle数据导入到postgres

Ora2pg 把oracle数据导入到postgres

原创
作者头像
小徐
修改于 2019-11-20 09:31:15
修改于 2019-11-20 09:31:15
4.2K00
代码可运行
举报
文章被收录于专栏:GreenplumGreenplum
运行总次数:0
代码可运行

Ora2pg 使用总结

1 Ora2pg特性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、导出整个数据库模式(表、视图、序列、索引),以及唯一性,主键、外键和检查约束。
2、导出用户和组的授权/权限。
3、导出筛选的表(通过制定表明)。
4、导出Oracle模式到一个PostgreSQL(7.3以后)模式中。
5、导出预定义函数、触发器、程序、包和包体。
6、导出范围和列表分区。
7、导出所有的数据或跟随一个WHERE子句。
8、充分支持Oracle BLOB对象作为PGBYTEA9、导出Oracle视图作为PG表。
10、导出定义的Oracle用户格式。
11、提供关于转换PLSQL码为PLPGSQL的基本帮助(仍然需要手工完成)。
12、可在任何平台上工作。
13、Ora2Pg尽力将Oracle数据库转换到PostgreSQL中,但是仍需一部分的手动工作。Oracle特定的PL/SQL代码生成函数、过程 和触发器时必须进行审查,以便匹配PostgreSQL的语法

2 Ora2pg支持的导出对象

这是允许导出的不同的格式,默认是TABLE:

table

提取所有包括索引、主键、唯一键、外键和检查约束的表。

view

提取视图。

grant

提取在所有对象中转换为pg组、用户和权限的用户。

sequence

提取所有的序列以及上一个位置。

tablespace

提取表空间。

trigger

提取通过动作触发的被指定的触发器。

function

提取函数。

proceduers

提取存储过程。

package

提取包和包主体。

data

提取数据,生成insert语句。

copy

提取数据,生成copy语句。

partition

提取范围和列表分区。

type

提取oracle用户自定义的格式。(以下两条是10.0新加的)

fdw

提取外部数据封装表

partition

提取作为快照刷新视图所建立的视图

3 Ora2pg数据类型转换对照

oracle类型

postgresql类型

date

timestamp

long

text

long raw

bytea

clob

text

nclob

text

blob

bytea

bfile

bytea

raw

bytea

rowid

oid

float

double precision

dec

decimal

decimal

decimal

double precision

double precision

int

integer

integer

integer

real

real

smallint

smallint

binary_float

double precision

binary_double

double precision

tinestamp

timestamp

xmltype

xml

binary_integer

integer

pls_integer

integer

timestamp with time zone

timestamp with time zone

timestamp with local time zone

timestamp with time zone

4 Ora2pg 安装

4.1 安装需要的驱动包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y perf cpan

4.2 下载并安装Oracle 客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
oracle 客户端下载地址(下载basic/sqlplus/devel/jdbc后缀为rpm文件即可)
https://www.oracle.com/database/technologies/instant-client/downloads.html
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

安装下载的软件包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scp -r rpm -ivh oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm 
scp -r rpm -ivh oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm 
scp -r rpm -ivh oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm

测试客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlplus64  username/password@ip:port/sid或service_name

4.3 安装 DBI

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cpan  install -y  DBI

4.4 安装 DBD-Oracle客户端

4.4.1 在当前用户配置一下环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export ORACLE_HOME=/usr/lib/oracle/19.3/client64 
export PATH=$ORACLE_HOME/bin:$PATH 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
19.3 是安装的oracle客户端的版本号

4.4.2 安装DBD-Oracle

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget http://search.cpan.org/CPAN/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.74.tar.gz 
tar -zxvf DBD-Oracle-1.74.tar.gz 
cd DBD-Oracle-1.74 
perl Makefile.PL -l 
make && make test 
make install

4.5 安装 Ora2pg 客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://github.com/darold/ora2pg/archive/v18.2.tar.gz 
tar -zxvf v18.2.tar.gz 
cd ora2pg-18.2/ 
perl Makefile.PL 
make && make install

4.6 ora2pg 参数说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ora2pg --help
Usage: ora2pg [-dhpqv --estimate_cost --dump_as_html] [--option value]
-a | --allow str : 指定允许导出的对象列表,使用逗号分隔。也可以与 SHOW_COLUMN 选项一起使用。
-b | --basedir dir: 设置默认的导出目录,用于存储导出结果。
-c | --conf file : 设置非默认的配置文件,默认配置文件为 /etc/ora2pg/ora2pg.conf。
-d | --debug : 使用调试模式,输出更多详细信息。
-D | --data_type STR : 通过命令行设置数据类型转换。
-e | --exclude str: 指定导出时排除的对象列表,使用逗号分隔。也可以与 SHOW_COLUMN 选项一起使用。
-h | --help : 显示帮助信息。
-g | --grant_object type : 导出指定类型的对象上的授权信息,取值参见 GRANT_OBJECT 配置项。
-i | --input file : 指定要导入的 Oracle PL/SQL 代码文件,导入文件时不需要连接到 Oracle 数据库。
-j | --jobs num : 设置用于发送数据到 PostgreSQL 的并发进程数量。
-J | --copies num : 设置用于从 Oracle 导出数据的并发连接数量。
-l | --log file : 设置日志文件,默认为 stdout。
-L | --limit num : 导出数据时,每次写入磁盘之前在内存中缓冲的记录数量,默认值为 10000-m | --mysql : 导出 MySQL 数据库。
-n | --namespace schema : 设置需要导出的 Oracle 模式。
-N | --pg_schema schema : 设置 PostgreSQL 中的搜索路径 search_path。
-o | --out file : 设置导出的 SQL 文件的存储路径。默认值为当前目录下的 output.sql 文件。
-p | --plsql : 启用 PLSQL 代码到 PLPGSQL 代码的转换。
-P | --parallel num: 同时导出多个表,设置并发数量。
-q | --quiet : 不显示进度条。
-s | --source DSN : 设置 Oracle DBI 数据源。
-t | --type export: 设置导出类型。该参数将会覆盖配置文件中的导出类型(TYPE)。
-T | --temp_dir DIR: 为多个同时运行的 ora2pg 脚本指定不同的临时存储目录。
-u | --user name : 设置连接 Oracle 数据库连接的用户名。也可以使用 ORA2PG_USER 环境变量。
-v | --version : 显示 Ora2Pg 版本信息并退出。
-w | --password pwd : 设置连接 Oracle 数据库的用户密码。也可以使用 ORA2PG_PASSWD 环境变量。
--forceowner : 导入数据时,强制 ora2pg 将导入 PostgreSQL 的表和序列的拥有者设置为连接 Oracle 数据库时的用户。如果设置为指定的用户名,所有导入的对象属于该用户。默认情况下,对象的拥有者为连接 Pg 数据库的用户。
--nls_lang code: 设置 Oracle 客户端的 NLS_LANG 编码。
--client_encoding code: 设置 PostgreSQL 客户端编码。
--view_as_table str: 将视图导出为表,多个视图使用逗号分隔。
--estimate_cost :SHOW_REPORT 结果中输出迁移成本评估信息。
--cost_unit_value minutes: 成本评估单位,使用分钟数表示。默认值为 5 分钟,表示一个 PostgreSQL 专家迁移所需的时间。如果是第一次迁移,可以设置为 10 分钟。
 --dump_as_html : 生成 HTML 格式的迁移报告,只能与 SHOW_REPORT 选项一起使用。默认的报告是一个简单的文本文件。
 --dump_as_csv : 与上个参数相同,但是生成 CSV 格式的报告。
 --dump_as_sheet : 生成迁移评估时,为每个数据库生成一行 CSV 记录。
 --init_project NAME: 创建一个ora2pg 项目目录结构。项目的顶级目录位于根目录之下。
 --project_base DIR : 定义ora2pg 项目的根目录,默认为当前目录。
 --print_header :--dump_as_sheet 一起使用,输出 CSV 标题信息。
 --human_days_limit num : 设置迁移评估级别从 B 升到 C 所需的人工日数量。默认值为 5 人工日。
 --audit_user LIST : 设置查询 DBA_AUDIT_TRAIL 表时需要过滤的用户名,多个用户使用逗号分隔。该参数只能用于 SHOW_REPORTQUERY 导出类型。
 --pg_dsn DSN : 设置在线导入时的 PostgreSQL 数据源。
 --pg_user name : 设置连接 PostgreSQL 的用户名。
 --pg_pwd password : 设置连接 PostgreSQL 的用户密码。
 --count_rows :TEST 方式下执行真实的数据行数统计。
 --no_header : 在导出文件中不添加 Ora2Pg 头部信息。
 --oracle_speed : 用于测试 Oracle 发送数据的速度。不会真的处理或者写入数据。
 --ora2pg_speed : 用于测试 Ora2Pg 发送转换后的数据的速度。不会写入任何数据。

5 Ora2pg 使用案例

5.1 ora2pg 数据导入到pg案例

5.1.1 编写配置案例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# vim  ora2pg.conf 
# oracle client 安装地址
ORACLE_HOME /usr/lib/oracle/19.3/client64
# oracle connent info
ORACLE_DSN dbi:Oracle:host=ipaddress;sid=orcl;port=1521
ORACLE_USER username
ORACLE_PWD  password
# oracle schema
SCHEMA schemaname
# oracle type
TYPE TABLE COPY DATA 
# 输出的文件名字
OUTPUT output.sql
# 输出的路径(本地路径)
OUTPUT_DIR ./
Ipaddress : 链接oracle的IP地址
username : 链接oracle的用户名
password : 链接oracle的密码
schemaname : 链接oracle的schema信息

5.1.2 使用ora2pg 把数据下载到本地

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# time ora2pg -c ora2pg.conf -a tablename
[========================>] 1/1 tables (100.0%) end of scanning. 
[> ] 0/1 tables (0.0%) end of scanning. 
[> ] 0/1 tables (0.0%) end of scanning. 
[========================>] 1/1 tables (100.0%) end of table export. 
[========================>] 541243/537749 rows (100.6%) Table tablename  (7959 recs/sec)
[========================>] 541243/537749 total rows (100.6%) - (68 sec., avg: 7959 recs/sec). 
[========================>] 537749/537749 rows (100.0%) on total estimated data (68 sec., avg: 7908 recs/sec)
[========================>] 541243/537749 rows (100.6%) Table tablename (8591 recs/sec) 
[========================>] 1082486/537749 total rows (201.3%) - (63 sec., avg: 17182 recs/sec). 
[========================>] 537749/537749 rows (100.0%) on total estimated data (63 sec., avg: 8535 recs/sec)
real 2m26.185s
user 2m9.606s
sys 0m1.153s
tablename:单表的名字

5.1.3 查看文件的大小与行数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# du -sh output.sql 
79M output.sql
# wc -l output.sql 
542914 output.sql

5.1.4 把数据导入到postgres中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# time psql -U postgres -d databasename -h 192.168.***.** -p 5432 -f output.sql
SET
SET
CREATE TABLE
CREATE INDEX
ALTER TABLE
SET
SET
BEGIN
ALTER SEQUENCE
ALTER SEQUENCE
COMMIT
real 0m10.196s
user 0m0.215s
sys 0m0.202s
databasename : 数据库的名字

5.1.5 校验pg中数据的准确性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(*) from "public".tablename;
-- 541243
tablename : 表的名字

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ora2pg 把oracle数据导入到postgres
1 Ora2pg特性 1、导出整个数据库模式(表、视图、序列、索引),以及唯一性,主键、外键和检查约束。 2、导出用户和组的授权/权限。 3、导出筛选的表(通过制定表明)。 4、导出Oracle模式到一个PostgreSQL(7.3以后)模式中。 5、导出预定义函数、触发器、程序、包和包体。 6、导出范围和列表分区。 7、导出所有的数据或跟随一个WHERE子句。 8、充分支持Oracle BLOB对象作为PG的BYTEA。 9、导出Oracle视图作为PG表。 10、导出定义的Oracle用户格式。 11
小徐
2019/11/28
3.8K0
Oracle迁移到Greenplum的方案
Oracle数据库是一种关系型数据库管理系统,在数据库领域一直处于领先的地位,适合于大型项目的开发;银行、电信、电商、金融等各领域都大量使用Oracle数据库。
星哥玩云
2022/08/17
1.4K0
Oracle迁移到Greenplum的方案
[译]PG备份恢复工具-pg_dumpbinary
postgresql weekly推荐了几款备份恢复工具,其中一个是pg_dumpbinary。
yzsDBA
2022/03/29
1.2K0
在Oracle中通过dblink访问PG数据库
在PG中访问PG可以通过dblink,在PG中访问Oracle可以通过oracle_fdw,访问MySQL可以通过mysql_fdw,具体过程可以参考:https://www.xmmup.com/pgzhongdefile_fdwpostgres_fdwhedblink.html
AiDBA宝典
2022/11/07
3.9K0
Oracle转换Postgres
首先需要对Oracle和PostgreSQL的SQL都比较熟悉。对其理解的越详细就越具有优势,本文帮助读者迅速理解这两类SQL的区别是什么。
yzsDBA
2020/01/19
5.8K0
Oracle转换Postgres
Greenplum迁移指南
数据迁移的目的是为了给数据找一个更合适的归宿,让其满足当前及未来某段时间内业务场景的使用需求,使数据更安全,更可靠,更有效的为客户服务。
小徐
2021/01/27
1.9K0
Greenplum迁移指南
使用Bucardo搭建PG的双主
https://www.xmmup.com/shiyongogg-for-pgweifuwukuaisushuangxiangtongburdsshujukushuangzhu.html
AiDBA宝典
2023/04/26
2K0
使用Bucardo搭建PG的双主
【TBase开源版测评】轻松愉快去O选项:TBase
部门的项目原先基于Oracle进行存储、DM层OLAP计算、后端接口访问,而Oracle只是单机+从库的部署方式,经过一段时间的使用,存储与性能都有捉襟见肘之处,另外也想节省成本,决定响应去O的大潮。
gregorywang
2020/09/01
1.8K1
Oracle 21c通过dg4odbc配置dblink连接到PostgreSQL
在PG中访问PG可以通过dblink,在PG中访问Oracle可以通过oracle_fdw,访问MySQL可以通过mysql_fdw,具体过程可以参考:https://www.xmmup.com/pgzhongdefile_fdwpostgres_fdwhedblink.html
AiDBA宝典
2022/11/07
1.7K0
Centos下安装工单系统OTRS3.3.5
我们先来说下OTRS的简介:OTRS的名字是由Open-source Ticket Request System首字母缩略字而来,是一个开源的缺陷跟踪管理系统软件。OTRS将电话,邮件等各种渠道提交进来的服务请求归类为不同的队列,服务级别,服务人员通过OTRS系统来跟踪和回复客户,相对传统的处理流程来而言,OTRS提供了一个部门或团队的协调环境,以更有效率的方式处理,查询和跟踪。
DevinGeng
2019/04/09
2.3K0
Centos下安装工单系统OTRS3.3.5
PG中的blob cleanup
PG提供了一个很好的BLOB接口,得到了广泛应用。然而最近我们遇到了各种客户遇到的问题,有必要对PG如何处理blob进行一次思考,尤其是BLOB清理。
yzsDBA
2021/01/05
1.5K0
KunlunBase指导手册(三)之数据导入&同步
从原生PostgreSQL数据库迁移业务数据到KunlunBase集群。由于KunlunBase兼容postgreSQL协议,因此可以直接支持Pg数据导入导出工具:pg_dump和pg_restore。
用户6256742
2024/06/26
1610
KunlunBase指导手册(三)之数据导入&同步
Greenplum使用oralce_fdw连接oracle
https://github.com/adam8157/oracle_fdw_greenplum
小徐
2020/06/21
1.3K0
Greenplum使用oralce_fdw连接oracle
【DB宝83】使用OGG for PG微服务快速双向同步RDS数据库(双主)
OGG有传统的经典架构,也有最新的微服务,2个都可以远程捕获和应用数据,对数据库服务器是0侵入,而传统的经典架构是纯命令行模式,最新的微服务架构是图形化界面操作,几乎所有操作都可以在界面进行。相关文章可以参考:
AiDBA宝典
2021/12/31
1.9K0
【DB宝83】使用OGG for PG微服务快速双向同步RDS数据库(双主)
Greenplum数据库使用总结(干货满满)--高级使用
stagging=# select gp_segment_id,count(1) from tablename group by 1;
小徐
2019/08/05
3.8K0
原创哈希数据导出算法 原
#Oracle客户端配置 ORACLE_HOME=/export/home/tmn/oracle/product/11.2.0/dbhome NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" export ORACLE_HOME NLS_LANG PATH=$PATH:$ORACLE_HOME/bin export PATH LD_LIBRARY_PATH=/usr/lib64:/export/home/tmn/oracle/product/11.2.0/dbhom
用户2836074
2018/08/15
1.2K0
mysql 数据库连接_java连接oracle数据库
Oracle数据网关,就像一个桥梁,贯通oracle数据库和non-oracle数据库。在配置过程中,我们经常讲到的三个重要文件:第一、tnsnames.ora;第二、lisener.ora;第三、init.ora。他们是如何工作呢?
全栈程序员站长
2022/10/05
95K0
exp执行过程出现ORA-01455的解决(存疑)
可以看到,导出成功了,但是中间过程,提示了ORA-01455错误,如果用expdp,不会出现错误,
bisal
2021/09/06
1.9K0
exp执行过程出现ORA-01455的解决(存疑)
Oracle到PostgreSQL数据库的语法迁移手册(建议收藏)
异构数据库的迁移(譬如从Oracle迁移到PostgreSQL)工作主要包括三个方面,
PawSQL
2024/08/20
2430
Oracle到PostgreSQL数据库的语法迁移手册(建议收藏)
PostgreSQL 数据加密怎么弄,应该用哪种方案
数据库加密这个话题在很多大型企业的数据库安全规范中是有严格的要求的,这里数据库加密可以分为2个部分,实际上3个部分,这里由于其中一个部分在很多情况下并不实用,所以我们这边就不讨论了。
AustinDatabases
2024/03/21
9400
PostgreSQL 数据加密怎么弄,应该用哪种方案
推荐阅读
相关推荐
Ora2pg 把oracle数据导入到postgres
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验