一、环境描述
环境描述
|
IP |
系统 |
PG 版本 |
OGG 版本 | |
|
源端 |
|
CentOS 7.5 |
13.4 |
21.3 |
|
目标端 |
|
CentOS 7.5 |
10 |
21.3 |
Oracle GoldenGate for PostgreSQL 仅支持 DML 操作(插入 / 更新 / 删除)。
不支持从物化视图捕获。
二、检查生产库
不支持的数据类型
如果在 Extract 参数文件中包含包含不受支持的数据类型的表,PostgreSQL 捕获将异常终止。
Arrays 、box 、circle 、composite types 、Enum 、JSON 、Jsonb 、line 、lseq 、object identifiers 、OID 、pg_lsn 、pseduo types 、Point 、path 、polygon 、range types 、tsvector 、tsquery 、UDT
select c.relname, ATTNAME, ATTTYPID, TYPNAME from pg_attribute a, pg_class c, pg_namespace n, pg_type t where a.attrelid = c.oid and a.attnum > 0 and c.relnamespace = n.oid and nspname = 'odc' and a.atttypid = t.oid and typname in ('arrays','box','circle','composite types','enum','json','jsonb','line','lseq','object identifiers','oid','pg_lsn','pseduo types','point','path','polygon','range types','tsvector','tsquery','udt') and c.relkind = 'r';
relname | attname | atttypid | typname
---------+---------+----------+---------
ttt | id | 603 | box
ttt | id2 | 603 | box
ttt | id3 | 26 | oid
ttt | id4 | 26 | oid
查询物化视图并排除
oggtestdb=# \dm
创建pg 用户并赋权(源端/ 目标端)
postgres=# create user odc with password 'odc';
CREATE ROLE
postgres=# ALTER USER odc WITH Replication;
postgres=# alter user odc superuser;
postgres=# \c oggtestdb odc
You are now connected to database "oggtestdb" as user "odc".
postgres=# create schema odc;
配置数据库连接(源端/ 目标端)
Vi /odc/ODBC.ini
[ODBC Data Sources]
oggtestdb=DataDirect 13 PostgreSQL Wire Protocol
[ODBC]
IANAAppCodePage=106
InstallDir=/odc/
[oggtestdb]
Driver=/odc/lib/GGpsql25.so
Database=oggtestdb
Hostname=localhost
PortNumber=5433
LogonID=odc
Password=odc
TransactionErrorBehavior=2
oggtestdb=DataDirect 13 PostgreSQL Wire Protocol
表示pg 数据库的版本以及别名,与[oggtestdb] 相对应
IANAAppCodePage=106
106 表示字符集UTF8
InstallDir
表示ogg 的安装目录下
Driver=/odc/lib/GGpsql25.so
表示driver 插件所在的位置,默认都在odc/lib 目录下
Database ,Server ,PortNumber ,LogonID ,Password
表示连接的数据库名,服务器名,pg 端口,连接数据库oggtestdb 的用户和密码
TransactionErrorBehavior=2
表示设置为 2 才能适当地处理数据库错误情况
修改数据库参数文件(源端)
vi postgresql.conf
wal_level = logical #minimal, replica, or logical
max_replication_slots = 10 #max number of replication slots
max_wal_sender = 10 #maximum number of wal sender processes
wal_receiver_status_interval #optional, keep the system default
wal_sender_timeout #optional, keep the system default
track_commit_timestamp #optional, keep the system default
修改参数文件后需要重启数据库
pg_ctl restart -D /postgres/product/data2
访问libpq 库(源端/ 目标端)
Extract 使用 PostgreSQL 本机 API 进行流式复制。PostgreSQL 本机 API 在库中实现,该库 libpq 位于 PostgreSQL 数据库安装目录中。这个库需要在中指定, LD_LIBRARY_PATH 以便 Extract 可以访问它。您需要为此配置设置以下路径:
export PATH=/postgres/app/pg13/bin:$PATH:/odc
export LD_LIBRARY_PATH=/odc:/postgres/app/pg13/lib/:/odc/lib
export ODBCINI=/odc/odbc.ini
三、源端安装软件
安装ogg
利用postgres 用户,创建ogg 目录,上传并解压介质
[root@pgstd ~]# mkdir /odc
[postgres@pgstd /]$ chown postgres:postgres /odc
[postgres@pgstd /odc]$ unzip 21.3_pg_linux.zip
安装目录
[postgres@pgstd odc]$ ./ggsci
GGSCI (pgstd) 1> create subdirs
注册挖掘进程
ggsci> DBLOGIN SOURCEDB oggtestdb
ggsci> Register Extract pg_ext
ps :在注册之前不要添加任何挖掘进程
启用补充日志
PostgreSQL 事务日志默认在数据库级别启用,但它记录每个表的事务日志的默认级别,这是低级。Oracle GoldenGate PostgreSQL Extract 需要增强日志记录才能在目标上构建 DML 操作。
ggsci> DBLOGIN SOURCEDB oggtestdb
ggsci> ADD TRANDATA owner.table
配置mgr
GGSCI (pgstd) 1> edit param mgr
port 7809
DYNAMICPORTLIST 7800-7810
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 24
autorestart extract * retries 10 waitminutes 10
启动mgr
GGSCI (pgstd) 1> start mgr
配置挖掘进程
ggsci> add extract pg_ext tranlog begin now
ggsci> add exttrail ./dirdat/pg extract pg_ext
ggsci> edit param pg_ext
extract pg_ext
setenv (ODBCINI="/odc/odbc.ini")
sourcedb oggtestdb
exttrail ./dirdat/pg
FETCHOPTIONS FETCHPKUPDATECOLS
dynamicresolution
table odc.*;
配置传输进程
ggsci>add extract pg_dmp EXTTRAILSOURCE ./dirdat/pg
ggsci>ADD RMTTRAIL ./dirdat/pg, EXTRACT pg_dmp
GGSCI (pgstd) 2> edit param pg_dmp
extract pg_dmp
setenv (ODBCINI="/odc/odbc.ini")
sourcedb oggtestdb
rmthost 192.168.239.31, mgrport 7809
rmttrail ./dirdat/pg
passthru
table odc.*;
table public.*;
四、目标端安装软件
用户应在目标上禁用触发器和约束(如删除级联)。Oracle GoldenGate 不支持触 发器和约束(级联更新/ 删除)。
安装ogg
利用postgres 用户,创建ogg 目录,上传并解压介质
[root@pgstd ~]# mkdir /odc
[postgres@pgstd /]$ chown postgres:postgres /odc
[postgres@pgstd /odc]$ unzip 21.3_pg_linux.zip
安装目录
[postgres@pgstd odc]$ ./ggsci
GGSCI (pgstd) 1> create subdirs
配置mgr
GGSCI (pgstd) 1> edit param mgr
port 7809
DYNAMICPORTLIST 7800-7810
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 24
autorestart replicat * retries 10 waitminutes 10
启动mgr
GGSCI (pgstd) 1> start mgr
创建checkpoint 表
ggsci> DBLOGIN SOURCEDB target
GGSCI (pgstd) 2> add checkpointtable odc.checkpointtab
Successfully created checkpoint table odc.checkpointtab.
创建应用进程
ggsci> DBLOGIN SOURCEDB target
ggsci>add replicat pg_rep exttrail ./dirdat/pg
ggsci>edit param pg_rep
replicat pg_rep
--SETENV(PGCLIENTENCODING="UTF8")
SETENV(ODBCINI="/odc/odbc2.ini")
targetdb target
discardfile ./dirrpt/pg.rpt, append
map odc.* target odc.*;
map public.* target public.*;
五、初始化数据库
由于目前未找到根据时间点来起应用进程的方法,只能利用ogg 自带的初始化进程。
源端设置
ggsci> ADD EXTRACT test1, SOURCEISTABLE
ggsci> EDIT PARAMS test1
EXTRACT TEST1
setenv (ODBCINI="/odc/odbc.ini")
sourcedb oggtestdb
rmthost 192.168.239.31, mgrport 7809
RMTTASK REPLICAT, GROUP REST1
table odc.*;
目标端设置
ggsci> ADD REPLICAT rest1, SPECIALRUN
ggsci> EDIT PARAMS rest1
REPLICAT REST1
setenv (ODBCINI="/odc/odbc.ini")
targetdb oggtestdb
--SOURCEDEFS ./dirdef/test.def
DISCARDFILE ./dirrpt/REST1.dsc, PURGE
map odc.* target odc.*;
mgr 配置中增加参数
GGSCI (pgstd) 34> view param mgr
ACCESSRULE,prog *,IPADDR 192.168.*.*, ALLOW
启动源端TEST1 ,目标端不需要启动
GGSCI (pgstd) 35> start test1
注意:
挖掘进程需要在启动初始化之后才能开启,若在之前开启会造成数据重复的现象。
