当前位置: 首页 > article >正文

【数据迁移】- Oracle GoldenGate(OGG)

【数据迁移】- Oracle GoldenGate(OGG) - 目录

  • 一、GoldenGate简介
  • 二、GoldenGate安装规划
  • 三、GoldenGate安装前准备
    • 3.1 源端打开数据库补充日志
    • 3.2 源端打开force logging
    • 3.3 源端配置归档模式
    • 3.4 两端创建GoldenGate用户
  • 四、GoldenGate安装
    • 4.1 介质下载
    • 4.2 目标端添加环境变量
    • 4.3 目标端检查lib包
    • 4.4 目标端创建OGG安装目录
    • 4.5 两端创建subdir
  • 五、配置OGG进程
    • 5.1 两端配置mgr
    • 5.2 源端配置Extract抽取进程
    • 5.3 源端配置Pump进程
    • 5.4 源端add trandata
    • 5.5 目标端配置复制进程
    • 5.6 源端开启事务数据捕捉
    • 5.7 源端升级集成抽取
  • 六、GoldenGate数据初始化
    • 6.1 源端处理数据库长事务
    • 6.2 源端数据库导出
    • 6.3 目标端数据库导入
  • 七、禁用目标端JOB,触发器
  • 八、目标端开启复制同步
  • 九、正式割接
  • 十、回退方案

一、GoldenGate简介

GoldenGate软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库实时同步(real-time data synchronize)、双活(active-active high availability)。GoldenGate软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,其复制过程简图如下
在这里插入图片描述
如上图所示,GoldenGate的数据复制过程如下:
利用捕捉进程(Capture Process)在源系统端读取Online Redo Log或Archive Log,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为GoldenGate自定义的中间格式存放在队列文件(trail)中。再利用传送进程将队列文件通过TCP/IP传送到目标系统。捕捉进程在每次读完log中的数据变化并在数据传送到目标系统后,会写检查点(checkpoint),记录当前完成捕捉的log位置,检查点的存在可以使捕捉进程在中止并恢复后可从检查点位置继续复制。

二、GoldenGate安装规划

目标端端(19c)源端(11g)
操作系统LinuxLinux
Oracle版本19.1511.2.0.4
数据库架构RAC单实例
数据库存储方式ASM文件系统
数据库字符集ZHS16GBkZHS16GBK
OGG版本1919
OGG目录大小5T1T
OGG目录/ogg/ogg19/home/oracle/ogg
参数文件目录/ogg/ogg19/dirprm/home/oracle/ogg /dirprm
trail文件目录/ogg/ogg19/dirdat/home/oracle/ogg /dirdat

三、GoldenGate安装前准备

3.1 源端打开数据库补充日志

SQL> select SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI,
SUPPLEMENTAL_LOG_DATA_FK,SUPPLEMENTAL_LOG_DATA_ALL, force_logging from v$database;
SQL> alter database add supplemental log data;
SQL>alter database add supplemental log data (primary key, unique,foreign key) columns;
SQL>alter system switch logfile;

3.2 源端打开force logging

SQL> alter database force logging;
SQL> SELECT force_logging FROM v$database;

3.3 源端配置归档模式

1)如果数据库没有开启归档,请使用管理员用户登陆数据库,使用以下步骤开启归档,注意该步骤需要重启数据库。
SQL> alter system set log_archive_dest_1='location=/home/oracle/xx' scope=spfile;   
SQL> shutdown immediate
SQL> startupmount
SQL> alter database archivelog;
SQL> alter database open;2)确认是否开启归档模式:
SQL>select  log_mode  from v$database;

3.4 两端创建GoldenGate用户

1)创建表空间,为goldengate用户创建指定的表空间TBS_OGG,表空间并必须大于等于1000m,创建语句如下:
create tablespace TBS_OGG datafile '/home/oracle/oradata/ipmstest/ogg.dbf' size 5G autoextend on;2)创建用户ogguser,创建语句如下:
--创建用户:
SQL> create user ggate identified by oracle default tablespace TBS_OGG
temporary tablespace TEMP
quota unlimited on TBS_OGG;

--授权给ogg用户:
源端:
SQL> GRANT CONNECT TO ggate;
SQL> GRANT ALTER SESSION TO ggate;
SQL> GRANT CREATE SESSION TO ggate;
SQL> GRANT FLASHBACK any table TO ggate;
SQL> GRANT SELECT  any table TO ggate;
SQL> GRANT RESOURCE TO ggate;
SQL> GRANT SELECT ANY DICTIONARY to ggate;
SQL> GRANT SELECT on dba_clusters to ggate;
SQL> GRANT SELECT ANY TRANSACTION to ggate;
SQL> GRANT alter any table to ggate;
SQL> GRANT execute on utl_file to ggate;
SQL> ALTER TABLE sys.seq$ ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

目标端:
SQL> GRANT CONNECT,unlimited tablespace TO ggate;
SQL> GRANT ALTER SESSION TO ggate;
SQL> GRANT CREATE SESSION TO ggate;
SQL> GRANT RESOURCE TO ggate;
SQL> GRANT SELECT ANY DICTIONARY to ggate;
SQL> GRANT SELECT any table TO ggate;
SQL> GRANT INSERT any table to ggate;
SQL> GRANT UPDATE any table to ggate;
SQL> GRANT DELETE any table to ggate;
SQL> grant exempt access policy to ggate;
SQL> grant execute on DBMS_FLASHBACK to ggate;
SQL> grant execute on utl_file to ggate;
SQL> grant alter any table to ggate;
SQL> Grant create table to ggate;
SQL> exec dbms_goldengate_auth.grant_admin_privilege('ggate');
$ cd /ogg11 (OGG所在目录)
SQL> @sequence.sql

四、GoldenGate安装

4.1 介质下载

到官网下载所对应平台的介质。
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html

4.2 目标端添加环境变量

# vim .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs



PATH=$PATH:$HOME/bin
ORACLE_SID=马赛克1
ORACLE_BASE=/oracle/app/oracle
ORACLE_HOME=/oracle/app/oracle/19c/dbhome_1export PATH=$PATH:$ORACLE_HOME/bin:/ogg:.
export LD_LIBARY_PATH=$ORACLE_HOME/lib
export PATH

export NLS_LANG=american_america.ZHS16GBK

export PS1='['`hostname`':'gg']'$
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib:/lib:.:/ogg:$LD_LIBRARY_PATH
export CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/jdk/jre/lib/ext
export SHLIB_PATH=$ORACLE_HOME/lib:$SHLIB_PATH:.
umask 0022

export LIBPATH=$ORACLE_HOME/lib:.

4.3 目标端检查lib包

[oggtest:gg]$ unzip p13631344_111112_Linux-x86-64--11G.zip
[oggtest:gg]$ tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar
[oggtest:gg]$ ldd ggsci
        linux-vdso.so.1 =>  (0x00002ab73aed9000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00000032c9600000)
        libicui18n.so.38 => /oradata/gg/libicui18n.so.38 (0x00002ab73aefa000)
        libicuuc.so.38 => /oradata/gg/libicuuc.so.38 (0x00002ab73b25b000)
        libicudata.so.38 => /oradata/gg/libicudata.so.38 (0x00002ab73b594000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00000032c9a00000)
        libxerces-c.so.28 => /oradata/gg/libxerces-c.so.28 (0x00002ab73c26b000)
        libnnz11.so => /opt/app/oracle/product/11.2.0/db_1/lib/libnnz11.so (0x00002ab73c782000)
        libclntsh.so.11.1 => /opt/app/oracle/product/11.2.0/db_1/lib/libclntsh.so.11.1 (0x00002ab73cb4e000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000032dac00000)
        libm.so.6 => /lib64/libm.so.6 (0x00000032c9200000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000032d6400000)
        libc.so.6 => /lib64/libc.so.6 (0x00000032c8e00000)
        /lib64/ld-linux-x86-64.so.2 (0x00000032c8a00000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00000032cca00000)
        libaio.so.1 => /usr/lib64/libaio.so.1 (0x00002ab73f4dc000)

4.4 目标端创建OGG安装目录

$ mkidr /ogg/ogg19

给ogg安装目录授权
# chown  oracle:oinstall  /ogg/ogg19

安装:19c后用图形化安装,19C之前解压即可
解压:
$ unzip  *.zip
$ tar -xvf  *.tar

图形化:
解压后有Disk1目录
Oracle用户下,直接./runInstaller进行图形化安装。即可完成安装。

4.5 两端创建subdir

$ ggsci
$GGSCI> create subdirs

五、配置OGG进程

5.1 两端配置mgr

$ ggsci
GGSCI > edit params mgr
PORT 7809
DynamicPortList 7810-7820
PurgeOldExtracts ./dirdat/*,UseCheckpoints,MinKeepDays 3
LagReportHours 1
LagInfoMinutes 30
LagCriticalMinutes 45

GGSCI>start mgr

5.2 源端配置Extract抽取进程

添加extract进程: 
GGSCI> add extract ext_xn, tranlog,THREADS  1  begin now

为extract指定本地trail文件:
GGSCI> add exttrail ./dirdat/ex, extract ext_xn, megabytes 100
GGSCI> edit params ext_xn
EXTRACT EXT_XN
SETENV (ORACLE_HOME = "/home/oracle/product/11.2.0/db_1" )
SETENV (ORACLE_SID = "马赛克")
SETENV (NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK")
REPORTCOUNT EVERY 1 MINUTES ,RATE
USERID ggate password oracle
CACHEMGR CACHESIZE 4G
EXTTRAIL ./dirdat/ex
DISCARDFILE ./dirrpt/ext_xn.dsc, APPEND, MEGABYTES 1000
FETCHOPTIONS NOUSESNAPSHOT
--TRANLOGOPTIONS LOGRETENTION DISABLED
--TRANLOGOPTIONS DBLOGREADER
DBOPTIONS ALLOWUNUSEDCOLUMN
--DDLOPTIONS ADDTRANDATA
DYNAMICRESOLUTION
Numfiles 5000
report at 1:59
DISCARDROLLOVER AT 2:00
REPORTROLLOVER AT 2:00
WARNLONGTRANS 1H, CHECKINTERVAL 10m
STATOPTIONS REPORTFETCH
sequence 马赛克用户.*;

TABLE 马赛克用户.*;

5.3 源端配置Pump进程

GGSCI> ADD EXTRACT pup_xn, EXTTRAILSOURCE ./dirdat/ex, BEGIN now
GGSCI> ADD RMTTRAIL ./dirdat/re, EXTRACT pup_xn, megabytes 100
GGSCI> edit params pup_xn

EXTRACT pup_xn
PASSTHRU
DYNAMICRESOLUTION
USERID ggate password oracle
RMTHOST  IP马赛克, MGRPORT 7839
RMTTRAIL ./dirdat/re
DISCARDFILE ./dirrpt/ext_pup1.dsc, APPEND, MEGABYTES 1000
REPORTCOUNT EVERY 1 HOURS, RATE
sequence 马赛克用户.*;

TABLE 马赛克用户.*;

5.4 源端add trandata

GGGSCI> DBLOGIN USERID ggate, PASSWORD  oracle
GGSCI> add trandata  
GGSCI> info trandata 

5.5 目标端配置复制进程

GGSCI (oggtest) 1> edit params ./GLOBAL
GGSCHEMA ggate
CHECKPOINTTABLE ggate.checkpoint

GGSCI> DBLOGIN USERID ggate, PASSWORD oracle
GGSCI> add checkpointtable ggate.checkpoint
GGSCI> add replicat rp_dm, EXTTRAIL ./dirdat/re, checkpointtable ggate.checkpoint

GGSCI > edit param rp_dm
replicat rp_dm
SETENV (ORACLE_HOME='/oracle/app/oracle/19c/dbhome_1')
SETENV (ORACLE_SID='马赛克') 
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
USERID ggate password oracle
DBOPTIONS SUPPRESSTRIGGERS
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/rp_dm.dsc, purge, megabytes 512
DDL INCLUDE MAPPED,exclude objtype 'TRIGGER' ,exclude objtype 'JOB',exclude instr 'ALTER SYNONYM'
ALLOWNOOPUPDATES
REPORTCOUNT EVERY 30 MINUTES, RATE

MAP	马赛克用户.*,TARGET 马赛克用户.*;

5.6 源端开启事务数据捕捉

GGSCI> start EXTRACT ext_xn
GGSCI> start EXTRACT pup_xn 

5.7 源端升级集成抽取

-- 有压缩表的情况下需要升级为集成抽取
GGSCI> DBLOGIN USERID ggate, PASSWORD  oracle
GGSCI > register extract ext_xn database
GGSCI > alter extract ext_xn,upgrade integrated tranlog
GGSCI > info ext_xn
GGSCI > info all

六、GoldenGate数据初始化

6.1 源端处理数据库长事务

OGG无法处理抽取进程启动的时间点以前的事务,因此在数据全量初始化前要清理抽取进程启动的时间点前开始的事务,否则会有数据丢失的风险。

--检查数据库长事务:
SQL> set lin 200 pagesize 500
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; 
SQL> col event for a30
SQL> col OSUSER for a10
SQL> col USERNAME for a10
SQL> col PROGRAM for a35
SQL> SELECT s.INST_ID,s.sid,s.serial#,s.status,s.username,START_DATE,s.LOGON_TIME,s.WAIT_TIME, 
s.osuser, s.sql_id, s.program
FROM gv$session s,gv$transaction t WHERE s.INST_ID=t.INST_ID and s.saddr=t.ses_addr
order by START_DATE;

与应用和DBA确认长事物是否可处理

6.2 源端数据库导出

记录下当前SCN
SQL> select current_scn from v$database

数据泵导出:
SQL> col DIRECTORY_PATH for a50;
SQL> select * from dba_directories;
SQL> create directory dpdir as '/xx';
SQL> grant read,write on directory dpdir to public;

导出: (注意修改目录和评估空间大小)
$ expdp \"/ as sysdba\" directory=dpdir DUMPFILE=tb%U.dmp logfile=tb.log parallel=12 FLASHBACK_SCN=239174773615 schemas=用户马赛克

6.3 目标端数据库导入

目标端创建表空间,与源端一致
$ impdp  \' /  as sysdba\' directory=xxx dumpfile=tb%U.dmp logfile=tbimp.log  parallel=6 cluster=n

七、禁用目标端JOB,触发器

禁用JOB:
SQL> select a.broken,'exec dbms_job.broken('||A.JOB||',true);', a.* from 
dba_jobs a where a.log_user in ('马赛克用户');
	
查询触发器:
SQL> select 'alter trigger '||owner||'.'||trigger_name||' disable;' from dba_triggers 
where owner in ('马赛克用户') order by status,owner;

八、目标端开启复制同步

数据库层面先开启ogg复制参数:
SQL> ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;

开启目标端的复制进程,从指定的SCN开始
GGSCI> start rp_dm, aftercsn 239174773615 
GGSCI> info all

九、正式割接

1、ogg源端停止应用,监听,查看进程延迟为0,停止ogg进程,切换应用地址,修改job
SQL> show parameter job_queue
SQL> alter system set job_queue_processes=0 sid='*' scope=both;

2、目标端查看ogg进程lag为0,目标端启用JOB,触发器
--启用JOB:
SQL> select a.broken,'exec dbms_job.broken('||A.JOB||',false);', a.* from 
dba_jobs a where a.log_user in ('马赛克用户');

--查询触发器:
SQL> select 'alter trigger '||owner||'.'||trigger_name||' enable;' from dba_triggers 
where owner in ('马赛克用户') order by status,owner;

3、业务验证

4、源端还原job
alter system set job_queue_processes=xxx sid='*' scope=both;

十、回退方案

停止两端OGG进程,应用修改原数据库IP访问地址


http://www.kler.cn/a/542859.html

相关文章:

  • 基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试
  • 利用邮件合并将Excel的信息转为Word(单个测试用例转Word)
  • chrome-mojo C++ Bindings API
  • 活动预告 |【Part1】Microsoft Azure 在线技术公开课:AI 基础知识
  • 堆排序
  • 在Uniapp中使用阿里云OSS插件实现文件上传
  • 设计模式中的关联和依赖区别
  • ASP.NET Core 外部向SignalR的Hub发消息
  • MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32
  • 3.4 学习UVM中的uvm_monitor类分为几步?
  • 【论文笔记】Are Self-Attentions Effective for Time Series Forecasting? (NeurIPS 2024)
  • 移植BOA服务器到GEC2440开发板
  • 图解72个机器学习基础知识点
  • Flink怎么保证Exactly - Once 语义
  • 大型语言模型(LLM)中的自适应推理预算管理:基于约束策略优化的解决方案
  • 人工智能与低代码如何重新定义企业数字化转型?
  • Windows11系统笔记本电脑真的关机了么
  • Ubuntu指令学习(个人记录、偶尔更新)
  • 利用爬虫获取1688商品详情的实战案例指南
  • android的Jetpack简介
  • JavaScript系列(70)--响应式编程进阶详解
  • 机器学习-使用大规模的平行语料
  • mysql学习笔记-锁
  • 畅聊deepseek-r1,SiliconFlow 硅基流动注册+使用
  • 基于YoloV11和驱动级鼠标模拟实现Ai自瞄
  • 鸿蒙oh-package.json版本号