32
Oracle2PostgreSQL on ARM 解决 方案 云和恩墨(北京)信息技术有限公司 云服务事业部 [email protected]

Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

Oracle2PostgreSQL on ARM

解决方案云和恩墨(北京)信息技术有限公司

云服务事业部[email protected]

Page 2: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

目录

1

CONTENS

方案背景

2 PGonARM

3 技术差异

4 迁移流程

Page 3: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

Oracle在传统数据中心面临的挑战

➢满足业务的快速发展 - 扩展性

➢适应瞬息万变的市场 - 灵活性

➢应对复杂的安全挑战 - 安全性

➢持续降终端用户成本 - 经济性

➢推进国产化自主可控 - 自主性

周期长

⚫ 采购周期长

⚫ 安装配置复杂

匹配

成本高

⚫ 购置成本高

⚫ 升级成本高

风险高

⚫ 过度依赖原厂

⚫ 国际形式影响

⚫ 闭源

运维杂

⚫ 基础架构

⚫ 运维复杂性高

⚫ 缺乏敏捷

Page 4: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PostgreSQL替换Oracle的优势

➢满足业务的快速发展 - 扩展性

➢适应瞬息万变的市场 - 灵活性

➢应对复杂的安全挑战 - 安全性

➢持续降终端用户成本 - 经济性

➢推进国产化自主可控 - 自主性

开放源码

⚫ 开放源代码

⚫ BSD授权

匹配

功能强大

⚫ 高度兼容Oracle

⚫ 完善的SQL支持

案例丰富

⚫ 各类行业应用

⚫ 各种信息存储

社区活跃

⚫ 版本更新迅速

⚫ BUG修复及时

⚫ 三方资源丰富

Page 5: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PG版本和功能沿革

• 由 Michael Stonebraker 教授在 University of California 发起

1986 2019

PostgreSQL 10Declarative PartitioningParallel QueryLogical Replication (Pub/Sub)

PostgreSQL 8Windows SupportPoint in Time RecoveryTablespacesPostgreSQL 7

Foreign KeysOptimizer ImprovementsSQL92 Join SyntaxSub Query SupportStored Procedures

PostgreSQL 6Datetime, Timespan Data TypesJdbc SupportTriggers

Postgres95SQL SUPPORT

1995 2000

Source : https://www.postgresql.org/docs/current/static/history.html

PostgreSQL 9Replication via Log ShippingPerformance ImprovementsImproved Triggers/Constraints

PostgreSQL 11Increased Performance for PartitioningTransactions in Stored ProceduresEnhanced for Query Parallelism

PostgreSQL 12 BetaIndexing Performance, Functionality, and Management

Inlined WITH queries (Common table expressions)Page Checksums

Page 6: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PG和Oracle高度兼容

• PostgreSQL具有丰富的功能特性和扩展插件,95%+兼容Oracle

1986 20191995 2000Description Oracle Database 18c PostgreSQL 11

ACID Compliant Yes Yes

Backups (Online, Incremental etc) Yes Yes (But complex, No incremental)

Parallel Query, DML, DDL Yes Partial (Work still ongoing)

Stored Logic Yes (PL/SQL, Java) Yes (pq/pgSQL, Python, Java, Perl, TCL, C)

Indexes Yes (Btree, BitMap, Function, Hash, Storage Index)

Yes (Btree, Function, Hash, Block Range, Gist, GiN)

Disaster Recovery Yes (DataGuard) Yes (Streaming Replication)

Partitioning Yes (Range, List, Hash, Function, Interval, Sub Partitioning etc.)

Partial (Range, List, Hash* but no local indexes)

Page 7: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PG和Oracle高度兼容

1986 20191995 2000Description Oracle Database 18c PostgreSQL 11

JSON Support Yes (Text) Yes (Text and Binary)

Key Value Pair Support No Yes (HStore)

Transactional DDL No Yes

Session Based Synchronous Replication No Yes

Boolean Data Type No Yes

• PostgreSQL具有丰富的功能特性和扩展插件,95%+兼容Oracle• 部分功能超过 Oracle 的功能提供

Page 8: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

开源的趋势与未来

Source : https://db-engines.com/en/ranking_trend

DB-Engines 的流行度排行榜上,开源数据库的受欢迎程度不断上升。

开源和商业数据库接近平分秋色。

在 DB-Engines 的数据库积分趋势上,PostgreSQL 增长迅速。

而且后劲十足。

Page 9: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

目录

1

CONTENS

方案背景

2 PGonARM

3 技术差异

4 迁移流程

Page 10: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

ARM生态

Page 11: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

华为鲲鹏处理器

Page 12: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PGonARM安装部署

由于最新版本的PostgreSQL并没有官方发布的

二进制安装文件,因此需要从源码开始编译安

装。

官网:www.postgresql.org

下载:www.postgresql.org/ftp/source/v11.3/

步骤一:安装编译源码需要的相关rpm包yum install gcc gcc-c++ readline-devel zlib-devel

步骤二:编译PostgreSQL 11.3源码$ ./configure –prefix=/data/pgsql$ make –j 8 $ su# make install备注:第二步make是极为关键的步骤,这一步不应该显示任何error,在最后显示“All of PostgreSQL successfully made. Ready to install.”字样表示这一步成功完成。

步骤三:指定数据文件路径初始化数据库# mkdir /data/pgsql/data # adduser postgres# passwd postgres# chown postgres /data/pgsql/data # su - postgres$ /data/pgsql/bin/initdb -D /data/pgsql/data在云环境中,通常需要在额外挂载的超高IO云盘上存储数据文件。

步骤四:启动数据库$ /data/pgsql/bin/pg_ctl -D /data/pgsql/data -l logfile start

[postgres@ecs-arm-0005 ~]$ psqlpsql (11.3) Type "help" for help.

postgres=#

Page 13: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PGonARM稳定运行

完全通过PostgreSQL最新版本11.3自带的

189个回归测试。

串行测试模式和并行测试模式都完全通过。

Page 14: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PGonARM性能对比

ARM服务器 X86服务器

操作系统 CentOS 7 CentOS 7

pg版本 11.3 11.3

CPU类型 ARMv8 鲲鹏916 Intel E5-2667 v3 @ 3.20GHz

内存 29GB 32GB

虚拟化 华为云QUEM vmware

• ARM芯片服务器 vs. X86芯片服务器–相同的操作系统CentOS 7

–相同的数据库版本 PostgreSQL 11.3

– X86服务器的CPU主频更高

– X86服务器的内存更大

–都采用虚拟化方案

Page 15: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PGonARM性能对比

性能对比—pgbench 读写响应时间(越低越好) 性能对比—pgbench 读写 TPS(越高越好)

ARM在响应时间和读写TPS指标上的表现均领先于X86。

Page 16: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PGonARM性能对比

性能对比—pgbench 只读响应时间(越低越好) 性能对比—pgbench 只读 TPS(越高越好)

ARM在响应时间和只读TPS指标上的表现均领先于X86。

Page 17: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

PGonARM性能对比

性能对比—tpch 22条SQL的查询时间(越低越好)

数据有预热

性能对比—tpch 22条SQL的查询时间(越低越好)

数据无预热注:存储性能影响

较大

数据有预热情况下,两者持平;无预热情况下,ARM的表现领先于X86。

Page 18: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

目录

1

CONTENS

方案背景

2 PGonARM

3 技术差异

4 迁移流程

Page 19: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

Oracle Vs. PostgreSQL存储空间

1995

• PostgreSQL MVCC 空间使用– VM,Single table,3 indexes

– PostgreSQL 10.3,Oracle Database 18c

Page 20: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

函数改写(1)

1995

• Oracle 数据库的部分函数需要进行改写– SQL ANSI覆盖全面,Core SQL 2011(和2008)上的179个功能,PostgreSQL符合至少160。

项目 Oracle PostgreSQL

当前时间 SYSDATE 可使用current_timestamp替换

序列 SEQNAME.NEXTVAL NEXTVAL('SEQNAME')

NVL NVL函数 NVL可以用COALESCE函数替换

类型自动转换 隐式转换 会出现类型不匹配等错误,需要在Java或者sql中进行类型转换

INSTR函数 instr('str1','str2') strpos('str1','str2')

外连接 Oracle可简写为(+) 用LEFT JOIN等语句替换

层次查询 START WITH语句、CONNECT BY语句 用WITH RECURSIVE语句

数据库对象大小写 不区分大小写 创建数据库对象时要小写,这样才不区分SQL的大小写

同义词 Oracle支持同义词 用视图代替

DUAL SELECT 1+1 FROM DUALSELECT 1+1 或者CREATE VIEW dual AS SELECT current_timestamp

ROWNUM ROWNUM关键字限制结果集数量,用于翻页等:SELECT * FROM T LIMIT 5 OFFSET 0生成行号:ROW_NUMBER() OVER()

DECODE等判断函数 DECODE() 用标准的CASE WHEN THEN ELSE END语句替换

TO_CHAR TO_CHAR(COL,FMT)格式化字符串可以为空 TO_CHAR(COL1,'FM999999'),9的个数为字段长度

TO_NUMBER TO_NUMBER(COL,FMT)格式化字符串可以为空 TO_NUMBER(COL1,'999999'),9的个数为字段长度

Page 21: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

函数改写(2)

1995项目 Oracle PostgreSQL

BITAND BITAND(A,B) A & BMINUS MINUS语句 以EXCEPT语句来替代BIN_TO_NUM SELECT BIN_TO_NUM(1,0,1,0) AS VALUE1 FROM DUAL SELECT CAST(B'1010' AS INTEGER) AS VALUE1

UPDATE语句列列表

UPDATE accounts SET (contact_last_name, contact_first_name) =

(SELECT last_name, first_name FROM salesmenWHERE salesmen.id = accounts.sales_id);

不支持该语法,需要拆分为多个单独的列

SUBSTR函数如果从第一个开始取子串,可以从0开始,也可以从1开始,如果不是第一个开始,则从1开始计数,可以为负值,从字符串结尾计数,用于取最后几位。

从1开始计数。如果要取最后几位,可以用RIGHT函数解决。

子查询别名 如果FROM后只有一个子查询,该子查询可以没有别名 必须有别名

列(别)名为关键字Oracle中比如name,type这样的关键字可以直接作为列的别名,比如:select xx name from t

需要加as,比如select xx as name from t

当前登录用户 SELECT USER FROM DUAL select current_user

ALL_COL_COMMENTS通过SELECT * FROM ALL_COL_COMMENTS可以获得列注释信息

select s.column_name as COLUMN_NAME,coalesce(col_description(c.oid,ordinal_position) ,s.column_name) as COMMENTSfrom information_schema.columns s,pg_class cwhere s.table_name = 'ac01_si' and s.table_name = c.relnameand s.table_schema = current_schema()PG需要通过col_description获得列注释信息

修改表字段类型

1.如果字段无数据,可直接修改2.如果有数据且新类型和原类型兼容,可以直接修改3.如果不兼容,可通过对原字段改名,然后增加新字段,再通过UPDATE语句对数据进行处理

1.如果新类型和原类型兼容,可直接修改2.如果不兼容,需要使用USING关键字然后提供一个类型转换的表达式

• Oracle 数据库的部分函数需要进行改写– SQL ANSI覆盖全面,Core SQL 2011(和2008)上的179个功能,PostgreSQL符合至少160。

Page 22: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

函数改写(3)

1995项目 Oracle PostgreSQL

NULL和'' ORACLE认为''等同于NULL, LENGTH('')为NULL NULL和’’不同, LENGTH('')为0NULL和'' TO_DATE('','YYYYMMDD')为空 TO_DATE('','YYYYMMDD')为0001-01-01 BCNULL和'' TO_NUMBER('',1)为NULL TO_NUMBER('',1),报错

NULL和''INSERT INTO TEST(VALUE3)VALUES('')[Result]VALUE3=NULL (注:VALUE3字段为Number | Varchar )

INSERT INTO TEST(VALUE4)VALUES(‘’)VALUE4=NULL | ‘’(注:VALUE4字段为Number | Varchar )

ADD_MONTHS ADD_MONTHS(DATE,INT)

CREATE FUNCTION add_months(date, int)RETURNS date AS'SELECT ($1 +($2::text||'' month'')::interval)::date'LANGUAGE 'sql'或SQL:SELECT ($1 +($2::text||' month')::interval)

LAST_DAY LAST_DAY(DATE)

CREATE OR REPLACE FUNCTION last_day(date)RETURNS date AS$$SELECT (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day')::date;

$$ LANGUAGE 'sql';或SQL:SELECT (date_trunc('MONTH', $1) + interval '1 month - 1 day')::date;

MONTHS_BETWEEN MONTHS_BETWEEN(DATE,DATE)

CREATE FUNCTION MONTH_BETWEEN(d1 timestamp,d2 timestamp)RETURNS NUMERIC AS

'SELECT (extract(year from age(d1,d2))*12 + extract(month from age(d1,d2)))::integer'

LANGUAGE 'sql';

• Oracle 数据库的部分函数需要进行改写– SQL ANSI覆盖全面,Core SQL 2011(和2008)上的179个功能,PostgreSQL符合至少160。

Page 23: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

语法转换(1)

1995

PostgreSQL中没有外关联+的写法,需要改成标准外关联写法:

SQL> SELECT COUNT(*) FROM T, T1 WHERE T.OBJECT_ID = T1.OBJECT_ID(+);

COUNT(*)----------

97103postgres=# SELECT COUNT(*) FROM T LEFT JOIN T_TAB ON (T.ID = T_TAB.ID);count

-------10

PostgreSQL中没有ROWNUM伪列,如果需要可以使用ROW_NUMBER()分析函数:

SQL> SELECT ID, ROWNUM RN FROM T WHERE OWNER = 'U1';ID RN

---------- ----------95412 195414 2

postgres=# SELECT ID, ROW_NUMBER() OVER(ORDER BY ID) RN FROM T WHERE OWNER = 'public';id | rn----+----1 | 1

PostgreSQL中SYSDATE可以用localtimestamp(0)来代替:

SQL> SELECT SYSDATE FROM DUAL;SYSDATE-------------------2019-06-18 14:42:15

postgres=# select localtimestamp(0);localtimestamp

---------------------2019-06-18 14:42:31

PostgreSQL中必须对子查询明确定义别名:

SQL> SELECT COUNT(*) FROM (SELECT OWNER FROM T);COUNT(*)

----------97103

postgres=# SELECT COUNT(*) FROM (SELECT OWNER FROM T) T;count

-------0

Page 24: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

UPDATE M_SPA_INDV_ACCT_INFO_H_NEW T SET T.ISSUE_CERT_ORG_AREA = P.AREACODEFROM ( SELECT DISTINCT P1.FIN_INS_ENCODE,P1.AREACODE FROM MAN_ORG_FIN_MAP P1) P WHERE T.FIN_INS_ENCODE = P.FIN_INS_ENCODE AND (T.ISSUE_CERT_ORG_AREA NOT IN (SELECT SREALAREACODE FROM MAN_AREA_INFO) OR T.ISSUE_CERT_ORG_AREA IS NULL);

语法转换(2)

1995

merge

INTO M_SPA_ACCT_H_NEW T

using

( SELECT DISTINCT AREACODE, FIN_INS_ENCODE

FROM MAN_ORG_FIN_MAP) P

on (T.FIN_INS_ENCODE = P.FIN_INS_ENCODE

AND (T.ISSUE_CERT_ORG_AREA

NOT IN

( SELECT SREALAREACODE

FROM MAN_AREA_INFO )

OR T.ISSUE_CERT_ORG_AREA IS NULL ))

when matched THEN

UPDATE set

T.ISSUE_CERT_ORG_AREA = P.AREACODE;

UPDATE

M_SPA_ACCT_H_NEW T

SET T.ISSUE_CERT_ORG_AREA = P.AREACODE

FROM (

SELECT DISTINCT

P1.FIN_INS_ENCODE,

P1.AREACODE

FROM MAN_ORG_FIN_MAP P1) P

WHERE T.FIN_INS_ENCODE = P.FIN_INS_ENCODE

AND (T.ISSUE_CERT_ORG_AREA

NOT IN

(

SELECT SREALAREACODE FROM MAN_AREA_INFO

) OR T.ISSUE_CERT_ORG_AREA IS NULL);

Page 25: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

存储过程修改

1995过程名 迁移完成度 代码改动量 运行效率 备注

PROC_M_SPA_ACCT_H 完成 较大 1分18秒

针对同样可执行的语句在不同数据库上执行结果 不 一 样 的 情 况 , 做SQL等价改写

PROC_GL_SUBJ_BAL 完成 基本无 32秒

PROC_RPT_AC_NVM 完成 很少 11秒

PROC_RPT_ITEM__D 完成 较少 1分08秒针对性能不足做了专门改写优化

• Oracle 数据库中的存储过程等需要修改迁移

Page 26: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

目录

1

CONTENS

方案背景

2 PGonARM

3 技术差异

4 迁移流程

Page 27: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

O2PG项目流程

本地数据中心

华为云平台迁移

迁移联

合小组

前期系

统调研

新系统

架构规

新硬件

性能评

迁移方

案制定

迁移方

案测试

应用级

功能测

试与性

能测试

性能分

析与提

迁移演

迁移实

实施后

的监控

及验证

Page 28: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

O2PG迁移方法

迁移方式 优点 缺点

ora2pg 支持类型丰富,便捷 需要安装额外的依赖包

fdw 可以用dblink的方式insert 效率低下

ora_miggrator 可以按用户迁移 需要借助ora2pg,支持类型有限

EDB MTK 安装简洁 生成对象DDL脚本形式创建,效率较低

Glodengate 同步数据减少停机时间 需要额外的成本

Oracle PostgreSQLtool

连接源和目标数据库

选择相应的表、Schema 或数据库

使用迁移工具创建表,加载数据并保持同

完成迁移后,将应用程序的访问切换到目

标数据库上

Page 29: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

O2PG-Ora2pg

Ora2pg是一个开源的工具,可以将Oracle

的数据转换成pg的格式,导入到pg数据库

中。支持表、视图、序列、物化视图和存储

过程等,功能强大。目前最新的版本是v20。

官网:http://ora2pg.darold.net

下载:github.com/darold/ora2pg/releases

配置导出表数据 ora2pg_data.conf ORACLE_HOME /u01/soft/client_1ORACLE_DSN dbi:Oracle:host=60.205.188.120;sid=devdb1;port=1528ORACLE_USER NIR_DEVORACLE_PWD BVQUrDlWlIE3SCHEMA NIR_DEVTYPE COPYPG_NUMERIC_TYPE 0PG_INTEGER_TYPE 1DEFAULT_NUMERIC float#SKIP fkeys pkeys ukeys indexes checksNLS_LANG AMERICAN_AMERICA.UTF8OUTPUT data.sql

配置导出存储过程 ora2pg_procedure.conf ORACLE_HOME /u01/soft/client_1ORACLE_DSN dbi:Oracle:host=60.205.188.120;sid=devdb1;port=1528ORACLE_USER NIR_DEVORACLE_PWD BVQUrDlWlIE3SCHEMA NIR_DEVTYPE PROCEDUREPG_NUMERIC_TYPE 0PG_INTEGER_TYPE 1DEFAULT_NUMERIC floatNLS_LANG AMERICAN_AMERICA.UTF8OUTPUT procedure.sql

[root@enmodb2]# /usr/local/bin/ora2pg -c ora2pg_table.conf[============>] 198/198 tables (100.0%) end of scanning. [============>] 198/198 tables (100.0%) end of table export.

可以依次导出表结构、表、存过等对象,其中存过需要具体验证测试一下。

Page 30: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

O2PG-OGG

Oracle GoldenGate软件是一种基于日志的结构化数据复

制备份软件,它通过解析源数据库在线日志或归档日志获

得数据的增量变化,再将这些变化应用到目标数据库,从

而实现源数据库与目标数据库同步。

环境(源端):Oracle 11.2.0.4OGG:11.2.1.0.30

GGSCI (orcl) 1> create subdirs

Creating subdirectories under current directory /home/oracle/ggs

Parameter files /home/oracle/ggs/dirprm: already existsReport files /home/oracle/ggs/dirrpt: createdCheckpoint files /home/oracle/ggs/dirchk: created

GGSCI (orcl) 2> edit param mgr

GGSCI (orcl) 3> start mgr

SQL> connect enmotech/enmotechConnected.SQL> create table orapg (col1 number, col2 varchar2(20));

Table created.

SQL> alter table orapg add primary key (col1);

Table altered.

GGSCI (pstg) 1> create subdirs

Creating subdirectories under current directory /home/oracle/ggs

Parameter files /home/oracle/ggs/dirprm: already existsReport files /home/oracle/ggs/dirrpt: createdCheckpoint files /home/oracle/ggs/dirchk: created

GGSCI (pstg) 2> edit param mgrGGSCI (pstg) 3> start mgr

CREATE TABLE "public".”orapg"("col1" integer NOT NULL,

"col2" varchar(20),CONSTRAINT "PK_Col111" PRIMARY KEY ("col1"))

环境(目标端):PostgreSQL:9

Page 31: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

O2PG迁移总结

• 现有Oracle环境调研• 业务对停机窗口要求• 业务连续性要求• 迁移上云总体实施计划• 迁移方案规划设计• 回退方案设计

规划设计

• 系统容量评估• 订阅配置华为云• 软件介质及环境准备• 应用和数据迁移测试• 业务测试和方案完善

实施准备• 数据迁移实施• 数据一致性检查• 迁移后应用测试• 迁移后集成测试• 生产系统迁移、切换

迁移实施

• 迁移后系统监控• 系统持续优化• 知识转移• 项目总结报告

技术支持

阶段 任务 人天 成果

规划设计

调研 4 调研文档

解决方案 6 解决方案

实施准备

应用测试和改写 30 ~100 过程改写

数据迁移测试 10 ~2T 数据迁移

迁移实施

实施迁移 4 4小时数据库迁移

技术支持

优化和服务支持 按需

Page 32: Oracle2PostgreSQL on ARM 解决方案 · 2019. 9. 24. · Logical Replication (Pub/Sub) PostgreSQL 8 Windows Support Point in Time Recovery PostgreSQL 7 Tablespaces Foreign Keys Optimizer

云和恩墨(北京)信息技术有限公司

感谢聆听