Ora2pg 把oracle数据导入到postgres

去O--ora2pg使用

原文链接:https://blog.csdn.net/darking123456789/article/details/116749418

project建立

https://blog.csdn.net/shi229592533/article/details/102679887

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、提供关于转换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 安装需要的驱动包

yum install -y perf cpan

复制

4.2 下载并安装Oracle 客户端

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

jdbc .rpm 可以不要,三个就可以了。 如果已经安装了oracle的,直接用root设定Oracle_Home

export ORACLE_HOME=/u01/app/oracle/product/19.2.0/db_1

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

安装下载的软件包

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

复制

测试客户端

sqlplus64  username/password@ip:port/sid或service_name

复制

4.3 安装 DBI

cpan  install -y  DBI

需要网络环境,也可以将DBI包下载下来安装

4.4 安装 DBD-Oracle客户端

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

exportORACLE_HOME=/usr/lib/oracle/19.3/client64 
exportPATH=$ORACLE_HOME/bin:$PATHexportLD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH19.3 是安装的oracle客户端的版本号

复制

4.4.2 安装DBD-Oracle

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 客户端

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 参数说明

# 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_REPORT 和 QUERY 导出类型。
 --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 编写配置案例

# 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 ---copy data 重复了
# 输出的文件名字
OUTPUT output.sql
# 输出的路径(本地路径)OUTPUT_DIR./
#Ipaddress : 链接oracle的IP地址
#username: 链接oracle的用户名
#password: 链接oracle的密码
#schemaname: 链接oracle的schema信息    

# oracle client 安装地址

ORACLE_HOME /u01/app/oracle/product/19.2.0/db_1

# oracle connent info

ORACLE_DSN dbi:Oracle:host=xx ;sid=xx;port=1521

ORACLE_USER ora2pg

ORACLE_PWD ora2pg

# oracle schema

SCHEMA xx

# oracle type

TYPE TABLE COPY DATA ---copy data 重复了

# 输出的文件名字

OUTPUT output.sql

# 输出的路径(本地路径)

OUTPUT_DIR ./

完成之后,只需要设置导出的类型:TABLE(包括约束)、VIEW、MVIEW、TABLESPACE、SEQUENCE、INDEXES、TRIGGER、GRANT、FUNCTION、PROCEDURE、PACKAGE、PARTITION、TYPE、---INSERT COPY、FDW、QUERY、KETTLE 以及 SYNONYM。

默认情况下,Ora2Pg 导出一个文件,可以通过 psql 客户端将文件加载到 PostgreSQL 数据库;但是也可以在配置文件中设置一个数据库的 DSN,直接导入 PostgreSQL 数据库。通过 ora2pg.conf 中的配置选项,可以控制导出的内容和方式。

ORACLE_HOME /u01/app/oracle/product/11.2.0/dbhome_1

ORACLE_DSN dbi:Oracle:host=x.x.x.x;sid=PROD;port=xxx

ORACLE_USER xxxxxxx

ORACLE_PWD xxxx

LOGFILE /tmp/test.log

USER_GRANTS 0

SCHEMA xxxx

EXPORT_SCHEMA 0

#TYPE TABLE

PARALLEL_TABLES 4 ---开启这个后每个表单独一个sql文件

JOBS 4

PG_NUMERIC_TYPE 0

PG_INTEGER_TYPE 1

DEFAULT_NUMERIC float

SKIP fkeys pkeys ukeys indexes checks

NLS_LANG AMERICAN_AMERICA.UTF8

OUTPUT output.sql

LIMIT 100000

PG_DSN dbi:Pg:dbname=xxxx;host=x.x.x.x;port=xxx

PG_USER xxx

PG_PWD xxxxxx

PG_SCHEMA xxx

LOG_ON_ERROR 0

BLOB_LIMIT 100

TRUNCATE_TABLE 1

DISABLE_SEQUENCE 1

PG_VERSION 12

EMPTY_LOB_NULL

ORA_INITIAL_COMMAND

IMPORT imp_tab_1.conf

CREATE_SCHEMA 1

COMPILE_SCHEMA 0

debug 1

# vi imp_tab_1.conf

allow tablename

4. 执行导入

# nohup ora2pg -t COPY -c /data/ora2pg/huang/ora2pg_tab_1.conf -T /tmp/huang &

上面的type是注释的 -t 指定导数据

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

# time ora2pg -c ora2pg.conf -a tablename
[========================>]1/1tables(100.0%) end of scanning.[>]0/1tables(0.0%) end of scanning.[>]0/1tables(0.0%) end of scanning.[========================>]1/1tables(100.0%) end of table export.[========================>]541243/537749rows(100.6%) Table tablename(7959 recs/sec)[========================>]541243/537749 total rows(100.6%)-(68 sec.,avg:7959 recs/sec).[========================>]537749/537749rows(100.0%) on total estimated data(68 sec.,avg:7908 recs/sec)[========================>]541243/537749rows(100.6%) Table tablename(8591 recs/sec)[========================>]1082486/537749 total rows(201.3%)-(63 sec.,avg:17182 recs/sec).[========================>]537749/537749rows(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 查看文件的大小与行数

# du -sh output.sql 
79M output.sql
# wc -l output.sql 
542914 output.sql

复制

5.1.4 把数据导入到postgres中

# time psql -U postgres -d databasename -h 192.168.***.**-p 5432-f output.sql
SETSETCREATETABLECREATEINDEXALTERTABLESETSETBEGINALTERSEQUENCEALTERSEQUENCECOMMIT
real 0m10.196s
user 0m0.215s
sys 0m0.202s
databasename : 数据库的名字

复制

5.1.5 校验pg中数据的准确性

select count(*)from"public".tablename;--541243tablename: 表的名字

依赖安装

1、安装perl依赖

yum install -y perf cpan perl-Time-HiRes

安装oracle-instantclient安装包

oracle官网下载basic、devel、sqlplus三个rpm包。

http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html

直接下载

http://download.oracle.com/otn/linux/instantclient/122010/oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm

http://download.oracle.com/otn/linux/instantclient/121020/oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm

http://download.oracle.com/otn/linux/instantclient/122010/oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm

安装

rpm -ivh oracle-instantclient*.rpm

rpm -ivh *.rpm

Preparing... ########################################### [100%]

package oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64 is already installed

package oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64 is already installed

package oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64 is already installed

[root@10-0-98-60 ~]# echo "/usr/lib/oracle/12.2/client64/lib" > /etc/ld.so.conf.d/oracle_client.conf

[root@10-0-98-60 ~]# ldconfig

[root@10-0-98-60 ~]#

[root@10-0-98-60 ~]# ldconfig -p|grep oracle

libsqlplusic.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libsqlplusic.so

libsqlplus.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libsqlplus.so

liboramysql12.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/liboramysql12.so

libons.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libons.so

libocijdbc12.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libocijdbc12.so

libociei.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libociei.so

libocci.so.12.1 (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libocci.so.12.1

libocci.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libocci.so

libnnz12.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libnnz12.so

libmql1.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libmql1.so

libipc1.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libipc1.so

libclntshcore.so.12.1 (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libclntshcore.so.12.1

libclntshcore.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libclntshcore.so

libclntsh.so.12.1 (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1

libclntsh.so (libc6,x86-64) => /usr/lib/oracle/12.2/client64/lib/libclntsh.so

测试 sqlplus username/password@ip:port/sid

sqlplus64 scott/iger@10.0.98.60:1521/orcl

3、安装 DBI

cpan install DBI

4、安装 DBD-Oracle

export ORACLE_HOME=/usr/lib/oracle/12.2/client64

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

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

5,DBD:PG安装

下载

http://search.cpan.org/~turnstep/DBD-Pg/

wget http://www.cpan.org/authors/id/T/TU/TURNSTEP/DBD-Pg-3.7.4.tar.gz

tar -zxf DBD-Pg-3.7.4.tar.gz

cd DBD-Pg-3.7.4

perl Makefile.PL

make

make install

history

6、Ora2pg install

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

perl -MCPAN -e shell

cpan> get DBD::mysql

cpan> quit

cd ~/.cpan/build/DBD-mysql*

perl Makefile.PL

make

make install

7、检查

cat check.pl

#!/usr/bin/perl

use strict;

use ExtUtils::Installed;

my $inst=ExtUtils::Installed->new();

my @modules = $inst->modules();

foreach(@modules){

my $ver = $inst->version($_) || "???";

printf("%-12s -- %s\n",$_,$ver);

}

perl check.pl

DBD::Oracle -- 1.74

DBD::Pg -- 3.7.4

DBD::mysql -- 4.046

DBI -- 1.641

Ora2Pg -- 18.2

Perl -- 5.10.1

Test::Simple -- 1.302136

8、配置ora2pg

复制

cp /etc/ora2pg/ora2pg.conf.dist /etc/ora2pg/ora2pg.conf

编辑导出配置文件

cd /etc/ora2pg/

cat ora2pg.conf

ORACLE_HOME /usr/local/oracle/product/11.2.0/db_1

#Set Oracle database connection (data source, user, password)

ORACLE_DSN dbi:Oracle:host=10.0.98.60;sid=orcl

ORACLE_USER scott

ORACLE_PWD tiger

SCHEMA scott

DEBUG 1

ORA_INITIAL_COMMAND

EXPORT_SCHEMA 0

CREATE_SCHEMA 1

COMPILE_SCHEMA 0

TYPE TABLE #导出标结果

OUTPUT output.sql #导出的文件名

9、查看oracle的表数据

SQL> show user;

USER is "SCOTT"

SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA from dual;

CURRENT_SCHEMA

--------------------------------------------------------------------------------

SCOTT

SQL> select table_name,tablespace_name from user_tables;

TABLE_NAME TABLESPACE_NAME

------------------------------ ------------------------------

DEPT USERS

EMP USERS

BONUS USERS

SALGRADE USERS

TMP USERS

TEST USERS

T1 USERS

10、导出表结构

[oracle@10-0-98-60 ora2pg]$ ora2pg -c ora2pg.conf

Ora2Pg version: 18.2

Trying to connect to database: dbi:Oracle:host=10.0.98.60;sid=orcl

Isolation level: SET TRANSACTION ISOLATION LEVEL READ COMMITTED

Looking forward functions declaration in schema SCOTT.

Retrieving table information...

[1] Scanning table BONUS (0 rows)...

[2] Scanning table DEPT (4 rows)...

[3] Scanning table EMP (14 rows)...

[4] Scanning table SALGRADE (5 rows)...

[5] Scanning table T1 (1 rows)...

[6] Scanning table TEST (1 rows)...

[7] Scanning table TMP (1 rows)...

Dumping table T1...

Dumping table TEST...

Dumping table DEPT...

Dumping table BONUS...

Dumping table EMP...

Dumping table SALGRADE...

Dumping table TMP...

Dumping RI EMP...

问题

[oracle@10-0-98-60 ora2pg]$ ora2pg -c ora2pg.conf

Ora2Pg version: 18.2

Trying to connect to database: dbi:Oracle:host=10.0.98.60;sid=orcl

Isolation level: SET TRANSACTION ISOLATION LEVEL READ COMMITTED

Looking forward functions declaration in schema SCOTT.

DBD::Oracle::db prepare failed: ORA-00942: table or view does not exist (DBD ERROR: error possibly near

解决方案

oracle授予用户DBA权限

SQL> grant dba to scott;

Grant succeeded.

11、查看表结构

自动做了表结构数据类型转换

[oracle@10-0-98-60 ora2pg]$ more output.sql

-- Generated by Ora2Pg, the Oracle database Schema converter, version 18.2

-- Copyright 2000-2017 Gilles DAROLD. All rights reserved.

-- DATASOURCE: dbi:Oracle:host=10.0.98.60;sid=orcl

SET client_encoding TO 'UTF8';

\set ON_ERROR_STOP ON

SET check_function_bodies = false;

CREATE TABLE dept (

deptno smallint NOT NULL,

dname varchar(14),

loc varchar(13)

) ;

ALTER TABLE dept ADD PRIMARY KEY (deptno);

CREATE TABLE bonus (

ename varchar(10),

job varchar(9),

sal bigint,

comm bigint

) ;

CREATE TABLE emp (

empno smallint NOT NULL,

ename varchar(10),

job varchar(9),

mgr smallint,

hiredate timestamp,

sal decimal(7,2),

comm decimal(7,2),

deptno smallint

) ;

ALTER TABLE emp ADD PRIMARY KEY (empno);

12、更改ora2pg配置导出数据

cat ora2pg.conf

ORACLE_HOME /usr/local/oracle/product/11.2.0/db_1

#Set Oracle database connection (data source, user, password)

ORACLE_DSN dbi:Oracle:host=10.0.98.60;sid=orcl

ORACLE_USER scott

ORACLE_PWD tiger

SCHEMA scott

DEBUG 1

ORA_INITIAL_COMMAND

EXPORT_SCHEMA 0

CREATE_SCHEMA 1

COMPILE_SCHEMA 0

TYPE DATA #导出数据内容

OUTPUT data.sql #导出的数据文件名

13、导出表内容

[oracle@10-0-98-60 ora2pg]$ ora2pg -c ora2pg.conf

Ora2Pg version: 18.2

Trying to connect to database: dbi:Oracle:host=10.0.98.60;sid=orcl

Isolation level: SET TRANSACTION ISOLATION LEVEL READ COMMITTED

Looking forward functions declaration in schema SCOTT.

Retrieving table information...

[1] Scanning table BONUS (0 rows)...

[2] Scanning table DEPT (4 rows)...

[3] Scanning table EMP (14 rows)...

[4] Scanning table SALGRADE (5 rows)...

[5] Scanning table T1 (1 rows)...

[6] Scanning table TEST (1 rows)...

[7] Scanning table TMP (1 rows)...

Trying to connect to database: dbi:Oracle:host=10.0.98.60;sid=orcl

Isolation level: SET TRANSACTION ISOLATION LEVEL READ COMMITTED

Retrieving partitions information...

Looking how to retrieve data from BONUS...

Fetching all data from BONUS tuples...

DEBUG: Formatting bulk of 10000 data for PostgreSQL.

DEBUG: Creating output for 10000 tuples

Dumping data from BONUS to file: data.sql

Extracted records from table BONUS: total_records = 0 (avg: 0 recs/sec)

[> ] 0/26 total rows (0.0%) - (0 sec., avg: 0 recs/sec).

Looking how to retrieve data from DEPT...

Fetching all data from DEPT tuples...

DEBUG: Formatting bulk of 10000 data for PostgreSQL.

DEBUG: Creating output for 10000 tuples

Dumping data from DEPT to file: data.sql

Extracted records from table DEPT: total_records = 4 (avg: 4 recs/sec)

....

[========================>] 51/26 total rows (196.2%) - (1 sec., avg: 51 recs/sec).

Looking how to retrieve data from TMP...

Fetching all data from TMP tuples...

DEBUG: Formatting bulk of 10000 data for PostgreSQL.

DEBUG: Creating output for 10000 tuples

Dumping data from TMP to file: data.sql

Extracted records from table TMP: total_records = 14 (avg: 14 recs/sec)

[========================>] 65/26 total rows (250.0%) - (1 sec., avg: 65 recs/sec).

Restarting sequences

14、导入表结构和数据

导入表结构

[oracle@10-0-98-60 ora2pg]$ psql -h 127.0.0.1 -U postgres < output.sql

SET

SET

CREATE TABLE

CREATE TABLE

CREATE TABLE

ALTER TABLE

CREATE TABLE

CREATE TABLE

ALTER TABLE

CREATE TABLE

CREATE TABLE

ALTER TABLE

导入数据

[oracle@10-0-98-60 ora2pg]$ psql -h 127.0.0.1 -U postgres < data.sql

SET

SET

BEGIN

INSERT 0 1

INSERT 0 1

...

INSERT 0 1

INSERT 0 1

COMMIT

15、数据校验

oracle

SQL> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7369 SMITH CLERK 7902 17-DEC-80 800 20

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

7566 JONES MANAGER 7839 02-APR-81 2975 20

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

7782 CLARK MANAGER 7839 09-JUN-81 2450 10

7788 SCOTT ANALYST 7566 19-APR-87 3000 20

7839 KING PRESIDENT 17-NOV-81 5000 10

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

7876 ADAMS CLERK 7788 23-MAY-87 1100 20

7900 JAMES CLERK 7698 03-DEC-81 950 30

7902 FORD ANALYST 7566 03-DEC-81 3000 20

7934 MILLER CLERK 7782 23-JAN-82 1300 10

postgres

postgres=# select * from emp;

empno | ename | job | mgr | hiredate | sal | comm | deptno

-------+--------+-----------+------+---------------------+---------+---------+--------

7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800.00 | | 20

7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600.00 | 300.00 | 30

7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250.00 | 500.00 | 30

7566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975.00 | | 20

7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 | 30

7698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850.00 | | 30

7782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450.00 | | 10

7788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000.00 | | 20

7839 | KING | PRESIDENT | | 1981-11-17 00:00:00 | 5000.00 | | 10

7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500.00 | 0.00 | 30

7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100.00 | | 20

7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950.00 | | 30

7902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000.00 | | 20

7934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300.00 | | 10

(14 rows)

16、连接Postgres

PG_DSN dbi:Pg:dbname=postgres;host=10.0.98.60;port=5432

PG_USER postgres

PG_PWD 123456

OUTPUT output.sql

  1. 更多用法 创建迁移模板

[root@centos8 ~]# sqlplus hr/Sqlite123@//192.168.56.130:1521/orclpdb1

"下一步是配置和测试,现在我们需要自己编写一个配置文件,然后使用配置文件连接Oracle数据库进行测试,正常情况下是能够连通的,如果有异常情况,则证明前面我们的安装有一些错误。"

DBA3号小哥一听来了兴趣,"终于到这一步了,配置文件怎么配?"

"你上网站http://ora2pg.darold.net/documentation.html

可以查看官方的配置文档,我的配置有点多,因为我需要应对各种不同的情况。不过,你现在可以从创建一个通用工程先开始"

DBA3号小哥说道:"好的,那我先来创建一个通用工程。"

[root@centos8 ora2pg]# ora2pg --project_base /root/ora2pg --init_project hr_migrate


Creating project hr_migrate.
/root/ora2pg/hr_migrate/        schema/                dblinks/                directories/                functions/                grants/                mviews/                packages/                partitions/                procedures/                sequences/                synonyms/                tables/                tablespaces/                triggers/                types/                views/        sources/                functions/                mviews/                packages/                partitions/                procedures/                triggers/                types/                views/        data/        config/        reports/

"现在你可以看到,咱们创建了一个迁移工程,自动生成默认的模板,config文件夹下包含配置文件,还有一个叫export_schema.sh

的shell脚本。你现在可以编辑config下的配置文件,配置好oracle相关的连接字符串、用户名、密码以及要导出的schema,然后执行export_schema.sh

脚本就会帮你把Oracle的DDL导出来,然后你在使用脚本输出的命令导出数据。你先试一下"。

DBA3号小哥又继续问道:"那具体的config下配置哪些内容?"

"我们现在测试,就先简单的配置一下。你配置下面这些选项,然后执行export_schema.sh

脚本。"

[root@centos8 hr_migrate]# vi config/ora2pg.conf 
# Set the Oracle home directory
ORACLE_HOME     /usr/lib/oracle/19.10/client64
# Set Oracle database connection (datasource, user, password)
ORACLE_DSN      dbi:Oracle:host=192.168.56.130;port=1521;service_name=orclpdb1
ORACLE_USER     hr
ORACLE_PWD      Sqlite123
SCHEMA          HR

DBA3号小哥摇摇头叹了口气说道:"还有好多配置选项,不知道干嘛用的,让人云里雾里。"

"你现在先把测试玩转起来,后面真正迁移你就会用到这些选项,那个时候在深入学习不迟。"

"好的,那我先把这搭起来。"DBA3号小哥信心满满的说道。

接下来DBA3号小哥运行了export_schema.sh

脚本。

所有的ddl语句都导出到了schema下的子目录里面。最后还输出了一条指令。

To extract data use the following command:ora2pg -t COPY -o data.sql -b ./data -c ./config/ora2pg.conf

"小哥,你注意执行完脚本有个命令需要你再手动执行一下,刚刚导出的是ddl脚本,现在最后这个手动的命令是导出数据的。"

"ok,我已经把数据导出来了。"DBA3号小哥按我的要求做完说道。

"嗯,有了结构和数据之后,你再配置好config里面的PostgreSQL连接字符串,执行import_all.sh就能完整的把刚刚的这些脚本导入了。不过在这之前你需要安装DBD :: Pg模块。"

DBA3号小哥又开始不耐烦的说道:"又要安装这些真是很烦躁啊"

"小哥,这里需要你注意的是还需要设置PostgreSQL的环境变量哦!"

[root@centos8 ~]# wget -c https://cpan.metacpan.org/authors/id/T/TU/TURNSTEP/DBD-Pg-3.14.2.tar.gz[root@centos8 ~]# gunzip DBD-Pg-3.14.2.tar.gz[root@centos8 ~]# tar -xvf DBD-Pg-3.14.2.tar[root@centos8 ~]# cd DBD-Pg-3.14.2/vi bash_parfileexport ORACLE_HOME=/usr/lib/oracle/19.10/client64export PGHOME=/data/postgresql/pgsqlexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:$PGHOME/lib:$LD_LIBRARY_PATHexport PATH=$ORACLE_HOME/bin:$PGHOME/bin:$PATHsource .bash_profile[root@centos8 DBD-Pg-3.14.2]# perl Makefile.PL[root@centos8 DBD-Pg-3.14.2]# make && make install

DBA3号小哥利索的配置好环境变量,装完DBD :: Pg模块,然后说道:"现在肯定是又要修改配置文件那些连PostgreSQL的字符串吧。"

"是啊,小哥你现在是越来越知道我们的套路了。配置完成后你就可以执行导入脚本了,记得要使用-I选项,这个选项可以排除索引、约束、触发器,等完全导入数据之后在使用-i进行索引、约束、触发器的创建。"

PG_DSN还是在config/ora2pg.conf 下配置

grep -i PG_DSN *

import_all.sh:pgdsn_defined=`grep "^PG_DSN" config/ora2pg.conf | sed 's/.*dbi:Pg/dbi:Pg/'`

import_all.sh:echo "Running: ora2pg$IMPORT_JOBS$PARALLEL_TABLES -c config/ora2pg.conf -t COPY --pg_dsn \"$pgdsn_defined\" --pg_user $DB_OWNER"

import_all.sh:ora2pg$IMPORT_JOBS$PARALLEL_TABLES -c config/ora2pg.conf -t COPY --pg_dsn "$pgdsn_defined" --pg_user $DB_OWNER

PG_DSN          dbi:Pg:dbname=postgres;host=192.168.56.119;port=5432PG_USER         postgres    PG_PWD          Sqlite1、23

DBA3号小哥开心的说道:"我已经执行成功了。我现在去看一下数据是否已经导入了"。

"已经全部导进去了,大功告成!"。DBA3号小哥笑呵呵的说。

"不,你还要在运行-i执行导入索引、约束、触发器"。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值