使用ogg实现oracle到postgresql表的实时同步
参考:https://docs.oracle.com/goldengate/c1221/gg-winux/index.html
https://blog.51cto.com/hbxztc/1880714
环境:oracle 11.2.0.4+centos6.9,postgresql10.6+centos6.9
1.下载OGG
下载网址:https://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
下载安装包如下:122022_ggs_Linux_x64_PostgreSQL_64bit.zip,V861007-01.zip
2.源端(oracle)ogg安装
$ cd /data/
$ mkdir ogg
$ cd /data/software
$ unzip V861007-01.Zip
$ cd fbo_ggs_Linux_x64_shiphome/Disk1/
$ export DISPLAY=xxx.xxx.xxx.xxx:0.0
$ ./runInstaller
执行命令后,会出现图形化界面

选择安装对应版本oracle的ogg

指定ogg安装路径,配置mgr参数
报错:

只是因为我已经安装过一次了,因此上一次OGG安装目录中已经存在于OGG的安装清单(inventory.xml)里面,解决方法如下:
# find / -name inventory.xml
# su - oracle
$ vi /oracle/oraInventory/ContentsXML/inventory.xml
#删除如下一行即可
<HOME NAME="OraHome1" LOC="/data/ogg" TYPE="O" IDX="2"/>
删除后,点击cancel取消,再次进入图形化界面即可。
3.源端OGG配置
打开归档
alter database archivelog;
打开允许ogg复制,打开附件日志(UPDATE更新redo会记录所有的栏位,会增加redo量)
alter system set enable_goldengate_replication=true;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
--全库打开附件日志,后续不需要对单独的表增加附件日志
--也可以用如下方法,打开最小附加日志,之后对需要OGG的表单独增加附加日志
alter database add supplemental log data;
add trandata user.table --这一句后续在OGG中执行
修改环境变量
$ vi .bash_Profile
export GGATE-/data/ogg
export PATH=$PATH:$GGATE
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GGATE
新增ogg用户并赋权
create tablespace ggs_data datafile '/data/db/ggs_data01.dbf' size 1g;
create user ggs_owner identified by xxxxxx default tablespace ggs_data temporary tablespace temp quota unlimited on ggs_data;
grant connect, resource TO ggs_owner;
GRANT select any dictionary, select any table TO ggs_owner;
grant flashback any table TO ggs_owner;
grant execute on dbms_flashback TO ggs_owner;
新增ogg抽取进程
edit param mgr
add extract ext_demo,tranlog,begin now
edit param ext_demo
--------------------------------------------------------------------------
extract ext_demo
setenv (NLS_LANG="TRADITIONAL CHINESE_TAIWAN.AL32UTF8")
setenv (ORACLE_SID=db)
userid ggs_owner,password xxxxxx
exttrail /data/ogg/dirdat/ed
table USER01.TEST01;
--------------------------------------------------------------------------
add exttrail /data/ogg/dirdat/ed,extract ext_demo
新增ogg传送进程
add extract pup_demo exttrailsource /data/ogg/dirdat/ed
edit param pup_demo
---------------------------------------------------------
extract pup_demo
setenv (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_SID=db)
rmthost xxx.xxx.xxx.xxx,mgrport 7809,compress
rmttrail /data/ogg/dirdat/rd
table USER01.TEST01;
---------------------------------------------------------
add rmttrail /data/ogg/dirdat/rd,extract pup_demo
生成源端定义文件(oracle和pg的数据类型不同,感觉是为了类型转换,没有测试如果不使用会如何)
vi ./dirprm/defgen.prm
DEFSFILE ./dirdef/defgen_postgres.prm;
userid ggs_owner,password xxxxxx;
table USER01.TEST01;
defgen paramfile ./dirprm/defgen.prm
4.postgresql端OGG安装与配置(以下的所有$代表postgres用户)
解压安装
$ cd /data/software/
$ unzip 122022_ggs_Linux_x64_PostgreSQL_64bit.zip
$ cd /data/
$ mkdir ogg
$ mv software/ggs_Linux_x64_PostgreSQL_64bit.tar ogg/
$ tar vxf ggs_Linux_x64_PostgreSQL_64bit.tar
创建子目录
$ cd /data/ogg
$ ggsci
create subdirs
创建DSN(database source name)
ogg for pg使用的是ODBC来连接数据库,因此需要指明ODBC dirver
[ODBC Data Sources]:定义的数据库别名,后面的【postgre】部分与之对应
IANAAppCodePage:字符集,应该与postgresql数据库的字符集对应,106代表的是UTF-8
$ cd /data/ogg
$ vi odbc.ini
----------------------------------------------------
[ODBC Data Sources]
postgre=DataDirect 10.6 PostgreSQL Wire Protocol [ODBC]
IANAAppCodePage=106
InstallDir=/data/ogg [postgre]
Driver=/data/ogg/lib/GGpsql25.so
Description=DataDirect 10.6 PostgreSQL Wire Protocol
Database=pgdb
HostName=xxx.xxx.xxx.xxx
PortNumber=5432
LogonID=ggs_owner
Password=xxxxxx
--------------------------------------------------
修改postgres环境变量
重点是动态连接库和ODBCINI的环境变量
export GGATE=/data/ogg
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GGATE/lib
export PATH=$PATH:$PGHOME/bin/:$GGATE
export ODBCINI=$GGATE/odbc.ini
进入pg数据库创建测试用户(其实应该在创建odbc.ini之前执行)
$ psql
create database oggtest;
create user ggs_owner superuser password 'xxxxxx';
\c oggtest ggs_owner
create schema ggs_owner;
create table test01(id int primary key,name varchar(10),age int);
修改mgr参数
$ cd $GGATE
$ ggsci
edit param mgr
---------------------
PORT 7089
---------------------
新增checkpoint
需要注意,sourcedb必须与odbc.ini中配置的ODBC Data source相同,这样ogg才可以找到要登录的数据库(加入一个主机上有好几个数据库),因此odbc.ini可以用来区分复制进程所属数据库
# ogg中执行如下
dblogin sourcedb postgre userid ggs_owner
add checkpointtable ggs_owner.checkpointtab
新增复制进程
经测试,ODBCINI无需写入参数环境变量中,因为在postgres环境变量中已设定
$ cd $GGATE
$ mkdir dircard
edit param rep_demo
----------------------------------------------------------------
replicat rep_demo
SOURCEDEFS ./dirdef/defgen_postgres.prm
SETENV(PGCLIENTENCODING = "UTF8" )
SETENV(ODBCINI="/ogg/odbc.ini" )
SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
TARGETDB postgre,userid ggs_owner,password xxxxxx
DISCARDFILE ./discard/rep_demo.txt
map user01.test01 ,target ggs_owner.test01;
-----------------------------------------------------------
add replicat rep_demo,exttrail /data/ogg/dirdat/rd,begin now,checkpointtable ggs_owner.checkpointtab
将定义文件传送过来
scp oracle@xxx.xxx.xxx.xxx:/data/ogg/dirdef/defgen_postgres.prm /data/ogg/dirdef
开启进程并测试
使用ogg实现oracle到postgresql表的实时同步的更多相关文章
- 配置ogg从Oracle到PostgreSQL的同步复制json数据
标签:goldengate postgresql oracle json 测试环境说明 Oracle:Windows 8.1 + Oracle 12.2.0.1.0 + GoldenGate 12.3 ...
- OGG For Oracle To PostgreSQL
本文档描述OGG(Oracle goldengate)为Oracle同步到PostgreSQL数据库配置.在目前去“IOE”潮流.PostgreSQL确实是Oracle最好的替代品之一. 实验环境如下 ...
- ogg实现oracle到sql server 2005的同步
一.源端(oracle)配置1.创建同步测试表create table gg_user.t01(name varchar(20) primary key);create table gg_user.t ...
- 基于OGG的Oracle与Hadoop集群准实时同步介绍
版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/220 来源:腾云阁 https://www.qclou ...
- Sql获取表所有列名字段——select * 替换写法,Sqlserver、Oracle、PostgreSQL、Mysql
实际开发中经常用到select * from table,往往需要知道具体的字段,这个时候再去数据库中翻或者查看数据字典比较麻烦.为了方便,自己特意写了一个小函数f_selectall,针对SqlSe ...
- oracle ogg 单实例双向-新增表,修改表结构(oracle-oracle
--新增inset测试--dept 表结构orcl,ogg都存在,数据相同(但是rep1配置文件没有添加) SCOTT@ orcl ,'hongquan','BBA'); row created. S ...
- MySQL,Oracle,PostgreSQL 数据库web维护客户端管理工具
TreeDMS数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能包 ...
- MySQL,Oracle,PostgreSQL通过web方式管理维护, 提高开发及运维效率
在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具 PL/SQL Developer, MSSQL的客户端工具查询 ...
- MySQL,Oracle,PostgreSQL,mongoDB,Hive, SAP HANA 数据库web维护客户端管理工具
TreeDMS数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL,mongoDB ,Hive, SA ...
随机推荐
- Linux下MySQL数据库的备份与恢复
Linux下MySQL数据库的备份与恢复 作者:Grey 原文地址: Github 语雀 博客园 基于版本 MySQL5.7 Deepin Linux 15.11 xtrabackup-2.4.18 ...
- vue插值 v-cloak
vue插值 v-cloak 使用VUE时,页面刷新时会出现闪动的现象(即在插值时会显示两侧的 {}) 先定义一个VUE 通过选择器在style中定义v-cloak的display值为none 再在元素 ...
- html 02-浏览器的介绍
02-浏览器的介绍 #常见的浏览器 浏览器是网页运行的平台,常见的浏览器有谷歌(Chrome).Safari.火狐(Firefox).IE.Edge.Opera等.如下图所示: 我们重点需要学习的是 ...
- react第三单元(react组件的生命周期)
第三单元(react组件的生命周期) #课程目标 灵活掌握react组件的生命周期以及组件的活动过程. 能够灵活使用react的生命周期 #知识点 react的类组件的生命周期分为三个阶段 实例期 存 ...
- 多任务-python实现-多进程文件拷贝器(2.1.10)
@ 目录 1.需求 2.代码 1.需求 当去拷贝一个文件夹的所有文件时,使用多任务拷贝 假如一个文件使用一个进程处理 10000个文件就额可以使用最大值为10的进程池处理(当然max取值看具体主机性能 ...
- 一个shell程序
使用vi写一个shell程序 touch cdlog echo "cd /app/mycrm/log" >> cdlog chmod +x cdlog 执行: ...
- 记一次真实的webpack优化经历
前言 公司目前现有的一款产品是使用vue v2.0框架实现的,配套的打包工具为webpack v3.0.整个项目大概有80多个vue文件,也算不上什么大型项目. 只不过每次头疼的就是打包所耗费的时间平 ...
- [.NET] - EventLog.EntryWritten Event
刚看到在MSND论坛上有人问一个EventLog.EntryWritten Event相关的问题,说是在2015触发了一个2013年的EventWritten的事件,比较好奇,然后查看了下这个类: h ...
- MySQL如何计算统计redo log大小
在MySQL中如何计算.统计重做日志(redo log)的生成情况呢? 例如10分钟内,生成了多少M的redo log呢?30分钟内又生成了多少M的redo log......MySQL没有像Or ...
- Argo CD使用指南:如何构建一套完整的GitOps?
随着Kubernetes继续将自己确立为容器编排的行业标准,为你的应用和工具找到使用声明式模型的有效方法是成功的关键.在这篇文章中,我们将在AWS中建立一个K3s Kubernetes集群,然后使用A ...