当前位置: 代码网 > it编程>数据库>Oracle > 基于ora2pg迁移Oracle19C到postgreSQL14的全过程

基于ora2pg迁移Oracle19C到postgreSQL14的全过程

2024年05月19日 Oracle 我要评论
1.ora2pg介绍ora2pg是我的第一个盟友。它是一个开源工具,可将oracle数据库模式转换为postgresql格式。可以处理大量的甲骨文对象可通过配置文件进行配置https://ora2pg

1.ora2pg介绍

ora2pg是我的第一个盟友。
它是一个开源工具,可将oracle数据库模式转换为postgresql格式。
可以处理大量的甲骨文对象
可通过配置文件进行配置
https://ora2pg.darold.net/

特点:
支持导出数据库绝大多数对象类型,包括表、视图、序列、索引、外键、约束、函数、存储过程等。
提供pl/sql到pl/pgsql语法的自动转换,一定程度避免了人工修正。
可生成迁移报告,包括迁移难度评估、人天估算。
可选对导出数据进行压缩,节约磁盘开销。
配置选项丰富,可自定义迁移行为。

2.ora2pg安装

2.1 安装依赖包

yum install -y gcc perl-dbd-pg perl perl-devel perl-dbi perl-cpan bzip2
perl-extutils-ebuilder perl-extutils-makemaker perl-time-hires perl-tests perf cpan

2.2 正式安装

perl -mcpan -e ‘install dbi'
perl -mcpan -e ‘install dbd::oracle'
perl -mcpan -e ‘install dbd::pg'

3.相关配置

3.1 表结构配置

cat > /etc/ora2pg/ora2pg_table_ddl.conf <<“eof”
oracle_home /usr/lib/oracle/21/client64
oracle_dsn dbi:oracle:host=172.18.12.90;sid=oradb;port=1521
#oracle_dsn dbi:oracle:host=192.168.1.29;service_name=pdb1;port=1521
#oracle_dsn dbi:oracle:tns_ora19c
oracle_user system
oracle_pwd oracle
schema stest
export_schema 1
create_schema 1
type table
pg_numeric_type 0
pg_integer_type 1
default_numeric float
skip fkeys checks
#skip keys pkeys ukeys indexes checks
nls_lang american_america.utf8
output_dir /tmp
output ora2pg_table_ddl.sql
pg_version 14
eof

3.2 表数据的配置文件

cat > /etc/ora2pg/ora2pg_table_data.conf <<“eof”
oracle_home /usr/lib/oracle/21/client64
oracle_dsn dbi:oracle:host=172.18.12.90;sid=oradb;port=1521
#oracle_dsn dbi:oracle:tns_ora19c
oracle_user system
oracle_pwd oracle
schema stest
type copy
pg_numeric_type 0
pg_integer_type 1
default_numeric float
skip fkeys checks
#skip fkeys pkeys ukeys indexes checks
nls_lang american_america.utf8
output_dir /tmp
output ora2pg_table_data.sql
pg_dsn dbi:pg:dbname=jemdb;host=172.18.12.50;port=5432
pg_user postgres
pg_pwd jeames
pg_schema stest
pg_version 14
eof

4.ora2pg迁移数据

4.1 迁移全部表结构

mkdir -p /ora2pg
ora2pg -c /etc/ora2pg/ora2pg_table_ddl.conf -t table -b /ora2pg

4.2 pg中创建数据

su - postgres
psql
create user stest with password ‘post' createdb superuser replication createrole login;
create database jemdb;
alter database jemdb owner to stest;
\c jemdb
– 跑脚本
\i /ora2pg/ora2pg_table_ddl.sql
jemdb=# \d

4.3 迁移数据

ora2pg -d -t copy -c /etc/ora2pg/ora2pg_table_data.conf -p 12 -l 100000 -j 12
此过程执行完成后,数据就已经插入到pg数据库中了:

5.数据验证

su - postgres
psql
\c jemdb

emdb=# show search_path;
   search_path   
-----------------
 "$user", public
(1 row)

jemdb=# set search_path=stest,public;
set
jemdb=# \dt
                list of relations
 schema |         name         | type  |  owner   
--------+----------------------+-------+----------
 stest  | addresses            | table | postgres
 stest  | card_details         | table | postgres
 stest  | customers            | table | postgres
 stest  | inventories          | table | postgres
 stest  | logon                | table | postgres
 stest  | order_items          | table | postgres
 stest  | orderentry_metadata  | table | postgres
 stest  | orders               | table | postgres
 stest  | product_descriptions | table | postgres
 stest  | product_information  | table | postgres
 stest  | warehouses           | table | postgres
(11 rows)

jemdb=# select  nspname as schemaname,
jemdb-# relname,
jemdb-# reltuples::numeric as rowcount,
jemdb-# pg_size_pretty (
jemdb(# pg_total_relation_size ( '"' || nspname || '"."' || relname || '"' )) as size
jemdb-# from    pg_class c left join pg_namespace n on ( n.oid = c.relnamespace ) 
jemdb-# where   nspname not in ( 'pg_catalog', 'information_schema' ) 
jemdb-# and relkind = 'r' 
jemdb-# order by reltuples desc 
jemdb-# limit 20;
 schemaname |       relname        | rowcount |    size    
------------+----------------------+----------+------------
 stest      | inventories          |   899441 | 433 mb
 stest      | order_items          |     7341 | 1072 kb
 stest      | logon                |     2383 | 160 kb
 stest      | card_details         |     1500 | 264 kb
 stest      | addresses            |     1500 | 264 kb
 stest      | orders               |     1430 | 376 kb
 stest      | warehouses           |     1000 | 192 kb
 stest      | customers            |     1000 | 440 kb
 stest      | product_descriptions |     1000 | 288 kb
 stest      | product_information  |     1000 | 400 kb
 stest      | orderentry_metadata  |       -1 | 8192 bytes
(11 rows)

jemdb=# \l
                                  list of databases
   name    |  owner   | encoding |   collate   |    ctype    |   access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 jemdb     | stest    | utf8     | en_us.utf-8 | en_us.utf-8 | 
 postgres  | postgres | utf8     | en_us.utf-8 | en_us.utf-8 | 
 template0 | postgres | utf8     | en_us.utf-8 | en_us.utf-8 | =c/postgres          +
           |          |          |             |             | postgres=ctc/postgres
 template1 | postgres | utf8     | en_us.utf-8 | en_us.utf-8 | =c/postgres          +
           |          |          |             |             | postgres=ctc/postgres
(4 rows)

jemdb=# \dn
  list of schemas
  name  |  owner   
--------+----------
 public | postgres
 stest  | stest
(2 rows)

jemdb=# \du
                                   list of roles
 role name |                         attributes                         | member of 
-----------+------------------------------------------------------------+-----------
 postgres  | superuser, create role, create db, replication, bypass rls | {}
 stest     | superuser, create role, create db, replication             | {}

以上就是基于ora2pg迁移oracle19c到postgresql14的全过程的详细内容,更多关于迁移oracle19c到postgresql14的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com