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的资料请关注代码网其它相关文章!
发表评论