胸怀万里世界, 放眼无限未来。这篇文章主要讲述#导入MD文档图片#使用ora2pg迁移Oracle19c到PG13并使用OGG配置实时同步相关的知识,希望能为你提供帮助。
[toc]
文章图片
一、项目目标1、使用ora2pg迁移Oracle 19.3数据到PG13.2
- 使用swingbench压测生成oracle数据
- 部署ora2pg工具,实现Oracle数据迁移到PG数据库
- 部署OGG 19.1,配置实时同步
- 配置OGG director的监控告警功能
- 用swingbench压测生成批量事务,测试OGG实时同步功能
文章图片
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软件 |
-- 创建本次的网络
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 lhrora19clhrpg13-- 进入主机
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.jarexport PATH=/usr/local/swingbench/bin:$PATHEOFsource ~/.bash_profile
2.3.2、使用swingbench生成数据
-- 启动数据库和监听
. oraenv
lhrsdblsnrctl startsqlplus / 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_NAMENUM_ROWS
-------------------- ----------
CUSTOMERS1000
ADDRESSES1500
CARD_DETAILS1500
WAREHOUSES1000
ORDER_ITEMS7168
ORDERS1430
INVENTORIES898934
PRODUCT_INFORMATION1000
LOGON2383
PRODUCT_DESCRIPTIONS1000
ORDERENTRY_METADATA011 rows selected.SYS@lhrsdb>
select object_type,count(*) from dba_objects where owner=\'SOE\' group by object_type;
OBJECT_TYPECOUNT(*)
---------------------------------------------- ----------
INDEX27
PACKAGE BODY1
PACKAGE1
SEQUENCE5
TABLE11
VIEW26 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 areport 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官网:https://ora2pg.darold.net/
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-DBIperl-CPAN bzip2\\
perl-ExtUtils-eBuilder perl-ExtUtils-MakeMaker perl-Time-HiRes perl-testsperf cpanperl -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.rpmdocker cp oracle-instantclient-basic-21.1.0.0.0-1.x86_64.rpmlhrpg13:/soft/
docker cp oracle-instantclient-devel-21.1.0.0.0-1.x86_64.rpmlhrpg13:/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.rpmlhrpg13:/soft/
rpm -ivh *.rpmcat >
>
/root/.bashrc <
<
"EOF"
export ORACLE_HOME=/usr/lib/oracle/21/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
EOFsource/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.confcat /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
【#导入MD文档图片#使用ora2pg迁移Oracle19c到PG13并使用OGG配置实时同步】大约110多个参数。
3.3.1、导出表结构的配置文件
-- 表结构、约束(主外键等)、索引等
cat >
/etc/ora2pg/ora2pg_table_ddl.conf <
<
"EOF"
ORACLE_HOME/usr/lib/oracle/21/client64
ORACLE_DSNdbi:Oracle:host=192.168.68.66;
sid=lhrsdb;
port=1521
#ORACLE_DSNdbi:Oracle:tns_ora19c
ORACLE_USERsystem
ORACLE_PWDlhr
SCHEMASOE
EXPORT_SCHEMA1
CREATE_SCHEMA1
TYPETABLE
PG_NUMERIC_TYPE0
PG_INTEGER_TYPE1
DEFAULT_NUMERICfloat
SKIPfkeys checks
#SKIPkeys pkeys ukeys indexes checks
NLS_LANGAMERICAN_AMERICA.UTF8
OUTPUT_DIR/tmp
OUTPUTora2pg_table_ddl.sqlPG_VERSION13EOF
3.3.2、导出其它对象的配置文件
cat >
/etc/ora2pg/ora2pg_other_ddl.conf <
<
"EOF"
ORACLE_HOME/usr/lib/oracle/21/client64
ORACLE_DSNdbi:Oracle:host=192.168.68.66;
sid=lhrsdb;
port=1521
#ORACLE_DSNdbi:Oracle:tns_ora19c
ORACLE_USERsystem
ORACLE_PWDlhr
SCHEMASOE
EXPORT_SCHEMA1
CREATE_SCHEMA1
TYPEPACKAGE,PROCEDURE,TRIGGER,FUNCTION,VIEW,GRANT,SEQUENCE,MVIEW,TYPE,SYNONYM
PG_NUMERIC_TYPE0
PG_INTEGER_TYPE1
DEFAULT_NUMERICfloat
SKIPfkeys
#SKIPkeys pkeys ukeys indexes checks
NLS_LANGAMERICAN_AMERICA.UTF8
OUTPUT_DIR/tmp
OUTPUTora2pg_other_ddl.sqlPG_VERSION13EOF
3.3.3、导出表数据的配置文件
cat >
/etc/ora2pg/ora2pg_table_data.conf <
<
"EOF"
ORACLE_HOME/usr/lib/oracle/21/client64
ORACLE_DSNdbi:Oracle:host=192.168.68.66;
sid=lhrsdb;
port=1521
#ORACLE_DSNdbi:Oracle:tns_ora19c
ORACLE_USERsystem
ORACLE_PWDlhr
SCHEMASOE
TYPECOPY
PG_NUMERIC_TYPE0
PG_INTEGER_TYPE1
DEFAULT_NUMERICfloat
SKIPfkeys checks
#SKIPfkeys pkeys ukeys indexes checks
NLS_LANGAMERICAN_AMERICA.UTF8
OUTPUT_DIR/tmp
OUTPUTora2pg_table_data.sqlPG_DSNdbi:Pg:dbname=lhrdb;
host=192.168.68.67;
port=5432
PG_USERpostgres
PG_PWDlhr
PG_SCHEMAsoe
PG_VERSION13EOF
推荐阅读
- Redis哨兵(Sentinel)集群部署
- Linux安装Redis
- 面向大规模商业系统的数据库设计和实践
- 深入剖析 MySQL 自增锁
- HBase写入流程
- 缓存与数据库的双写一致性
- 「免费开源」基于Vue和Quasar前端SPA项目crudapi后台管理系统实战之数据库逆向
- MySQL 页完全指南——浅入深出页的原理
- Win8系统运用注册表关闭帮助提示办法