OGG软件介质:Oracle GoldenGate V11.2.1.0.1 for Oracle 10g on Linux x86-64 84.7 MB
利用OGG+ora2pg迁移
源 库:centos 7 单节点Oracle 19c
目标库:centos 7 单节点LightDB22.1
源和目标两台服务器都需要创建ogg的安装目录 ggs_Linux_x64_PostgreSQL_64bit.tar
V983658-01.zip
在oracle环境变量配置文件中增加以下内容:
export EDITOR=vi export GGATE=/home/oracle/ogg19c export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/home/oracle export ORACLE_SID=test export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GGATE:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:$GGATE:$LD_LIBRARY_PATH alias sqlplus='rlwrap sqlplus' alias ggsci='rlwrap ggsci'
create tablespace ogg datafile '/data2/oradata/TEST/ogg01.dbf' size 50M autoextend on; create user ogg identified by ogg default tablespace ogg; grant connect, resource TO ogg; grant select any dictionary, select any table TO ogg; grant flashback any table TO ogg; grant execute on dbms_flashback TO ogg; grant ALTER ANY TABLE to ogg; grant insert any table to ogg; grant update any table to ogg; grant delete any table to ogg; grant create table,create sequence to ogg; grant execute on utl_file to ogg;
如果源端不开启归档,需添加多组日志。
alter database force logging; alter database add SUPPLEMENTAL log data; SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database; NAME OPEN_MODE FORCE_LOGGING SUPPLEME --------- -------------------- ------------------- -------- ORCL READ WRITE YES YES
在配置OGG进程之前,首先需要创建OGG的管理目录,执行以下操作:
ggsci GGSCI (hs-10-20-30-199) 2> create subdirs ##19c会默认创建,无需执行
只有提交事务的record才会被捕获。抽取、投递、应用日志的单位是record,而不是trail文件。
mgr进程是这些进程的管理和守护进程,目标端的mgr进程还与源端进行通信
源端: edit params mgr PORT 7809 PURGEOLDEXTRACTS /home/oracle/ogg19c/dirdat/*,USECHECKPOINTS, minkeepdays 7 --不清除trail文件 AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5, RESETMINUTES 60 GGSCI (hs-10-20-30-199) 6> start mgr GGSCI (hs-10-20-30-199) 7> info all
抽取进程:负责抓取需要传输的数据(添加进程的时候为抽取点,而不是启动进程的时候)
从21开始OGG需要配置tns
Goldengate DBLOGIN Issue OCI Error ORA (status = 12545-ORA-12545 (Doc ID 2847434.1)
TEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.30.199)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = test) ) )
配置extract进程
edit params ext_1 EXTRACT ext_1 SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8) SETENV (ORACLE_HOME=/home/oracle) SETENV (ORACLE_SID=test) USERID ogg, PASSWORD ogg DISCARDFILE /home/oracle/ogg19c/dirrpt/ext_1.dsc,APPEND,MEGABYTES 1024 EXTTRAIL /home/oracle/ogg19c/dirdat/aa TABLE ta6_pub11*; # 创建 extract 组; ADD EXTRACT ext_1, TRANLOG, BEGIN NOW # 创建本地 trail 文件 ADD EXTTRAIL /home/oracle/ogg19c/dirdat/aa, EXTRACT ext_1, MEGABYTES 5 # 启动extract进程 start extract ext_1 GGSCI (hs-10-20-30-199) 16> info all Program Status Group Lag at Chkpt Time Since Chkpt MANAGER RUNNING EXTRACT RUNNING EXT_1 00:00:15 00:00:02
投递进程:
EDIT PARAMS pump_1 # 复制如下内容至文件内,酌情修改参数保存 EXTRACT pump_1 SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8) PASSTHRU RMTHOST 10.20.30.199, MGRPORT 7810 RMTTRAIL /home/lightdb/ogg/dirdat/pa TABLE ta6_pub11.*; # 用 add extract 指定本地 trail 文件 ADD EXTRACT pump_1, EXTTRAILSOURCE /home/oracle/ogg19c/dirdat/aa # 用 add rmttrail 指定远程 trail 文件 ADD RMTTRAIL /home/lightdb/ogg/dirdat/pa, EXTRACT pump_1, MEGABYTES 5 # 启动Pump 进程 START EXTRACT pump_1
在异构的同步复制;需要生成define文件。用于数据兼容不同数据库。
# 编辑参数文件 GGSCI (oracle221) 16> edit params defgen # 参数文件内容 defsfile /home/oracle/ogg19c/dirdef/defgen.def userid ogg, password ogg TABLE ta6_pub11.*; # 退出ggsci命令 GGSCI (oracle221) 17> exit # root用户下生成文件 defgen paramfile /home/oracle/ogg19c/dirprm/defgen.prm [oracle@hs-10-20-30-199 ogg19c]$ defgen paramfile /home/oracle/ogg19c/dirprm/defgen.prm *********************************************************************** Oracle GoldenGate Table Definition Generator for Oracle Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054 Linux, x64, 64bit (optimized), Oracle 19c on Oct 17 2019 15:32:20 Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved. Starting at 2022-06-30 10:31:23 *********************************************************************** Operating System Version: Linux Version #1 SMP Wed Apr 28 21:49:45 UTC 2021, Release 3.10.0-1160.25.1.el7.x86_64 Node: hs-10-20-30-199 Machine: x86_64 soft limit hard limit Address Space Size : unlimited unlimited Heap Size : unlimited unlimited File Size : unlimited unlimited CPU Time : unlimited unlimited Process id: 106662 *********************************************************************** ** Running with the following parameters ** *********************************************************************** defsfile /home/oracle/ogg19c/dirdef/defgen.def userid ogg, password *** TABLE ta6_pub11.*; Expanding wildcard table specification ta6_pub11.*: Retrieving definition for ta6_pub11.BONUS. 2022-06-30 10:31:24 WARNING OGG-06439 No unique key is defined for table BONUS. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key. Retrieving definition for ta6_pub11.DEPARTMENTS. 2022-06-30 10:31:24 WARNING OGG-06439 No unique key is defined for table DEPARTMENTS. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key. Retrieving definition for ta6_pub11.DEPT. Retrieving definition for ta6_pub11.EMP. Retrieving definition for ta6_pub11.ORDERS. Retrieving definition for ta6_pub11.SALGRADE. 2022-06-30 10:31:25 WARNING OGG-06439 No unique key is defined for table SALGRADE. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key. Retrieving definition for ta6_pub11.USERS. Definitions generated for 7 tables in /home/oracle/ogg19c/dirdef/defgen.def. # 传送到目标端 scp /home/oracle/ogg19c/dirdef/defgen.def lightdb@10.20.30.199:/home/lightdb/ogg/dirdef
配置环境变量
# User specific aliases and functions
export LD_LIBRARY_PATH=$PGHOME/lib:$PGHOME/lib/ltext:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH
export LIGHTDB_PORT=5435
export PGUSER=lightdb
export LIGHTDB_HOST=10.20.30.199
export PGHOME=/data1/customer_do_not_delete/ta/lightdb-x/13.3-22.1/
export PGDATA=/data1/customer_do_not_delete/ta/lightdb-x/13.3-22.1/data/defaultCluster
export PATH=${PGHOME}/bin:${PGHOME}/tools/bin:${PGHOME}/tools/sbin:${PATH}
export LD_LIBRARY_PATH=${PGHOME}/lib:${PGHOME}/lib/ltext:${PGHOME}/tools/lib64:${LD_LIBRARY_PATH}
export GGATE=/home/oracle/ogg
export PATH=$PGHOME/bin:$HOME/bin:$GGATE:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$GGATE/lib:$LD_LIBRARY_PATH
export ODBCINI=$GGATE/odbc.ini
alias ggsci='rlwrap ggsci'
lightdb@postgres=# create database ogg; CREATE DATABASE lightdb@postgres=# create user ogg superuser password 'ogg'; CREATE ROLE lightdb@postgres=# lightdb@postgres=# lightdb@postgres=# lightdb@postgres=# \c ogg ogg You are now connected to database "ogg" as user "ogg". ogg@ogg=# create schema ogg; CREATE SCHEMA
ogg for postgresql使用的是ODBC来连接数据库,因此需要指明ODBC dirver
vi /home/lightdb/ogg/odbc.ini [ODBC Data Sources] //定义的数据库别名,后面的【postgre】部分与之对应 GG_Postgres=DataDirect 22.1 LightDB Wire Protocol [ODBC] IANAAppCodePage=106 //字符集,应该与数据库的字符集对应,106代表UTF-8 InstallDir=/home/lightdb/ogg //ogg安装目录 [GG_Postgres] Driver=/home/lightdb/ogg/lib/GGpsql25.so //OGG安装包里有内置ODBC驱动 Description=DataDirect LightDB Wire Protocol //介绍 Database=ta6_pub11 //表空间 HostName=10.20.30.199 //一般是本地地址 PortNumber=5435 //端口 LogonID=ta6_pub11 //数据库用户名 Password=ta6_pub11 //数据库密码
cd /home/lightdb/ogg ggsci GGSCI (hs-10-20-30-199) 2> create subdirs Creating subdirectories under current directory /home/lightdb/ogg Parameter file /home/lightdb/ogg/dirprm: created. Report file /home/lightdb/ogg/dirrpt: created. Checkpoint file /home/lightdb/ogg/dirchk: created. Process status files /home/lightdb/ogg/dirpcs: created. SQL script files /home/lightdb/ogg/dirsql: created. Database definitions files /home/lightdb/ogg/dirdef: created. Extract data files /home/lightdb/ogg/dirdat: created. Temporary files /home/lightdb/ogg/dirtmp: created. Credential store files /home/lightdb/ogg/dircrd: created. Master encryption key wallet files /home/lightdb/ogg/dirwlt: created. Dump files /home/lightdb/ogg/dirdmp: created.
# 编辑mgr GGSCI (oracle221) 1>EDIT param mgr # 复制以下内容,保存(此端口要与源端Pump进程里配置的对应) PORT 7810 # 启动mgr GGSCI (hs-10-20-30-199) 4> start mgr GGSCI (hs-10-20-30-199) 5> info all Program Status Group Lag at Chkpt Time Since Chkpt MANAGER RUNNING
为了保证源和目标端在传数据的时候不会重复或者少传,在目标端添加checkpoin表
dblogin sourcedb gg_Postgres userid ogg , password ogg add checkpointtable public.checkpointtab
# 编辑参数文件 edit params rep_1 # 复制如下内容,酌情修改参数,保存 REPLICAT rep_1 SOURCEDEFS /home/lightdb/ogg/dirdef/defgen.def SETENV(PGCLIENTENCODING = "UTF8" ) SETENV(ODBCINI="/home/lightdb/ogg/odbc.ini" ) SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8") TARGETDB GG_Postgres,userid ogg,password ogg DISCARDFILE /home/lightdb/ogg/dirrpt/rep_1.rpt, append MAP ta6_pub11.*, TARGET ta6_pub11.*; # 添加 Replicat 进程 add replicat rep_1,exttrail /home/lightdb/ogg/dirdat/pa,begin now,checkpointtable public.checkpointtab # 启动 Replicat 进程 GGSCI (lottu02) 1> start REPLICAT rep_1 GGSCI (hs-10-20-30-199) 1> info all Program Status Group Lag at Chkpt Time Since Chkpt MANAGER RUNNING REPLICAT RUNNING REP_1 00:00:00 00:00:07
源端执行
SQL> delete from TBFUNDCHANGELIMIT; 1379 rows deleted. SQL> commit; Commit complete.
目标端
ta6_pub11@ta6_pub11=# select count(*) from tbfundchangelimit; count ------- 1379 (1 row) ta6_pub11@ta6_pub11=# select count(*) from tbfundchangelimit; count ------- (1 row)
数据初始同步,可以使用ora2pg
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29990276/viewspace-2903813/ ,如需转载,请注明出处,否则将追究法律责任。