#导入MD文档图片#使用ora2pg迁移Oracle19c到PG13并使用OGG配置实时同步
Posted 小麦苗DB宝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#导入MD文档图片#使用ora2pg迁移Oracle19c到PG13并使用OGG配置实时同步相关的知识,希望对你有一定的参考价值。
[toc]
一、项目目标
1、使用ora2pg迁移Oracle 19.3数据到PG13.2
- 使用swingbench压测生成oracle数据
- 部署ora2pg工具,实现Oracle数据迁移到PG数据库
2、配置OGG实时同步并实现告警
- 部署OGG 19.1,配置实时同步
- 配置OGG director的监控告警功能
- 用swingbench压测生成批量事务,测试OGG实时同步功能
二、环境配置
2.1、环境规划
DG环境规划:
项目 | Oracle源库 | PG目标库 |
---|---|---|
db 类型 | 单实例 | 单实例 |
db version | 19.3.0.0.0 | 13.2 |
OS版本 | CentOS7.6 64位 | CentOS7.6 64位 |
OS hostname | lhrora19c | lhrpg13 |
IP地址 | 192.168.68.66 | 192.168.68.67 |
dbname | lhrsdb | lhrdb |
监听端口 | 1521 | 5432 |
映射的主机端口 | 1528 | 25432 |
SOFT_HOME | /opt/oracle/product/19c/dbhome_1 | /pg13/pg13 |
安装用户 | oracle | pg13 |
同步用户 | SOE | soe |
软件安装:
主机 | 需要的软件 |
---|---|
源端(192.168.68.66) | Oracle 19c database、swingbench、ogg软件 |
目标端(192.168.68.67) | PG 13.2、ora2pg、ogg软件 |
2.2、申请主机环境
-- 创建本次的网络
docker network create --subnet=192.168.68.0/16 mhalhr
docker network inspect mhalhr
-- 创建Oracle主机,已安装Oracle 19c数据库
docker rm -f lhrora19c
docker run -itd -h lhrora19c --name lhrora19c \\
-p 11521:1521 -p 15500:5500 -p 15501:5501 -p 13389:3389 \\
--network mhalhr --ip 192.168.68.66 \\
--privileged=true \\
lhrbest/oracle19clhr_rpm_db_12.2.0.3:2.0 init
-- 创建PG主机,已安装PG 13数据库
docker rm -f lhrpg13
docker run -d --name lhrpg13 -h lhrpg13 \\
--net=mhalhr --ip 192.168.68.67 \\
-p 25432:5432 \\
-v /sys/fs/cgroup:/sys/fs/cgroup \\
--privileged=true \\
lhrbest/lhrpgall:1.0 /usr/sbin/init
-- 添加网卡
docker network connect bridge lhrora19c
docker network connect bridge lhrpg13
-- 重启主机
docker restart lhrora19c lhrpg13
-- 进入主机
docker exec -it lhrora19c bash
docker exec -it lhrpg13 bash
2.3、源端使用swingbench生成压测数据
2.3.1、安装swingbench
下载地址:
http://www.dominicgiles.com/downloads.html
每个swingbench的zip 包里都包含了Linux/Unix 和Windows 文件,所以只需要从官方下载之后,解压缩就可以了。解压之后bin目录下是linux的,winbin目录下是windows的。
需要jdk 1.8环境。
wget https://github.com/domgiles/swingbench-public/releases/download/production/swingbenchlatest.zip
unzip swingbenchlatest.zip -d /usr/local
chown -R oracle.oinstall /usr/local/swingbench/
su - oracle
cat >> ~/.bash_profile <<"EOF"
export JAVA_HOME=/opt/oracle/product/19c/dbhome_1/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=/usr/local/swingbench/bin:$PATH
EOF
source ~/.bash_profile
2.3.2、使用swingbench生成数据
-- 启动数据库和监听
. oraenv
lhrsdb
lsnrctl start
sqlplus / as sysdba
startup
alter user system identified by lhr;
-- swingbench造数据
oewizard -s -create -c /usr/local/swingbench/wizardconfigs/oewizard.xml -create \\
-version 2.0 -cs //192.168.68.66:1521/lhrsdb -dba "sys as sysdba" -dbap lhr -dt thin \\
-ts users -u SOE -p lhr -allindexes -scale 0.001 -tc 16 -v -cl
-s是静默,-create表示创建数据,-c是指定配置文件,就是oewizard.xml,-version指定swingbench版本,-cs表示数据库连接串,-dba表示连接到oracle数据库的用户,-dbap表示连接到oracle数据库的密码,-dt表示连接类型,-ts是指定表空间为users, -u表示压测的用户,-p表示压测用户的密码,-scale是数据量,1就是1G,0.001就是1Mb数据,-tc 是并发度,-allindexes是支持所有的索引类型,-v显示详细信息,-cl表示运行在字符模式。
数据量:
SYS@lhrsdb> col TABLE_NAME format a30
SYS@lhrsdb> SELECT a.table_name,a.num_rows FROM dba_tables a where a.OWNER=\'SOE\' ;
TABLE_NAME NUM_ROWS
-------------------- ----------
CUSTOMERS 1000
ADDRESSES 1500
CARD_DETAILS 1500
WAREHOUSES 1000
ORDER_ITEMS 7168
ORDERS 1430
INVENTORIES 898934
PRODUCT_INFORMATION 1000
LOGON 2383
PRODUCT_DESCRIPTIONS 1000
ORDERENTRY_METADATA 0
11 rows selected.
SYS@lhrsdb> select object_type,count(*) from dba_objects where owner=\'SOE\' group by object_type;
OBJECT_TYPE COUNT(*)
---------------------------------------------- ----------
INDEX 27
PACKAGE BODY 1
PACKAGE 1
SEQUENCE 5
TABLE 11
VIEW 2
6 rows selected.
SYS@lhrsdb> select sum(bytes)/1024/1024 from dba_segments where owner=\'SOE\';
SUM(BYTES)/1024/1024
--------------------
279.25
三、使用ora2pg迁移Oracle 19.3数据到PG13.2
3.1、Ora2Pg 介绍
3.1.1、Ora2Pg 简介
Ora2Pg 是一个免费的工具,用于将 Oracle 或mysql数据库迁移到 PostgreSQL 数据库里。它连接到 Oracle或MySQL 数据库,自动扫描并抽取其结构和数据,然后生成用于实现迁移的SQL 脚本,利用该脚本可以将数据库结构和数据加载到 PostgreSQL 数据库中。
最新版的 Ora2Pg 新功能:
- Export full database schema (tables, views, sequences, indexes), with
unique, primary, foreign key and check constraints.
- Export grants/privileges for users and groups.
- Export range/list partitions and sub partitions.
- Export a table selection (by specifying the table names).
- Export Oracle schema to a PostgreSQL 8.4+ schema.
- Export predefined functions, triggers, procedures, packages and
package bodies.
- Export full data or following a WHERE clause.
- Full support of Oracle BLOB object as PG BYTEA.
- Export Oracle views as PG tables.
- Export Oracle user defined types.
- Provide some basic automatic conversion of PLSQL code to PLPGSQL.
- Works on any platform.
- Export Oracle tables as foreign data wrapper tables.
- Export materialized view.
- Show a report of an Oracle database content.
- Migration cost assessment of an Oracle database.
- Migration difficulty level assessment of an Oracle database.
- Migration cost assessment of PL/SQL code from a file.
- Migration cost assessment of Oracle SQL queries stored in a file.
- Generate XML ktr files to be used with Penthalo Data Integrator (Kettle)
- Export Oracle locator and spatial geometries into PostGis.
- Export DBLINK as Oracle FDW.
- Export SYNONYMS as views.
- Export DIRECTORY as external table or directory for external_file extension.
- Full MySQL export just like Oracle database.
- Dispatch a list of SQL orders over multiple PostgreSQL connections
- Perform a diff between Oracle and PostgreSQL database for test purpose.
3.1.2、ora2pg 时允许指定的所有命令行参数
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 发送转换后的数据的速度。不会写入任何数据。
如果执行成功,ora2pg 返回 0;如果出现错误,返回 1 。如果某个子进程被中断,并且用户收到了警告信息:“WARNING: an error occurs during data export. Please check what’s happen.”,ora2pg 将会返回 2 。大多数情况下是内存溢出(OOM)的问题,可以先尝试减小 DATA_LIMIT 参数的值。
对于开发者而言,可以在 ora2pg Perl 脚本中添加自定义的选项;因为 ora2pg.conf 文件中的所有配置选项都会以小写形式传递给新建的 Ora2Pg 对象实例。参考 ora2pg 代码以添加自定义的选项。
3.2、安装Ora2Pg
GitHub:https://github.com/darold/ora2pg
文档:https://ora2pg.darold.net/documentation.html
下载:https://sourceforge.net/projects/ora2pg/
为使安装能够顺利通过,在安装 Ora2Pg 之前必须先确保系统已经安装了 Perl 模块以及 DBI、DBD::Oracle 模块。若需要直接导入到 PostgreSQL 则还需要安装 DBD::Pg 模块。
-- 在编译安装了PG的机器上安装ora2pg
-- 安装依赖包,perl版本5.10以上
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
perl -MCPAN -e \'install DBI\'
perl -MCPAN -e \'install DBD::Oracle\'
perl -MCPAN -e \'install DBD::Pg\'
-- =============安装“DBI”=============
perl -MCPAN -e \'install DBI\'
wget http://www.cpan.org/authors/id/T/TI/TIMB/DBI-1.643.tar.gz
tar -zxvf DBI-1.643.tar.gz
cd DBI-1.643
perl Makefile.PL
make && make install
-- =============安装“DBD::Oracle”=============
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
wget https://download.oracle.com/otn_software/linux/instantclient/211000/oracle-instantclient-jdbc-21.1.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/211000/oracle-instantclient-devel-21.1.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/211000/oracle-instantclient-sqlplus-21.1.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/211000/oracle-instantclient-basic-21.1.0.0.0-1.x86_64.rpm
docker cp oracle-instantclient-basic-21.1.0.0.0-1.x86_64.rpm lhrpg13:/soft/
docker cp oracle-instantclient-devel-21.1.0.0.0-1.x86_64.rpm lhrpg13:/soft/
docker cp oracle-instantclient-jdbc-21.1.0.0.0-1.x86_64.rpm lhrpg13:/soft/
docker cp oracle-instantclient-sqlplus-21.1.0.0.0-1.x86_64.rpm lhrpg13:/soft/
rpm -ivh *.rpm
cat >> /root/.bashrc << "EOF"
export ORACLE_HOME=/usr/lib/oracle/21/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
EOF
source /root/.bashrc
-- 在线安装
export ORACLE_HOME=/usr/lib/oracle/21/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
perl -MCPAN -e \'install DBD::Oracle\'
-- 离线编译安装
wget http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz
tar -zxvf DBD-Oracle-1.80.tar.gz
cd DBD-Oracle-1.80
perl Makefile.PL
make -j 8 && make install
-- =============安装“DBD::Pg”=============
-- /pg13/pg13/bin/pg_config
perl -MCPAN -e \'install DBD::Pg\'
wget http://www.cpan.org/authors/id/T/TU/TURNSTEP/DBD-Pg-3.14.2.tar.gz
export ORACLE_HOME=/usr/lib/oracle/21/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
tar -zxvf DBD-Pg-3.14.2.tar.gz
cd DBD-Pg-3.14.2
perl Makefile.PL # 输入/pg13/pg13/bin/pg_config
make -j 8 && make install
-- =============安装“ora2pg”=============
wget https://udomain.dl.sourceforge.net/project/ora2pg/21.1/ora2pg-21.1.tar.bz2
-- wget https://codeload.github.com/darold/ora2pg/tar.gz/refs/tags/v21.1
tar xjf ora2pg-21.1.tar.bz2
cd ora2pg-21.1/
perl Makefile.PL
make && make install
[root@lhrpg13 ~]# which ora2pg
/usr/local/bin/ora2pg
[root@lhrpg13 ~]# ora2pg --version
Ora2Pg v21.1
-- 检查所有软件是否已安装
cat > /root/check.pl <<"EOF"
#!/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);
}
exit;
EOF
[root@lhrpg13 ~]# perl /root/check.pl
DBD::Oracle -- 1.80
DBD::Pg -- 3.14.2
DBI -- 1.643
Ora2Pg -- 21.1
Perl -- 5.16.3
3.3、创建配置文件
配置参考: https://ora2pg.darold.net/documentation.html#CONFIGURATION
首先从示例文件复制一份,然后根据实际情况更改配置文件相关参数:
cp /etc/ora2pg/ora2pg.conf.dist /etc/ora2pg/ora2pg.conf
cat /etc/ora2pg/ora2pg.conf.dist | grep -v ^# | grep -v ^$ > /etc/ora2pg/ora2pg.conf
[root@lhrpg13 ora2pg]# cat /etc/ora2pg/ora2pg.conf.dist | grep -v ^# | grep -v ^$ | wc -l
113
大约110多个参数。
3.3.1、导出表结构的配置文件
-- 表结构、约束(主外键等)、索引等
cat > /etc/ora2pg/ora2pg_table_ddl.conf <<"EOF"
ORACLE_HOME /usr/lib/oracle/21/client64
ORACLE_DSN dbi:Oracle:host=192.168.68.66;sid=lhrsdb;port=1521
#ORACLE_DSN dbi:Oracle:tns_ora19c
ORACLE_USER system
ORACLE_PWD lhr
SCHEMA SOE
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 13
EOF
3.3.2、导出其它对象的配置文件
cat > /etc/ora2pg/ora2pg_other_ddl.conf <<"EOF"
ORACLE_HOME /usr/lib/oracle/21/client64
ORACLE_DSN dbi:Oracle:host=192.168.68.66;sid=lhrsdb;port=1521
#ORACLE_DSN dbi:Oracle:tns_ora19c
ORACLE_USER system
ORACLE_PWD lhr
SCHEMA SOE
EXPORT_SCHEMA 1
CREATE_SCHEMA 1
TYPE PACKAGE,PROCEDURE,TRIGGER,FUNCTION,VIEW,GRANT,SEQUENCE,MVIEW,TYPE,SYNONYM
PG_NUMERIC_TYPE 0
PG_INTEGER_TYPE 1
DEFAULT_NUMERIC float
SKIP fkeys
#SKIP keys pkeys ukeys indexes checks
NLS_LANG AMERICAN_AMERICA.UTF8
OUTPUT_DIR /tmp
OUTPUT ora2pg_other_ddl.sql
PG_VERSION 13
EOF
3.3.3、导出表数据的配置文件
cat > /etc/ora2pg/ora2pg_table_data.conf <<"EOF"
ORACLE_HOME /usr/lib/oracle/21/client64
ORACLE_DSN dbi:Oracle:host=192.168.68.66;sid=lhrsdb;port=1521
#ORACLE_DSN dbi:Oracle:tns_ora19c
ORACLE_USER system
ORACLE_PWD lhr
SCHEMA SOE
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=lhrdb;host=192.168.68.67;port=5432
PG_USER postgres
PG_PWD lhr
PG_SCHEMA soe
PG_VERSION 13
EOF
以上是关于#导入MD文档图片#使用ora2pg迁移Oracle19c到PG13并使用OGG配置实时同步的主要内容,如果未能解决你的问题,请参考以下文章